|
本帖最后由 abao991 于 2014-11-9 13:46 编辑
一、脱壳
查壳:ASPack 2.12 -> Alexey Solodovnikov
但是使用脱壳机脱壳后无法运行,用OD载入看下- 00A25001 > 60 pushad
- 00A25002 E8 03000000 call 好名字取.00A2500A ; 此处使用ESP定律
- 00A25007 - E9 EB045D45 jmp 45FF54F7
- 00A2500C 55 push ebp
- 00A2500D C3 retn
- 00A2500E E8 01000000 call 好名字取.00A25014
- 00A25013 EB 5D jmp short 好名字取.00A25072
- 00A25015 BB EDFFFFFF mov ebx,-0x13
- 00A2501A 03DD add ebx,ebp
- 00A2501C 81EB 00506200 sub ebx,好名字取.00625000
- 00A25022 83BD 88040000 0>cmp dword ptr ss:[ebp+0x488],0x0
- 00A25029 899D 88040000 mov dword ptr ss:[ebp+0x488],ebx
复制代码
具体下断过程就省略了,下硬件断点后F9运行,来到这里:
- 00A25416 /75 08 jnz short 好名字取.00A25420
- 00A25418 |B8 01000000 mov eax,0x1
- 00A2541D |C2 0C00 retn 0xC
- 00A25420 \68 A00B4F00 push 好名字取.004F0BA0
- 00A25425 C3 retn
复制代码
单步过RETN后代码,明显这里不是我们的OEP
- 004F0BA0 F8 clc
- 004F0BA1 EB 23 jmp short 好名字取.004F0BC6
- 004F0BA3 101C7C adc byte ptr ss:[esp+edi*2],bl
- 004F0BA6 40 inc eax
- 004F0BA7 FB sti
- 004F0BA8 A9 2B70F657 test eax,0x57F6702B
- 004F0BAD 8577 DF test dword ptr ds:[edi-0x21],esi
- 004F0BB0 DC79 5A fdivr qword ptr ds:[ecx+0x5A]
- 004F0BB3 3BF9 cmp edi,ecx
- 004F0BB5 CD 94 int 0x94
- 004F0BB7 28A5 B65B9267 sub byte ptr ss:[ebp+0x67925BB6],ah
- 004F0BBD A6 cmps byte ptr ds:[esi],byte ptr es:[edi]
- 004F0BBE 24 AA and al,0xAA
- 004F0BC0 04 65 add al,0x65
复制代码
那么我们继续单步,来到
- 004F0BC6 60 pushad
- 004F0BC7 73 1E jnb short 好名字取.004F0BE7
- 004F0BC9 4D dec ebp
- 004F0BCA B2 3C mov dl,0x3C
- 004F0BCC 5F pop edi
- 004F0BCD DE1B ficomp word ptr ds:[ebx]
复制代码
看到PUSHAD,可以继续使用ESP定律,之后来到
- 004F0E35 F8 clc
- 004F0E36 73 0D jnb short 好名字取.004F0E45
- 004F0E38 A3 A1D2AFF8 mov dword ptr ds:[0xF8AFD2A1],eax
- 004F0E3D F1 int1
- 004F0E3E 38BE 49C5A5FA cmp byte ptr ds:[esi-0x55A3AB7],bh
- 004F0E44 4D dec ebp
- 004F0E45 ^ E9 E289FDFF jmp 好名字取.004C982C
复制代码
单步过004F0E46,就跳到了程序的OEP。
- 004C982C 55 push ebp
- 004C982D 8BEC mov ebp,esp
- 004C982F 6A FF push -0x1
- 004C9831 68 38F29700 push 好名字取.0097F238
- 004C9836 68 A4C14C00 push 好名字取.004CC1A4
- 004C983B 64:A1 00000000 mov eax,dword ptr fs:[0]
- 004C9841 50 push eax
- 004C9842 64:8925 0000000>mov dword ptr fs:[0],esp
- 004C9849 83EC 58 sub esp,0x58
- 004C984C 53 push ebx
- 004C984D 56 push esi
- 004C984E 57 push edi
- 004C984F 8965 E8 mov dword ptr ss:[ebp-0x18],esp
复制代码
之后脱壳+修复就可以了。
二、逆向
1、逆向提示
首先打开注册界面,输入假码,弹出信息框“注册失败,请与作者联系,获得正确注册码!”
查找字符串,提示没有发现。
既然有信息框,可以使用F12暂停法。
F12暂停-Alt+F9-点击信息框上的确定,到达0042F3E6
- 0042F3D8 . 8D0470 lea eax,dword ptr ds:[eax+esi*2]
- 0042F3DB . 50 push eax ; /Style
- 0042F3DC . 52 push edx ; |Title
- 0042F3DD . 51 push ecx ; |Text
- 0042F3DE . 6A 00 push 0x0 ; |hOwner = NULL
- 0042F3E0 . FF15 B4164F00 call dword ptr ds:[<&user32.MessageBoxA>>; \MessageBoxA
- 0042F3E6 . 5F pop edi ; 0932FA29
- 0042F3E7 . 83F8 03 cmp eax,0x3 ; Switch (cases 2..7)
- 0042F3EA . 5E pop esi
复制代码
很明显,42F3E0就是弹出信息框的位置,向上找,没有发现能跳过调用信息框的跳转。
那么我们继续单步。
过了RETN之后,来到这里- 004582F6 . 894424 10 mov dword ptr ss:[esp+0x10],eax
- 004582FA . 8D5424 08 lea edx,dword ptr ss:[esp+0x8]
- 004582FE . 52 push edx
- 004582FF . FFD3 call ebx
- 00458301 . 8B4424 0C mov eax,dword ptr ss:[esp+0xC]
- 00458305 . 8B5424 10 mov edx,dword ptr ss:[esp+0x10]
- 00458309 . 8B4C24 14 mov ecx,dword ptr ss:[esp+0x14]
- 0045830D . 83C4 18 add esp,0x18
复制代码
[color=rgb(51, 102, 153) !important]复制代码
程序运行到了00458301,说明上面004582FF就是调用注册失败的call。
可能有和我一样的新手不明白,简单解释下。
我们从上面的代码开始看起。
程序首先从004582F6开始,执行到004582FF,遇到了一个CALL。如果我们用OD F7跟进这个CALL,当我们F8步过这个CALL的断尾RETN时,程序会返回到调用它的下一行继续执行,也就是00458301。同样,刚才我提到,程序运行到了00458301,就说明是从004582FF这个CALL出来的。
向上看,没有发现能跳过004582FF的跳转。那么我们继续单步到达这里。
- 004222F3 > \E8 DAEEFDFF call 好名字取.004011D2
- 004222F8 . 85C0 test eax,eax
- 004222FA . 0F84 3F000000 je 好名字取.0042233F ; 这个跳转能够跳过00422332,即跳过注册失败</b></font>
- 00422300 . F9 stc
- 00422301 . 72 01 jb short 好名字取.00422304
- 00422303 B3 db B3
- 00422304 . 68 04000080 push 0x80000004
- 00422309 . 6A 00 push 0x0
- 0042230B . 68 9ED88100 push 好名字取.0081D89E
- 00422310 . 68 01030080 push 0x80000301
- 00422315 . 6A 00 push 0x0
- 00422317 . 68 40000000 push 0x40
- 0042231C . 68 04000080 push 0x80000004
- 00422321 . 6A 00 push 0x0
- 00422323 . 68 A9D88100 push 好名字取.0081D8A9
- 00422328 . 68 03000000 push 0x3
- 0042232D . BB 40F34200 mov ebx,好名字取.0042F340
- <font color="#ff0000"><b>00422332 . E8 599C0000 call 好名字取.0042BF90 ; 调用注册失败</b></font>
- 00422337 . 83C4 28 add esp,0x28
复制代码
看上面的注释,
je 好名字取.0042233F 如果不跳,就调用了注册失败。所以我们改为JMP。
2、逆向功能
重新运行程序,可以发现同样提示未注册,说明有重启验证。字符串搜索“注册”
- 004010A5 C0 db C0
- 004010A6 0F845B00 dd 好名字取.005B840F
- 004010AA 00 db 00
- 004010AB 00 db 00
- 004010AC F9 db F9
- 004010AD 72 db 72 ; CHAR 'r'
- 004010AE 01 db 01
- 004010AF B3 db B3
- 004010B0 . 68 04000080 push 0x80000004
- 004010B5 . 6A 00 push 0x0
- 004010B7 . 68 C9644F00 push 好名字取.004F64C9
- 004010BC . 68 01030080 push 0x80000301
- 004010C1 . 6A 00 push 0x0
- 004010C3 . 68 30000000 push 0x30
- 004010C8 . 68 04000080 push 0x80000004
- 004010CD . 6A 00 push 0x0
- 004010CF . 68 D2644F00 push 好名字取.004F64D2 ; 未注册版本,不可以选择高分名字!
- 004010D4 . 68 03000000 push 0x3
- 004010D9 . BB 40F34200 mov ebx,好名字取.0042F340
- 004010DE . E8 ADAE0200 call 好名字取.0042BF90
- 004010E3 . 83C4 28 add esp,0x28
复制代码
可以看到前面的 db 00。右键-分析-从模块中删除分析
- 00401085 /0F85 7C000000 jnz 好名字取.00401107
- 0040108B |F8 clc
- 0040108C |73 01 jnb short 好名字取.0040108F
- 0040108E |0FE83E psubsb mm7,qword ptr ds:[esi]
- 00401091 |0100 add dword ptr ds:[eax],eax
- 00401093 |0089 45FCF873 add byte ptr ds:[ecx+0x73F8FC45],cl
- 00401099 |0181 8B45FC83 add dword ptr ds:[ecx-0x7C03BA75],eax
- 0040109F |E0 01 loopdne short 好名字取.004010A2
- 004010A1 |83F0 01 xor eax,0x1
- 004010A4 |85C0 test eax,eax
- 004010A6 |0F84 5B000000 je 好名字取.00401107
- 004010AC |F9 stc
- 004010AD |72 01 jb short 好名字取.004010B0
- 004010AF |B3 68 mov bl,0x68
- 004010B1 |04 00 add al,0x0
- 004010B3 |0080 6A0068C9 add byte ptr ds:[eax-0x3697FF96],al
- 004010B9 |64:4F dec edi
- 004010BB |0068 01 add byte ptr ds:[eax+0x1],ch
- 004010BE |0300 add eax,dword ptr ds:[eax]
- 004010C0 |806A 00 68 sub byte ptr ds:[edx],0x68
- 004010C4 |3000 xor byte ptr ds:[eax],al
- 004010C6 |0000 add byte ptr ds:[eax],al
- 004010C8 |68 04000080 push 0x80000004
- 004010CD |6A 00 push 0x0
- 004010CF |68 D2644F00 push 好名字取.004F64D2 ; 未注册版本,不可以选择高分名字!
- 004010D4 |68 03000000 push 0x3
- 004010D9 |BB 40F34200 mov ebx,好名字取.0042F340
- 004010DE |E8 ADAE0200 call 好名字取.0042BF90
- 004010E3 |83C4 28 add esp,0x28
- 004010E6 |F9 stc
- 004010E7 |72 01 jb short 好名字取.004010EA
- 004010E9 |7C 6A jl short 好名字取.00401155
- 004010EB |0068 F3 add byte ptr ds:[eax-0xD],ch
- 004010EE |64:4F dec edi
- 004010F0 |006A FF add byte ptr ds:[edx-0x1],ch
- 004010F3 |6A 09 push 0x9
- 004010F5 |68 C00B0116 push 0x16010BC0
- 004010FA |68 01000152 push 0x52010001
- 004010FF |E8 98AE0200 call 好名字取.0042BF9C
- 00401104 |83C4 18 add esp,0x18
- 00401107 \8BE5 mov esp,ebp
复制代码
把00401085中JE改为JMP以跳过注册失败,继续查找。
- 004128F4 > \833D E8029E00>cmp dword ptr ds:[0x9E02E8],0x0
- 004128FB . 0F84 0A000000 je 好名字取.0041290B
- 00412901 . B8 A25A7D00 mov eax,好名字取.007D5AA2 ; 已经注册版本!感谢您对我们的支持!
- 00412906 . E9 05000000 jmp 好名字取.00412910
- 0041290B > B8 C55A7D00 mov eax,好名字取.007D5AC5 ; 未注册版本!请与作者联系注册事宜!
复制代码
可以看到,程序将9E02E8的值与0进行比较,所以9E02E8是关键常量,右键-查找所有常量-9E02E8
- 参考位于 好名字取:.text 到常量 9E02E8
- 地址 反汇编 注释
- 004053CD cmp dword ptr ds:[0x9E02E8],0x0 ds:[009E02E8]=00000000
- 0040C738 mov dword ptr ds:[0x9E02E8],eax
- 004128F4 cmp dword ptr ds:[0x9E02E8],0x0 (初始 CPU 选择)
- 00422186 dd 好名字取.009E02E8
- 004236C9 mov eax,dword ptr ds:[0x9E02E8] [009E02E8]=00000000
复制代码
0040C738就是给常量赋值的地方,可以从这里入手,也可以到其他位置逐个修改。
还有个别需要修改的地方,比如标题的未注册,都可以通过字符串查找找到。
附上软件下载地址:
http://www.duote.com/soft/30410.html
吾爱汇编论坛原创,转载请注明出处。
|
评分
-
参与人数 20 | 威望 +1 |
HB +49 |
THX +11 |
收起
理由
|
29590
| |
+ 1 |
|
|
24567
| |
+ 2 |
|
|
虚心学习
| |
+ 1 |
|
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
一路走来不容易
| |
|
+ 1 |
|
Soul1999
| |
+ 1 |
|
|
yexing
| |
|
+ 1 |
|
消逝的过去
| |
+ 2 |
|
|
792121621
| |
|
+ 1 |
|
liugu0hai
| |
+ 1 |
+ 1 |
[吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩! |
jaunic
| |
+ 2 |
|
|
hnymsh
| |
+ 1 |
|
|
lies
| |
+ 1 |
|
|
tony2526
| |
+ 1 |
+ 1 |
★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!! |
nn19880115
| |
+ 1 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
东子郭
| |
+ 3 |
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
haliyou001
| |
|
+ 1 |
评分=感恩!简单却充满爱!感谢您的作品! |
ikeeki
| |
+ 2 |
+ 1 |
我很赞同! |
王婆卖瓜
| |
+ 5 |
+ 1 |
积极评分从我做起,感谢! |
bigeorry
| |
+ 5 |
+ 1 |
感谢楼主,我来加个分 |
Shark恒
| + 1 |
+ 20 |
|
你将受到所有人的崇拜!教程非常棒~~ |
查看全部评分
|