小生我怕怕 发表于 2008-8-28 01:12

作业:初级保护壳之CryptO 0.93

作业:初级保护壳之CryptO 0.93
首先说明下,我只是给新手朋友开个好头,脱壳方法顺稀万变,大家自己把握,以下我用内存法介绍下脱壳,以变后面的新手不会被变形了的iat指针打倒

作业:初级保护壳之CryptO 0.93
00413000 >5Bpop ebx //OD载入
0041300181E3 00FFFFFF and ebx,FFFFFF00 //ait+m打开内存镜象
0041300766:813B 4D5Acmp word ptr ds:,5A4D
0041300C75 33 jnz short Crypto_0.00413041
0041300E8BF3mov esi,ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
首先在00405000处下F2设置访问中断,接着shift+f9运行
存映射,项目 20
地址=00405000
大小=00001000 (4096.)
物主=Crypto_0 00400000
区段=.data
包含=data
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
00413232300431xor byte ptr ds:,al //程序停在了这里
0041323581EA 1F79E4BF sub edx,BFE4791F //在一次ait+m打开内存镜象
0041323BC1C0 04 rol eax,4
0041323EF7D2not edx
0041324003C2add eax,edx
0041324203D0add edx,eax
00413244^ EB E9 jmp short Crypto_0.0041322F
00413246C3retn
━━━━━━━━━━━━━━━━━━━━━━━━━━
在00401000处下F2设置访问中断,接着shift+f9运行
内存映射,项目 19
地址=00401000
大小=00004000 (16384.)
物主=Crypto_0 00400000
区段=.text
包含=code
类型=Imag 01001002
访问=R
初始访问=RWE
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //程序直接停在了OEP
004010CD8BECmov ebp,esp//dump程序
004010CF83EC 44 sub esp,44
004010D256push esi
004010D3FF15 E4634000 call dword ptr ds: ; Crypto_0.004136AA
004010D98BF0mov esi,eax
004010DB8A00mov al,byte ptr ds:
004010DD3C 22 cmp al,22
004010DF75 1B jnz short Crypto_0.004010FC
━━━━━━━━━━━━━━━━━━━━━━━━━━
首先我们运行LordPE把程序dump出来,打开我们的修复工具,此时发现居然全部无效,
见图1:
然后我们在次打开我们的目标程序,然后在次运行我们的修复工具,看过天草教程的朋友都知道这样是为了不让 ImportREC进入假死状态
此时我们的ImportREC里多了一个进程,我们选择第一个进程,然后先执行一次等级跟踪1,会出现还是无效,我们在执行等级跟中3,
执行完登记跟踪3后的结果见图2

到此我们脱壳完毕

mycsy 发表于 2008-8-28 01:39

强强

这娃小时候就很牛……


顶起…… 学习下……





-------------

只有学习的分了

目前成功脱过就有 UPX ASPACK 掘北 等常见压缩壳……

zapline 发表于 2008-8-28 03:09

学了两次内存断点法
学了IAT修复

赚了不止 5C币

小生我怕怕 发表于 2008-8-28 04:33

既然没有人玩这个任务,我就来说下单步的跟踪,记住不要在int和空代码上打断向上跳转,程序回飞的
00413000 >5Bpop ebx//OD载入在这里
0041300181E3 00FFFFFF and ebx,FFFFFF00
0041300766:813B 4D5Acmp word ptr ds:,5A4D
0041300C75 33 jnz short Crypto_0.00413041 //这个跳和下面的跳是死循环
0041300E8BF3mov esi,ebx
004130100373 3C add esi,dword ptr ds:
00413013813E 50450000 cmp dword ptr ds:,4550
0041301975 26 jnz short Crypto_0.00413041 //我们在这里F2下断,接着shift+f9
0041301B0FB746 18 movzx eax,word ptr ds: //接着一路F8向下走
━━━━━━━━━━━━━━━━━━━━━━━━━━
00413136FFE0jmp eax//F8走到这里时要放慢脚步
0041313868 1E62F1C0 push C0F1621E
0041313D68 298FBF14 push 14BF8F29
0041314253push ebx
00413143E8 19000000 call Crypto_0.00413161//这里要F7进入
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041316050push eax //通过F7我们来到这里
0041316155push ebp
004131628BECmov ebp,esp
0041316483C4 F8 add esp,-8
0041316753push ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041319AE8 4CFFFFFF call Crypto_0.004130EB//到达这个CALL我们又F7进入
0041319F3B45 0C cmp eax,dword ptr ss:
004131A275 1F jnz short Crypto_0.004131C3
004131A43B55 10 cmp edx,dword ptr ss:
004131A775 1A jnz short Crypto_0.004131C3
004131A933D2xor edx,edx
━━━━━━━━━━━━━━━━━━━━━━━━━━
004130EB55push ebp//通过F7我们来到这里
004130EC8BECmov ebp,esp //接着一路F8向下走
004130EE56push esi
004130EF51push ecx
━━━━━━━━━━━━━━━━━━━━━━━━━━
004131D90FB74E 06 movzx ecx,word ptr ds:
004131DD8BFEmov edi,esi
004131DF81C7 F8000000 add edi,0F8//F8到这里时要放慢脚步
004131E560pushad
004131E6E8 01000000 call Crypto_0.004131EC//到达这个CALL我们又F7进入
004131EBE8 8104245C call 5C653671
━━━━━━━━━━━━━━━━━━━━━━━━━━
004131EC810424 5C000000 add dword ptr ss:,5C//通过F7我们来到这里
004131F3813F 2E656461 cmp dword ptr ds:,6164652E//继续我们的F8漫长之旅
004131F974 4B je short Crypto_0.00413246
004131FB813F 2E727372 cmp dword ptr ds:,7273722E
0041320174 43 je short Crypto_0.00413246
00413203813F 72737263 cmp dword ptr ds:,63727372
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041324003C2add eax,edx
0041324203D0add edx,eax
00413244^ EB E9 jmp short Crypto_0.0041322F
00413246C3retn //我们在这里retn句打断向上的跳转
0041324761popad //继续我们的F8漫长之旅
0041324883C7 28 add edi,28
━━━━━━━━━━━━━━━━━━━━━━━━━━
0041325C8378 08 00cmp dword ptr ds:,0//F8到这里时要放慢脚步
0041326074 09 je short Crypto_0.0041326B
004132628B40 08 mov eax,dword ptr ds:
00413265C700 00000000 mov dword ptr ds:,0
0041326BE8 01000000 call Crypto_0.00413271//到达这个CALL我们又F7进入
00413270E8 81042414 call 146536F6
004132750100add dword ptr ds:,eax
0041327700BE 00204100 add byte ptr ds:,bh
━━━━━━━━━━━━━━━━━━━━━━━━━━
00413271810424 14010000 add dword ptr ss:,114//通过F7我们来到这里
00413278BE 00204100 mov esi,Crypto_0.00412000 //继续我们的F8漫长之旅
0041327D53push ebx
0041327E56push esi
0041327FFF76 0C push dword ptr ds:
00413282011C24add dword ptr ss:,ebx
00413285FF5424 14 call dword ptr ss:
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132BD52push edx//F8到这里时要放慢脚步
004132BEA9 00000080 test eax,80000000
004132C375 61 jnz short Crypto_0.00413326
004132C5E8 01000000 call Crypto_0.004132CB//到达这个CALL我们又F7进入
004132CAB5 81 mov ch,81
004132CC04 24 add al,24
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132D00000add byte ptr ds:,al //通过F7我们来到这里
004132D28D7C03 02 lea edi,dword ptr ds: //继续我们的F8漫长之旅
004132D6B8 F7F1FC5F mov eax,5FFCF1F7
004132DBBA 60508F94 mov edx,948F5060
004132E02BC9sub ecx,ecx
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132F803D0add edx,eax //我们到达这里时注意啦
004132FA41inc ecx
004132FB^ EB E5 jmp short Crypto_0.004132E2
004132FDC3retn//这个retn句又是一个死循环,不是因为我看见下面就是OEP才这样说,大家可以跟下就知道啦
004132FE83C4 0C add esp,0C //我们在这里F4打断,单步F8一下,如果我们一直继续跟下去就进系统里去啦
00413301- E9 C6DDFEFF jmp Crypto_0.004010CC//这里飞向了我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //光明之颠OEP
004010CD8BECmov ebp,esp
004010CF83EC 44 sub esp,44
004010D256push esi

小生我怕怕 发表于 2008-8-28 04:49

下面来把我单步跟踪时得到的一个断点给大家在做个演示,在我们日常单步跟某个程序时,不难发现他时常调用某些函数,所以我们就可以借助这些函数来达到一个快速到达OEP的方法,但是这次我只跟到一个比较有用的断点:bp LoadLibraryA
好啦废话不多说
━━━━━━━━━━━━━━━━━━━━━━━━━━
00413000 >5Bpop ebx //OD载入
0041300181E3 00FFFFFF and ebx,FFFFFF00 //在命令提示行下bp LoadLibraryA
0041300766:813B 4D5Acmp word ptr ds:,5A4D //接着shift+f9运行5次后ait+f9返回程序代码
0041300C75 33 jnz short Crypto_0.00413041
0041300E8BF3mov esi,ebx
004130100373 3C add esi,dword ptr ds:
00413013813E 50450000 cmp dword ptr ds:,4550
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第一次shift+f9时我们停在了这里
7C801D7955push ebp
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:,0
7C801D8053push ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第二次shift+f9时我们停在了这里
7C801D7955push ebp //大家注意点不难发现此时我们的堆栈窗口和第一次是皆然不同的
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:,0
7C801D8053push ebx
7C801D8156push esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第三次shift+f9时我们停在了这里
7C801D7955push ebp
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:,0
7C801D8053push ebx
7C801D8156push esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第四次shift+f9时我们停在了这里
7C801D7955push ebp
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:,0
━━━━━━━━━━━━━━━━━━━━━━━━━━
7C801D77 >8BFFmov edi,edi//第四次shift+f9时我们停在了这里
7C801D7955push ebp //此时我们ait+f9返回到程序代码
7C801D7A8BECmov ebp,esp
7C801D7C837D 08 00cmp dword ptr ss:,0
7C801D8053push ebx
7C801D8156push esi
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132895Epop esi//通过ait+f9此时我们停在了这里
0041328A5Bpop ebx//开始我们漫长的F8之旅
0041328B85C0test eax,eax
0041328D74 6F je short Crypto_0.004132FE
0041328F8BE8mov ebp,eax
004132918BD3mov edx,ebx
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132BEA9 00000080 test eax,80000000//F8到这里后放慢脚步
004132C375 61 jnz short Crypto_0.00413326
004132C5E8 01000000 call Crypto_0.004132CB //到达这个CALL我们又F7进入
004132CAB5 81 mov ch,81
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132CB810424 3C000000 add dword ptr ss:,3C//通过F7我们来到这里
004132D28D7C03 02 lea edi,dword ptr ds://开始我们漫长的F8之旅
004132D6B8 F7F1FC5F mov eax,5FFCF1F7
004132DBBA 60508F94 mov edx,948F5060
━━━━━━━━━━━━━━━━━━━━━━━━━━
004132F803D0add edx,eax //我们到达这里时注意啦
004132FA41inc ecx
004132FB^ EB E5 jmp short Crypto_0.004132E2
004132FDC3retn//这个retn句又是一个死循环,不是因为我看见下面就是OEP才这样说,大家可以跟下就知道啦
004132FE83C4 0C add esp,0C //我们在这里F4打断,单步F8一下,如果我们一直继续跟下去就进系统里去啦
00413301- E9 C6DDFEFF jmp Crypto_0.004010CC//这里飞向了我们的OEP
━━━━━━━━━━━━━━━━━━━━━━━━━━
004010CC55push ebp //光明之颠OEP
004010CD8BECmov ebp,esp
004010CF83EC 44 sub esp,44
004010D256push esi

发射 发表于 2008-8-28 12:08

挖..好复杂...不懂..还是支持!

shsww 发表于 2008-8-28 16:59

在修复iat时,如果都显示无效时,先执行一次等级跟踪1,会出现还是无效,我们在执行等级跟中3,方法不错,学习了!

hnsqhuohu 发表于 2008-8-28 22:57

看了,看不懂的说,支持一个!

mayl8822 发表于 2008-9-24 11:59

有点复杂哦
页: [1]
查看完整版本: 作业:初级保护壳之CryptO 0.93