本帖最后由 freewold 于 2011-4-28 10:23 编辑
五步暴力拆解Word to PDF(去NAG+去时间限制+去水印+转换文件提示试用版...) 【文章标题】: 五步暴力拆解Word to PDF(去NAG+去时间限制+去水印+转换文件提示试用版...) 【文章作者】: freewold 【作者邮箱】: freewold @126.com 【作者主页】: 【软件名称】: Word to PDF 7.8 【下载地址】: http://www.skycn.com/soft/44098.html 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】 软件介绍: Word to PDF 是一个易用和强大的PDF转换器。 你能转换MS Word, RTF, HTML, Htm, XML, TEXT,CSS 和 IMAGES到PDF. Word to PDF(DOC), Word to PDF(RTF),Word to PDF Converter, Html to PDF(Html,Htm), XML TO PDF(Xml), Text to PDF(Txt), CSS to PDF(Css), PNG to PDF, Jpg to PDF, Jpeg to PDF, Bmp to PDF, Gif to PDF 运行软件后发现,这是一个 试用软件,根本没有提示输入用户名和注册码的地方,我晕,算法分析无门 ~_-!!! 由于这软件太好用了,准备暴力拆解,看能不能把它变相为无功能限制的免费版。后来发现了可行性,必须要突破其各种限制了。 我们需要解决的问题有
2、去注册NAG
3、去时间限制
4、去未注册字符
5、去水印限制
挺繁琐的,但也非常有趣,需要准备的工具有PEdi, DEDE, OD, C32ASM,PE Explorer等,开工!
=================== 第一步:脱壳 ==================
这一步非常简单,ASPack 2.12 -> Alexey Solodovnikov 压缩壳,想怎么脱就怎么脱。
=================== 第二步:去注册NAG =============
每次启动都会先出现一个Splash窗口,显示“UnRegistered”字样, 需要把Splash窗口干掉。 搜索“UnRegistered” 004E0A9F
0F85 D7000000 JNZ 004E0B7C
// NOP 004E0AA5
.
A1 7C2E4E00
MOV EAX,DWORD PTR DS:[4E2E7C] 004E0AAA
.
8B00
MOV EAX,DWORD PTR DS:[EAX] 004E0AAC
.
8B80 FC020000 MOV EAX,DWORD PTR DS:[EAX+2FC] 004E0AB2
.
BA B40B4E00
MOV EDX,004E0BB4
Registered ;
004E0A9F
0F85 D7000000 JNZ 004E0B7C
修改为: 004E0A9F
/0F85 00000000 JNZ 004E0AA5 就可以实现把不显示NAG窗口了。
=================== 第三步:去时间限制 =============
程序运行后发现主窗口标题栏有“……UnRegistered (6 days remaining)”等字样,明显是利用了时间比较来 计算使用天数。这里有两种可能。 一种是同时获得系统当前时间 和 自身文件时间,进行相减运算得出使用天数 另一种是同可能把程序安装时的时间保存在某文件或注册表中,然后用当前时间减去它就得出已使用天数。 但无论用哪种方法,到达这个算法过程最简便的方法是 查ASCII “days remaining”字样,定位到 004DA8FA
|.
68 17B74D00
PUSH 004DB717 004DA8FF
|.
64:FF30
PUSH DWORD PTR FS:[EAX] 004DA902
|.
64:8920
MOV DWORD PTR FS:[EAX],ESP 004DA905
|.
8BC3
MOV EAX,EBX 004DA907
E8 34FFFFFF
CALL 004DA840
计算使用天数CALL 004DA90C
|.
8D45 F8
LEA EAX,DWORD PTR SS:[EBP-8] 004DA90F
|.
E8 DC9AF2FF
CALL 004043F0 复制代码Delphi程序反汇编出来的程序就是简洁明了,比VB程序容易理解多啦 ~~~ I Love Delphi!! 明显程序是通过读取系统目录下一个叫wordwinf20.dll的文件的创建时间,调用了
<JMP.&kernel32.FileTimeToLocalFileTime>
<JMP.&kernel32.FileTimeToDosDateTime>
<JMP.&kernel32.FileTimeToDosDateTime>
系列函数来计算出已经使用的天数。
004DA907
E8 34FFFFFF
CALL 004DA840
计算使用天数CAL
把这个CALL
NOP填充掉就可以了 复制代码保存起来看看效果,把日期改成2010年看看有没有提示过期?? 果然,显示:“未注册”字样..证明时限给搞定了。
=================== 第四步:去未注册字符 =============
我们目的是要变为破解免费版本,当然绝对不能出现类似“未注册”之类的讨厌字眼,必须把它去掉。 用DEDE找到激活主窗体的事件代码处下断:004DA8DC
/.
55
PUSH EBP 运行来到: 004DACED
|. /0F84 29040000 JE 004DB11C
004DACF3
|. |8B83 1C040000 MOV EAX,DWORD PTR DS:[EBX+41C] 004DACF9
|. |E8 FE14FDFF
CALL 004AC1FC 004DACFE
|. |83F8 06
CMP EAX,6
---------------------------
004DACED
|. /0F84 29040000 JE 004DB11C
修改为: 004DACED
|. /0F84 29040000 JMP 004DB11C 来到: 004DB13A
|.
FF2485 41B14D>JMP DWORD PTR DS:[EAX*4+4DB141] 004DB141
|.
5DB14D00
DD WordtoPD.004DB15D
004DB145
|.
F5B14D00
DD WordtoPD.004DB1F5 004DB149
|.
93B24D00
DD WordtoPD.004DB293 004DB14D
|.
31B34D00
DD WordtoPD.004DB331 004DB151
|.
CFB34D00
DD WordtoPD.004DB3CF 004DB155
|.
6DB44D00
DD WordtoPD.004DB46D 004DB159
|.
0BB54D00
DD WordtoPD.004DB50B 004DB15D
|>
68 88B84D00
PUSH 004DB888 -------------------------------------- 004DB13A
|.
FF2485 41B14D>JMP DWORD PTR DS:[EAX*4+4DB141] 修改为:004DB13A
|.
FF2485 41B14D>JMP 004DB15D 往下走到: 004DB1A9
|.
FFB5 40FFFFFF PUSH DWORD PTR SS:[EBP-C0] 这里出现“UnRegistered 004DB1AF
|.
68 BCB84D00
PUSH 004DB8BC 004DB1B4
|.
8D95 3CFFFFFF LEA EDX,DWORD PTR SS:[EBP-C4] -------------------------------------- 004DB1A9
|.
FFB5 40FFFFFF PUSH DWORD PTR SS:[EBP-C0] 修改为:004DB1A9
|.
FFB5 40FFFFFF PUSH 4E0BB4 004E0AB2
.
BA B40B4E00
MOV EDX,004E0BB4
;
Registered “Registered“可以自己修改:我修改为:”--已注册—“
===================== 第五步:去水印及转换文件提示试用版================
讲了这么多,这才是最重要,也是困难的一步了。由于这是个试用版,在生成PDF文件时,总会插入一个提示未注册 的背景图片,非常令人讨厌。如果这一步不搞定,前面做那么多都没有任何意义。 还是第一次弄水印,没有任何经验,但判断可能是用了某个图片文件作背景引入到生成的PDF文件中,因此可能用到
004DD378
/$
55
PUSH EBP
这里是打水印的地方,去除的方法很简单。 004DD3AE
/0F84 44010000 JE 004DD4F8 004DD3B4
|. |BA 8C000000
MOV EDX,8C 004DD3B9
|. |8B9E 48040000 MOV EBX,DWORD PTR DS:[ESI+448] ---------中间代码省略 004DD781
|> \33C0
XOR EAX,EAX ----------------------------------------- 004DD3AE
/0F84 44010000 JE 004DD4F8 修改为直接跳到004DD781
|> \33C0
XOR EAX,EAX这句,这样就直接跳过了打水印的地方及转换文件提示试用版。 至此手工。 -------------------------------------------------------------------------------- 【版权声明】:
转载请注明作者并保持文章的完整, 谢谢!
2011年04月27日 12:56:46
|