关于Word Password Recovery Master3.6.0.1(最新版)破解分析
首先我们用工具查壳,显示如下图:壳类型为:ASProtect v1.23 RC1,那么我们直接用工具脱壳好了。打开工具如图:
打开“选项”进行如下设置:
上图的设置是必须的,不然会报错。见如下图,说明我们成功脱完了,会自动生成一个:WPasRec_u.exe
再用工具查一下壳:
脱的很干净。顺便看一下算法,结果很是吓人……
接下来,我们用OD来看看吧。先查下字符串,结果字符串并不多,然后我们用C32Asm对脱壳后的程序进行反汇编看看,结果很丰富啊,有很多字符串供我们参考。
接着我们可以根据这些字符串的地址对应到OD中的地址,进行动态调试……打开软件看看有什么值得我们利用的东西。★第一个需要破解的地方:
在file菜单下的setting access password,用来设置软件运行的密码。对于第一个地方我们最好用调用堆栈法。顺利找到了这里:00429461 .83C4 04 add esp,400429464 .85C0 test eax,eax00429466 .75 53 jnz short WPasRec_.004294BB ;关键跳转。改为jmp00429468 .8D4C24 04 lea ecx,dword ptr ss:0042946C .68 1D800000 push 801D00429471 .51 push ecx将00429466处的jnz改为jmp后成功爆破,如下图。
也可以更改eax的值,如将00429461处的add esp,4改为mov eax,4也可以达到跳过注册框的目的。
破解后直接进行设置密码的地方。
★第二个需要破解的地方:在help菜单下的about。
接下来,我们看关键字符串,在里面发现有一个Registered to:这个便是about里面的那个了,
地址是0041C4F6,在OD中我们找到0041C4F6,在段首下断点。0041C4CC .83C4 04 add esp,40041C4CF .3BC3 cmp eax,ebx0041C4D1 .74 63 je short WPasRec_.0041C536 ;关键跳转0041C4D3 .51 push ecx0041C4D4 .8BCC mov ecx,esp0041C4D6 .896424 14 mov dword ptr ss:,esp0041C4DA .68 90554900 push WPasRec_.00495590 ;ASCII "UserName"0041C4DF .E8 06580400 call WPasRec_.00461CEA0041C4E4 .8D4C24 14 lea ecx,dword ptr ss:0041C4E8 .51 push ecx0041C4E9 .E8 D21B0000 call WPasRec_.0041E0C00041C4EE .83C4 08 add esp,80041C4F1 .50 push eax0041C4F2 .8D5424 10 lea edx,dword ptr ss:0041C4F6 .68 7C554900 push WPasRec_.0049557C ;ASCII "Registered to:"0041C4FB .52 push edx0041C4FC .895C24 2C mov dword ptr ss:,ebx0041C500 .E8 805A0400 call WPasRec_.00461F85 取得注册者的名字里面的代码为:00461FB7|> \8B4D 10 mov ecx, 将注册者的名字放入ecx00461FBA|.8B09 mov ecx,dword ptr ds: 00461FBC|.51 push ecx00461FBD|.FF71 F8 push dword ptr ds:★我们接着看一下,怎么成功注册打开注册窗口:
进行假注册:
弹出错误对话框:
通过查找字符串,我们发现有如下提示:
那么我们也可以用关键字符来确定位置,直接到00422434处。在段首00422280处下断,单步分析。004222DE .8B42 F8 mov eax,dword ptr ds:004222E1 .85C0 test eax,eax004222E3 .75 39 jnz short WPasRec_.0042231E‚
00422321 .8B41 F8 mov eax,dword ptr ds:00422324 .85C0 test eax,eax00422326 .75 39 jnz short WPasRec_.0042236100422328 .8D55 E0 lea edx,dword ptr ss:说明:以上两个地方分别验证用户名和注册码是否为空,为空则出错。简单验证之后顺利来到了关键跳:0042238C .85C0 test eax,eax0042238E .0F84 DA010000 je WPasRec_.0042256E 关键跳00422394 .8D4D E0 lea ecx,dword ptr ss:但是跑起来之后出现了错误提示:
怀疑是有验证。于是找到错误地址在:00401072|.85C0 test eax,eax00401074|.75 24 jnz short WPasRec_.0040109A :改为jmp直接跳过错误提示00401076|.8B4424 10 mov eax,dword ptr ss:程序顺利读取用户名,注册码等信息,并弹出注册成功提示。
点确定之后再次出现错误提示:
发现地址在:004224D0 .FF15 20424900 call dword ptr ds:跟进去,OD出现一片空白,在前面有一个跳转。004224CE . /75 77 jnz short WPasRec_.00422547 改为jmp自动跳过验证。004224D0 |FF15 20424900 call dword ptr ds: 错误提示004224D6 . |E9 17000000 jmp WPasRec_.004224F2搞定后程序跑起来了。因为在试用软件时我们知道,程序可以顺利破解密码,只不过不能显示全文,取原文前200(十六进制中为C8)个字符,
然后用“To view full document, please register”替换了其它原文内容,那我们就有了一个思路,在任何情况下都不让它替换。通过查找关键字符串,我们看到了在0042110B处发现有(DEMO)字符,一路跟进查看。一路跟下来,试了无数次,终于在这里看到了希望:0042139A|.8BCC mov ecx,esp0042139C|.8965 C8 mov ,esp0042139F|.68 6C594900 push WPasRec_.0049596C ;ASCII "Z!gjVy>#XelYjT"004213A4|.E8 41090400 call WPasRec_.00461CEA004213A9|.51 push ecx004213AA|.8D45 EC lea eax,“Z!gjVy>#XelYjT”便为文档的密码。再接下来,找到了解密文档的call。004213C6|.E8 B553FEFF call WPasRec_.00406780;
对这个call进行跟进,来到:
用cmp函数对eax和esi进行了比较,即对文档的真实字符数与200进行比较大小。那么我们直接跳过即可。把jle直接改为jmp,即可成功解密全文。接下来梳理一下破解过程:1、工具脱壳2、破除启动密码设置地址:00429464.85C0 test eax,eax00429466.75 53jnz short WPasRec_.004294BB ;关键跳转。改为jmp原始指令:75 53 JNZ修改指令:EB 53 JMP3、破除注册者限制地址:0041C4CF .3BC3 cmp eax,ebx0041C4D1 .74 63 je short WPasRec_.0041C536 ;关键跳转,为改jnz原始指令:74 63 je修改指令:75 63 jnz4、破除替换字符限制地址:004068B9 .3BC6 cmp eax,esi004068BB .0F8E 36020000 jle WPasRec_.00406AF7004068C1 .|8D55 C4 lea edx,dword ptr ss:原始指令:0F8E 36020000 jle修改指令:E9 37020000 jmp WPasRec_.00406AF790 nop
根据这个就自己写出patch工具了,这里不再上传了,因为在别人的电脑上不一定可以用。
原程序官网为:http://www.rixler.com/需要自己下载。
相信如下图的程序破解都大同小异了。。还可以做汉化处理哦。。呵呵。
算了我一点也不能理解啊 {:301_998:}楼主神人,呵呵.....我是来学习的.... 看不懂楼主写的东西 感谢楼主原创破文。。码了再看 学习学习懂一些 作者的文章我有待学习啊! 写的不错,常用的爆破方式,如果代码用代码框处理下就更好了,加精鼓励。 分析的很好.谢谢楼主分享方法. 非常详细的教程。谢谢楼主!