吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 34522|回复: 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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
第一处:
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++] 纯文本查看 复制代码
1
2
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, 下载次数: 608, 下载积分: 吾爱币 -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, 2025-2-22 00:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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