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 编辑 ] 呵呵,马兄越来越厉害哈,脱壳牛啊!!! 感谢渔歌子兄弟。
看到网络上对4.26版没有脱壳入门的方法,就献丑一次。:) 有这个工具---Anti-rdtsc,没有用advance import protect,是可以按照以前的方法脱的,
使用advance import protect方式后,以前的方法就不行了,不过2.1的用advance import protect方式保护的也不能用普通的方法脱了,期待高人献身,为我们菜鸟指点脱advance import protect的方法 好文章,谢谢楼主分享!!! 原帖由 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,就不传了。 谢谢楼主分享!!! 原帖由 渔歌子 于 2006-5-9 12:22 发表
呵呵,马兄越来越厉害哈,脱壳牛啊!!!
/:D /:D 不怎么用这个软件,听起来很牛的样子! 好好学习,天天向上
收藏下来等有时间再去学习脱这种猛壳;P 这个可是热壳,收藏学习
页:
[1]
2