machenglin 发表于 2006-5-9 12:11:44

aspr2.3 bulid 04.26脱壳方法初探

aspr2.3 bulid 04.26脱壳方法初探

首先感谢8100303关于aspr2.3 bulid 04.26的教程。

在aspr2.3 bulid 04.26中增加了rtdsc,用以前版本脱壳方法不行了。
在学习教程的过程中,我这样的初学者很难找到切入点,不知道如何下手调试。现把我在开始脱壳的开始部分的笔记整

理出来,请各位高手能指点修改完善。

后面的过程我还不会,正在摸索中。
=========================================================================================================
一、用Anti-rdtsc工具法。

感谢shoooo给我们提供了一个Anti-rdtsc工具,使调试变的容易。

shoooo是这样解释这个工具:
“在0环中修改cr4寄存器中的1位,会使rtdsc指令变成特权指令,这样,当程序碰到rtdsc时就会产生异常
这时,我们可以写od插件,抓到这个异常,并给eax,edx可控制的值, 让程序继续跑。”。

运行Anti-rdtsc工具,按“SET RDTSC CPLO”。

忽略除“内存异常”和下面的“同时忽略以下指定的异常或者异常范围”,其他选项全选。

00401000 >68 01E04000      push notpad42.0040E001               ; OD入口
00401005    E8 01000000      call notpad42.0040100B
0040100A    C3               retn
0040100B    C3               retn

Shirt+F9,三次异常。

009CC91A    0000             add byte ptr ds:,al
009CC91C    E8 33C05A59      call 59F78954
009CC921    59               pop ecx
009CC922    64:8910          mov dword ptr fs:,edx
009CC925    EB 2B            jmp short 009CC952

Alt+M,到内存窗口,在CODE段下F2中断。Shirt+F9,就来到这里了。

009CB2FB    8945 00          mov dword ptr ss:,eax
009CB2FE    6A 0A            push 0A
009CB300    E8 B3A9FDFF      call 009A5CB8
009CB305    8BC8             mov ecx,eax
009CB307    038B E4000000    add ecx,dword ptr ds:
009CB30D    8BD6             mov edx,esi
009CB30F    8BC3             mov eax,ebx
009CB311    E8 AAE6FFFF      call 009C99C0

F8步进到来到这里。

009CB19B    33C0             xor eax,eax
009CB19D    8A47 09          mov al,byte ptr ds:
009CB1A0    8D0440         lea eax,dword ptr ds:
009CB1A3    8B5483 68      mov edx,dword ptr ds:
009CB1A7    8BC6             mov eax,esi
009CB1A9    FFD2             call edx
009CB1AB    807B 20 00       cmp byte ptr ds:,0
009CB1AF    0F85 3D010000    jnz 009CB2F2
009CB1B5    3C 01            cmp al,1
009CB1B7    0F85 35010000    jnz 009CB2F2
009CB1BD    EB 01            jmp short 009CB1C0

Ctrl+B,查找字符串:33C08A078D04408B6C83688BC6

009CB171    8D7B 40          lea edi,dword ptr ds:
009CB174    833C24 00      cmp dword ptr ss:,0
009CB178    0F86 AB010000    jbe 009CB329                         ; F2,在这里下断,F9。
009CB17E    33C0             xor eax,eax                        ; 找到这里,向下看。
009CB180    8A07             mov al,byte ptr ds:
009CB182    8D0440         lea eax,dword ptr ds:
009CB185    8B6C83 68      mov ebp,dword ptr ds:
009CB189    8BC6             mov eax,esi
009CB18B    FFD5             call ebp
009CB18D    8BE8             mov ebp,eax
009CB18F    036B 24          add ebp,dword ptr ds:
009CB192    03AB E0000000    add ebp,dword ptr ds:
009CB198    EB 01            jmp short 009CB19B
009CB19A    E8 33C08A47      call 482771D2
009CB19F    098D 04408B54    or dword ptr ss:,ecx
009CB1A5    8368 8B C6       sub dword ptr ds:,-3A
009CB1A9    FFD2             call edx                           ; call edx-->jmp xxxxxxxx
009CB1AB    807B 20 00       cmp byte ptr ds:,0
009CB1AF    0F85 3D010000    jnz 009CB2F2

到009CB178中断后,F4直接到009CB1A9,ESP中是函数数量。

用HideOD申请内存。得到01430000。

修改009CB1A9,call edx-->jmp 01430000。

下面是8100303的PATCH代码,感谢他的教程。

F8步进到申请内存01430000,键入以下代码。
=================================================================
01430000    FFD2             call edx
01430002    60               pushad
01430003    8B1D 30004301    mov ebx,dword ptr ds:
01430009    C1E0 1F          shl eax,1F
0143000C    03C5             add eax,ebp
0143000E    8903             mov dword ptr ds:,eax
01430010    83C3 04          add ebx,4
01430013    891D 30004301    mov dword ptr ds:,ebx
01430019    61               popad
0143001A    807B 20 00       cmp byte ptr ds:,0
0143001E- E9 8CB159FF      jmp 009CB1AF
01430023    0000             add byte ptr ds:,al
01430025    0000             add byte ptr ds:,al
01430027    0000             add byte ptr ds:,al
01430029    0000             add byte ptr ds:,al
0143002B    0000             add byte ptr ds:,al
0143002D    0000             add byte ptr ds:,al
0143002F    0040 00          add byte ptr ds:,al
01430032    43               inc ebx
01430033    0100             add dword ptr ds:,eax
01430035    0000             add byte ptr ds:,al
===================================================================
二进制:
FFD2608B1D30004301C1E01F03C5890383C304891D3000430161807B2000E98CB159FF00000000000000000000000000
400043010000

F9运行。

得到数据:
0143003C00000000
0143004000401505notpad42.00401505
014300440040151Dnotpad42.0040151D
0143004800401E79notpad42.00401E79
0143004C00401EE5notpad42.00401EE5
......省略中间部分
0143012C00404FB6notpad42.00404FB6
0143013000404FC2notpad42.00404FC2
0143013400404FC8notpad42.00404FC8
0143013800404FCEnotpad42.00404FCE
0143013C00000000

这时候程序跑飞了。复制这些数据到文件保存。
=========================================================================================================
二、INT3断点法(无Anti-rdtsc工具)。

00401000 >68 01E04000      push notpad42.0040E001                           ; OD入口。
00401005    E8 01000000      call notpad42.0040100B
0040100A    C3               retn
0040100B    C3               retn

Alt+O,忽略除INT3外的全部选项,F9运行一次。

009CB9AF    90               nop                                                ; 断在这里。
009CB9B0    EB 01            jmp short 009CB9B3
009CB9B2    6966 81 FE474674 imul esp,dword ptr ds:,744647F>
009CB9B9    05 31C040EB      add eax,EB40C031
009CB9BE    0231             add dh,byte ptr ds:
009CB9C0    C031 DB          sal byte ptr ds:,0DB
009CB9C3    64:8F03          pop dword ptr fs:
009CB9C6    83C4 04          add esp,4
009CB9C9    EB 01            jmp short 009CB9CC
009CB9CB    E8 5F5E5BC3      call C3F8182F

搜索-->文本字符串-->在ASCII“170”双击,来到反汇编窗口,向下滚动,找到第一个jbe,下硬断点。

009CD7EF    8B45 F0          mov eax,dword ptr ss:
009CD7F2    8B55 F4          mov edx,dword ptr ss:
009CD7F5    3B55 FC          cmp edx,dword ptr ss:
009CD7F8    75 0B            jnz short 009CD805
009CD7FA    3B45 F8          cmp eax,dword ptr ss:
009CD7FD    0F86 BB000000    jbe 009CD8BE                              ; ★jbe 009CD8BE-->jmp 009CD8BE★
009CD803    EB 06            jmp short 009CD80B
009CD805    0F8E B3000000    jle 009CD8BE
009CD80B    833D E0F89C00 00 cmp dword ptr ds:,0
009CD812    75 12            jnz short 009CD826

Ctrl+F2,重起OD,忽略全部异常,F9,中断在009CD7FD,修改jbe 009CD8BE-->jmp 009CD8BE。

Ctrl+B,查找字符串:33C08A078D04408B6C83688BC6

009CB171    8D7B 40          lea edi,dword ptr ds:
009CB174    833C24 00      cmp dword ptr ss:,0
009CB178    0F86 AB010000    jbe 009CB329                         ; F2,在这里下断,F9。
009CB17E    33C0             xor eax,eax                        ; 找到这里,向下看。
009CB180    8A07             mov al,byte ptr ds:
009CB182    8D0440         lea eax,dword ptr ds:
009CB185    8B6C83 68      mov ebp,dword ptr ds:
009CB189    8BC6             mov eax,esi
009CB18B    FFD5             call ebp
009CB18D    8BE8             mov ebp,eax
009CB18F    036B 24          add ebp,dword ptr ds:
009CB192    03AB E0000000    add ebp,dword ptr ds:
009CB198    EB 01            jmp short 009CB19B
009CB19A    E8 33C08A47      call 482771D2
009CB19F    098D 04408B54    or dword ptr ss:,ecx
009CB1A5    8368 8B C6       sub dword ptr ds:,-3A
009CB1A9    FFD2             call edx                           ; call edx-->jmp xxxxxxxx
009CB1AB    807B 20 00       cmp byte ptr ds:,0
009CB1AF    0F85 3D010000    jnz 009CB2F2


到009CB178中断后,F4直接到009CB1A9。

用HideOD申请内存。得到01430000。

修改009CB1A9,call edx-->jmp 01430000。

F8步进到申请内存01430000,键入以下代码。
=================================================================
01430000    FFD2             call edx
01430002    60               pushad
01430003    8B1D 30004301    mov ebx,dword ptr ds:
01430009    C1E0 1F          shl eax,1F
0143000C    03C5             add eax,ebp
0143000E    8903             mov dword ptr ds:,eax
01430010    83C3 04          add ebx,4
01430013    891D 30004301    mov dword ptr ds:,ebx
01430019    61               popad
0143001A    807B 20 00       cmp byte ptr ds:,0
0143001E- E9 8CB159FF      jmp 009CB1AF
01430023    0000             add byte ptr ds:,al
01430025    0000             add byte ptr ds:,al
01430027    0000             add byte ptr ds:,al
01430029    0000             add byte ptr ds:,al
0143002B    0000             add byte ptr ds:,al
0143002D    0000             add byte ptr ds:,al
0143002F    0040 00          add byte ptr ds:,al
01430032    43               inc ebx
01430033    0100             add dword ptr ds:,eax
01430035    0000             add byte ptr ds:,al
===================================================================
二进制:
FFD2608B1D30004301C1E01F03C5890383C304891D3000430161807B2000E98CB159FF00000000000000000000000000
400043010000

F9运行。

得到数据:
0143003C00000000
0143004000401505notpad42.00401505
014300440040151Dnotpad42.0040151D
0143004800401E79notpad42.00401E79
0143004C00401EE5notpad42.00401EE5
......省略中间部分
0143012C00404FB6notpad42.00404FB6
0143013000404FC2notpad42.00404FC2
0143013400404FC8notpad42.00404FC8
0143013800404FCEnotpad42.00404FCE
0143013C00000000

这时候程序跑飞了。复制这些数据到文件保存。
=========================================================================================================
对照上面的二中方法,得到同一个结果。

后面的继续调试可以参照8100303大侠的方法进行,本人也在继续摸索中,希望更多的高手能提供相应的教程和PATCH代

码,造福菜鸟们。

[ 本帖最后由 machenglin 于 2006-5-9 12:14 编辑 ]

渔歌子 发表于 2006-5-9 12:22:10

呵呵,马兄越来越厉害哈,脱壳牛啊!!!

machenglin 发表于 2006-5-9 12:24:48

感谢渔歌子兄弟。
看到网络上对4.26版没有脱壳入门的方法,就献丑一次。:)

windycandy 发表于 2006-5-9 13:23:14

有这个工具---Anti-rdtsc,没有用advance import protect,是可以按照以前的方法脱的,
使用advance import protect方式后,以前的方法就不行了,不过2.1的用advance import protect方式保护的也不能用普通的方法脱了,期待高人献身,为我们菜鸟指点脱advance import protect的方法

hnmeec 发表于 2006-5-9 15:25:13

好文章,谢谢楼主分享!!!

machenglin 发表于 2006-5-9 16:22:58

原帖由 windycandy 于 2006-5-9 13:23 发表
有这个工具---Anti-rdtsc,没有用advance import protect,是可以按照以前的方法脱的,
使用advance import protect方式后,以前的方法就不行了,不过2.1的用advance import protect方式保护的也不能用普通的方法 ...
advance import protect可以参考KANXUE的文章,补丁全部能用在4.26版。
该脱文只是对开始部分提供个思路,后面再写就是全抄KANXUE的了,所以就没继续下去。
加壳的记事本是全部保护方式,因论坛附件限制在300K,就不传了。

lq 发表于 2006-5-9 18:48:54

谢谢楼主分享!!!

野猫III 发表于 2006-5-9 20:41:00

原帖由 渔歌子 于 2006-5-9 12:22 发表
呵呵,马兄越来越厉害哈,脱壳牛啊!!!

/:D /:D 不怎么用这个软件,听起来很牛的样子!

风球 发表于 2006-5-10 09:57:50

好好学习,天天向上

收藏下来等有时间再去学习脱这种猛壳;P

canmd 发表于 2006-5-10 17:23:15

这个可是热壳,收藏学习
页: [1] 2
查看完整版本: aspr2.3 bulid 04.26脱壳方法初探