吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 34236|回复: 48
收起左侧

[原创] 破解实战-第八战

  [复制链接]
我是用户 发表于 2013-6-12 21:27
本帖最后由 我是用户 于 2013-6-19 23:18 编辑

【软件名称】: A-PDF Split
【下载地址】: 见附件
【加壳方式】: ASProtect
【使用工具】: OD
【操作平台】: XP SP2
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

1.查壳
用PEID对PdfSplit.exe进行查壳.
如图1:
图1.jpg
ASProtect 1.2x - 1.3x [Registered] -> Alexey Solodovnikov [Overlay]的壳,用脱壳机或者
脚本脱都可以.脱完之后显示是用Delphi写的.
如图2:
图2.jpg


2.去自效验
基本上每个程序脱完壳之后都会有自效验,这个程序的自效验不难,但是烦人,要改的地方很多。
打开脱完壳的程序,点击Try按钮,程序会自动关闭。
如图3:
图3.jpg
我们将其载入OD,然后下PostQuitMessage断点,运行,程序断下。
相关代码如下:
[C++] 纯文本查看 复制代码
00576B2C   .  90            nop
00576B2D   .  90            nop
00576B2E   .  90            nop
00576B2F   .  90            nop
00576B30   >  803D DA835900>cmp byte ptr ds:[0x5983DA],0xCC
00576B37   .  74 0A         je short PdfSplit.00576B43
00576B39   .  B8 00845900   mov eax,PdfSplit.00598400
00576B3E > .  E8 CDDFE8FF   call PdfSplit.00404B10                   ;  * Reference to: System.@LStrClr(void;void);
00576B43   >  803D DB835900>cmp byte ptr ds:[0x5983DB],0xC2
00576B4A      74 15         je short PdfSplit.00576B61               //关键跳
00576B4C   .  90            nop
00576B4D   .  90            nop
00576B4E   .  90            nop
00576B4F   .  A1 E0475900   mov eax,dword ptr ds:[0x5947E0]
00576B54   .  8B00          mov eax,dword ptr ds:[eax]
00576B56 > .  E8 5152F1FF   call PdfSplit.0048BDAC                   ;  PostQuitMessage
00576B5B   .  FF05 F8835900 inc dword ptr ds:[0x5983F8]
00576B61   >  803D DC835900>cmp byte ptr ds:[0x5983DC],0x62
00576B68   .  74 10         je short PdfSplit.00576B7A
00576B6A   .  90            nop
00576B6B   .  90            nop
00576B6C   .  90            nop
00576B6D   .  90            nop


我们将00576B4A处je short PdfSplit.00576B61 改为jmp就可跳过该验证。但是这个程序之后的验证还有很多,大概会有十四处,但每一处并不是都是PostQuitMessage,有的是程序进入死循,有的则是程序弹出错误对话框,我们一个个定位是很麻烦的,所以我们要搞清楚他是根据什么来进行自效验的,从源头的来解除它。
通过代码00576B43   >  803D DB835900>cmp byte ptr ds:[0x5983DB],0xC2,我们可以知道,
[0x5983DB]的数值和C2比较,如果相等的话就跳过验证,那么[0x5983DB]的数值是怎么来的吗?我们往上翻,在翻的过程中,我们会看到如下代码:
[C++] 纯文本查看 复制代码
0057689F   .  A3 04845900   mov dword ptr ds:[0x598404],eax          ;  PdfSplit.00598400
005768A4   >  803D D3835900>cmp byte ptr ds:[0x5983D3],0x14
005768AB   .  74 61         je short PdfSplit.0057690E
005768AD   .  B8 FC835900   mov eax,PdfSplit.005983FC
005768B2   .  BA 8C705700   mov edx,PdfSplit.0057708C                ;  ASCII "!em kcarc ton oD"
005768B7 > .  E8 A8E2E8FF   call PdfSplit.00404B64                   ;  * Reference to: System.@LStrAsg(void;void;void;void);
005768BC   .  B8 00845900   mov eax,PdfSplit.00598400
005768C1 > .  E8 4AE2E8FF   call PdfSplit.00404B10                   ;  * Reference to: System.@LStrClr(void;void);
005768C6   .  A1 FC835900   mov eax,dword ptr ds:[0x5983FC]
005768CB > .  E8 10E5E8FF   call PdfSplit.00404DE0                   ;  * Reference to: System.@LStrLen(String):Integer;
005768D0   .  83F8 01       cmp eax,0x1
005768D3   .  7C 39         jl short PdfSplit.0057690E
005768D5   .  A3 F4835900   mov dword ptr ds:[0x5983F4],eax          ;  PdfSplit.00598400
005768DA   >  8D45 D0       lea eax,dword ptr ss:[ebp-0x30]


注意到005768B2代码处的字符串没,倒过来读就是DO not crack me!。看来作者是知道我们要破解他,所以告诉我们不要有这种想法,在下面的验证中会出现很多次这样的语句,如果我们不从源头上改的话,去跟那么代码很是烦人。我们继续往上翻。
相关代码如下:
[C++] 纯文本查看 复制代码
00576608      321D 0C845900 xor bl,byte ptr ds:[0x59840C]
0057660E   .  881D CC835900 mov byte ptr ds:[0x5983CC],bl
00576614   .  881D CD835900 mov byte ptr ds:[0x5983CD],bl
0057661A   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
0057661F   .  A2 CE835900   mov byte ptr ds:[0x5983CE],al
00576624   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576629   .  A2 CF835900   mov byte ptr ds:[0x5983CF],al
0057662E   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576633   .  A2 D0835900   mov byte ptr ds:[0x5983D0],al
00576638   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
0057663D   .  A2 D1835900   mov byte ptr ds:[0x5983D1],al
00576642   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576647   .  A2 D2835900   mov byte ptr ds:[0x5983D2],al
0057664C   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576651   .  A2 D3835900   mov byte ptr ds:[0x5983D3],al
00576656   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
0057665B   .  A2 D4835900   mov byte ptr ds:[0x5983D4],al
...省略相关代码
00576769   .  A2 EF835900   mov byte ptr ds:[0x5983EF],al
0057676E   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576773   .  A2 F0835900   mov byte ptr ds:[0x5983F0],al
00576778   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
0057677D   .  A2 F1835900   mov byte ptr ds:[0x5983F1],al
00576782   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576787   .  A2 F2835900   mov byte ptr ds:[0x5983F2],al
0057678C   .  A0 CC835900   mov al,byte ptr ds:[0x5983CC]
00576791   .  A2 F3835900   mov byte ptr ds:[0x5983F3],al
00576796   .  FF05 F4835900 inc dword ptr ds:[0x5983F4]
0057679C   .  803D CC835900>cmp byte ptr ds:[0x5983CC],0x11
005767A3   .  74 0A         je short PdfSplit.005767AF


00576608代码处通过xor bl,byte ptr ds:[0x59840C]来得出bl的值来,
然后将bl处分别赋值给0x5983CC-0x5983F3的数据区间。
如图4:

图4.jpg
然后将0x5983CC-0x5983F3的每一个值分别进行比较,如0057679C所示,而自效验就因此在这
每一个比较之中,如果我们一个个的找非得累死不得,所以我们必须找到正确的bl值,至于比较就交给程序自行判断,反正我们的值是正确的,怕什么。
bl=bl xor [0x59840C],我们继续上翻代码:
[C++] 纯文本查看 复制代码
005763A3   .  BA 01000000   mov edx,0x1
005763A8   .  B8 80825900   mov eax,PdfSplit.00598280
005763AD > .  E8 8ED2E8FF   call PdfSplit.00403640                   ;  
005763B2   .  E8 49C8E8FF   call PdfSplit.00402C00
005763B7   .  FF05 F4835900 inc dword ptr ds:[0x5983F4]
005763BD   .  BA 94960000   mov edx,0x9694
005763C2   .  B8 80825900   mov eax,PdfSplit.00598280
005763C7 > .  E8 90D2E8FF   call PdfSplit.0040365C                   ;  设置文件指针
005763CC   .  E8 2FC8E8FF   call PdfSplit.00402C00
...无用nop
00576561   .  BA 0C845900   mov edx,PdfSplit.0059840C
00576566   .  B8 80825900   mov eax,PdfSplit.00598280
0057656B > .  E8 7CCFE8FF   call PdfSplit.004034EC                   ;  读文件
00576570   .  E8 8BC6E8FF   call PdfSplit.00402C00
...无用nop
0057657E   .  B8 80825900   mov eax,PdfSplit.00598280
00576583 > .  E8 10CDE8FF   call PdfSplit.00403298                   ;  关闭文件
00576588   .  E8 73C6E8FF   call PdfSplit.00402C00
...无用nop
0057659D   .  BA 80705700   mov edx,PdfSplit.00577080
005765A2   .  8D45 E4       lea eax,dword ptr ss:[ebp-0x1C]
005765A5 > .  E8 76CDE8FF   call PdfSplit.00403320                   ;  ->System.@PStrCpy
005765AA   .  8D45 E0       lea eax,dword ptr ss:[ebp-0x20]
005765AD   .  8B15 10845900 mov edx,dword ptr ds:[0x598410]
005765B3   .  8A52 04       mov dl,byte ptr ds:[edx+0x4]
005765B6   .  8850 01       mov byte ptr ds:[eax+0x1],dl
005765B9   .  C600 01       mov byte ptr ds:[eax],0x1
005765BC   .  8D55 E0       lea edx,dword ptr ss:[ebp-0x20]
005765BF   .  8D45 E4       lea eax,dword ptr ss:[ebp-0x1C]
005765C2   .  B1 02         mov cl,0x2
005765C4 > .  E8 27CDE8FF   call PdfSplit.004032F0                   ;  ->System.@PStrNCat;
005765C9   .  8D55 E4       lea edx,dword ptr ss:[ebp-0x1C]
005765CC   .  8D45 DC       lea eax,dword ptr ss:[ebp-0x24]
005765CF > .  E8 4CCDE8FF   call PdfSplit.00403320                   ;  ->System.@PStrCpy
005765D4   .  8D45 E0       lea eax,dword ptr ss:[ebp-0x20]
005765D7   .  8B15 10845900 mov edx,dword ptr ds:[0x598410]
005765DD   .  8A52 05       mov dl,byte ptr ds:[edx+0x5]
005765E0   .  8850 01       mov byte ptr ds:[eax+0x1],dl
005765E3   .  C600 01       mov byte ptr ds:[eax],0x1
005765E6   .  8D55 E0       lea edx,dword ptr ss:[ebp-0x20]
005765E9   .  8D45 DC       lea eax,dword ptr ss:[ebp-0x24]
005765EC   .  B1 03         mov cl,0x3
005765EE > .  E8 FDCCE8FF   call PdfSplit.004032F0                   ;  ->System.@PStrNCat;
005765F3   .  8D55 DC       lea edx,dword ptr ss:[ebp-0x24]
005765F6   .  8D45 E8       lea eax,dword ptr ss:[ebp-0x18]
005765F9 > .  E8 86E7E8FF   call PdfSplit.00404D84                   ;  ->System.@LStrFromString(String;String;ShortString;ShortString);<+>
005765FE   .  8B45 E8       mov eax,dword ptr ss:[ebp-0x18]
00576601 > .  E8 3253E9FF   call PdfSplit.0040B938                   ;  ->SysUtils.StrToInt
00576606   .  8BD8          mov ebx,eax                              ;  PdfSplit.00598400

通过以上代码我们可以知道,程序先用SetFilePointer函数,将文件指针至于0x9694,然后将通过
ReadFile将0x9694处的一个字节读出,并存在byte ptr ds:[0x59840C]中,我们通过C32定位下0x9694处的值
原文件如图5:

图5.jpg
脱壳后的文件如图6:
图6.jpg
原文件的值是0x79,脱壳后的文件的值是0xFF.
至于bl的值,他与文件无关,所以我们不必管他。
我们将[0x59840C]的值改为0x79,与bl进行异或,就能得出正确的值来。
修改如下:
00576608   .  321D 0C845900 xor bl,byte ptr ds:[0x59840C]
改为mov bl,0xC2即可。
如图7:

图7.jpg
如下的错误还很多,比如说:
如图8:

图8.jpg
如图9(进入死循环):

图9.jpg
等等等等....
要修改的地方大概有十四处,我们可以通过SetFilePointer来定位:
[C++] 纯文本查看 复制代码
第一处:
00576608   .  321D 0C845900 xor bl,byte ptr ds:[0x59840C]
bl=C2(正确的值)

第二处:
00574538  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=F1

第三处:
0057F7BC   .  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=12

第四处:
00580686   .  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=C1

第五处:
0057562D   .  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=94

第六处:
0057898D  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=C7

第七处:
005771CE  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=21

第八处:
00577E99  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=F5

第九处:
0057EA20  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=85

第十处:
005792A4  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=6C

第十一处:
0057A0A4  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=F6

第十二处:
0057AB14  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=5F

第十三处:
0057BC93  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=09
第十四处
0057CBB8  |.  3205 0C845900 xor al,byte ptr ds:[0x59840C]
al=6F


修改完后保存,程序下正常运行。

3.爆破。
这个简单了,未注册的生成的PDF有水印
如图10:

图10.jpg
爆破点如下:
标志位:
[C++] 纯文本查看 复制代码
0056A287     /75 06         |jnz short PdfSplit.0056A28F  改成nop
0056A289  |.  C645 F3 01    |mov byte ptr ss:[ebp-0xD],0x1   

将0056A287     /75 06         |jnz short PdfSplit.0056A28F  改成nop即可
注册成功后,不会出现注册NAG,和生成的PDF无水印。
如图11:
图11.jpg

最后祝大家端午节快乐!

=================================================================

传送门:
           破解实战-第一战:http://www.52pojie.cn/thread-197281-1-1.html
           破解实战-第二战:http://www.52pojie.cn/thread-197598-1-1.html
           破解实战-第三站:http://www.52pojie.cn/thread-197957-1-1.html
           破解实战-第四站:http://www.52pojie.cn/thread-198203-1-1.html
           破解实战-第五战:http://www.52pojie.cn/thread-198365-1-1.html
           破解实战-第六战:http://www.52pojie.cn/thread-198930-1-1.html
           破解实战-第七战:http://www.52pojie.cn/thread-199459-1-1.html
           破解实战-第八战:http://www.52pojie.cn/thread-199834-1-1.html
           破解实战-第九战:http://www.52pojie.cn/thread-200655-1-1.html           
           破解实战-第十战:http://www.52pojie.cn/thread-200798-1-1.html


a-pdf-sp.zip

1.68 MB, 下载次数: 604, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 8热心值 +8 收起 理由
yeluosuif + 1 谢谢@Thanks!
蛹壳 + 1 热心回复!
siti01 + 1 热心回复!
TheEnd + 1 谢谢@Thanks!
diqi74 + 1 很不错.新手表示看着还是有点迷糊.谢谢教程.
blmk + 1 感谢发布原创作品,[吾爱破解论坛]因你更精.
yuelass + 1 希望能看到你的更多作品!
Chief + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

loveliuhao323 发表于 2013-6-12 22:19
真心支持一下,继续更新,加油!!!!
混小子 发表于 2013-6-12 21:42
陷阱还真不少,分析起来有点难度,膜拜了。。。
475905793 发表于 2013-6-12 21:40
小雨细无声 发表于 2013-6-12 22:30
太可惜了,分和热心都加完了,ASp壳,下载弄过几次,在看雪下载一个,搞死人了,结果还是出错。
qq7156792 发表于 2013-6-12 22:47
这么多陷阱只有干瞪眼的份,这么厉害只有膜拜的份
 楼主| 我是用户 发表于 2013-6-12 23:04
小雨细无声 发表于 2013-6-12 22:30
太可惜了,分和热心都加完了,ASp壳,下载弄过几次,在看雪下载一个,搞死人了,结果还是出错。

用脱壳机,轻轻松松搞定

点评

在看雪下载那个,机脱手脱(等级123)修复都出错,大神可以看看。如有空闲做个录像膜拜一下。http://bbs.pediy.com/showthread.php?t=149988  发表于 2013-6-12 23:47
boteli 发表于 2013-6-12 23:11
好东西,,支持了
小雨细无声 发表于 2013-6-12 23:49
感谢大神回复,在看雪下载练手,机脱手脱修复都出错。
明天会更好 发表于 2013-6-13 00:39
新手受教了。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 14:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表