剧情介绍:
大家好!
我是 无聊.有跟大家见面.呵呵
我看到论坛里面有 说关于 AFT引擎卡的原因有人说是壳的问题.所以呢.
我今天 做了个动画来教大家怎么去脱 A.F.T引擎的壳.
希望大家以后有空来 本论坛[http://Www.SF7758.Com.] 捧捧 场.. 有空大家 在这里交流交流.
开服务器的朋友. 有空 在主页发布一下你们的私服.捧捧 场 呵呵..
说来说去 我也是 为了我的站 有更多的人来捧场...那样交流起来就更热闹了。..
希望大家 以后能多来 捧捧场... 谢谢了
也希望 那位大哥-大姐谁开的也有交流的论坛 或者 私服发布网的话 能跟 小弟 做个连接 提高点人气...
谢谢 谢谢了..
哎 有点罗嗦了。..
在这里我就不多说了.下面就看动画吧....
呵呵 提前打好的。 省的有错字出现。 哈哈。。
请大家在 转帖的时候 不要修改 版权就有了呵呵 谢谢 大家。。
首先:
一、
使用工具:OllyDBG,LordPE,ImportREC v1.6F,PEiD v0.94 [大家可以到网上搜索一下到处都有的。呵呵]
1 侦壳:用PEiD查壳 Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
具体 壳 是真是 假 我也不多说了 大家 看 我操作就可以了 ...
这个程序是单进程的,我们可以省略分离父子进程的过程。
二 、脱壳
Ollydbg 载入 开头是这个
0067D243 >/$55pushebp
0067D244|.8BECmovebp, esp
0067D246|.6A FFpush-1
0067D248|.68 406F6A00push006A6F40
0067D24D|.68 80CF6700push0067CF80;SE 处理程序安装
然后我们下断点HE GetModuleHandleA
按F9运行中断后,看堆栈:
0012FF380067D30B/CALL 到 GetModuleHandleA 来自 A_F_T_FR.0067D305
0012FF3C00000000\pModule = NULL
0012F24C77A03F02/CALL 到 GetModuleHandleA 来自 OLEAUT32.77A03EFC
0012F250779A0630\pModule = "kernel32.dll"
0012F25477A04081返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012F24077A072DB/CALL 到 GetModuleHandleA 来自 OLEAUT32.77A072D5
0012F244779A0994\pModule = "KERNEL32"
0012F24877A0412A返回到 OLEAUT32.77A0412A 来自 OLEAUT32.77A072D0
0012F24C77A0620B返回到 OLEAUT32.77A0620B
0012F25077A03FAA返回到 OLEAUT32.77A03FAA 来自 OLEAUT32.77A06200
0012F25477A04081返回到 OLEAUT32.77A04081 来自 OLEAUT32.77A03EC0
0012F178779A83DB/CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012F17C77A1ADA8\pModule = "KERNEL32.DLL"
0012F180779A7A32返回到 OLEAUT32.779A7A32 来自 OLEAUT32.779A83D0
0012F178779A83DB/CALL 到 GetModuleHandleA 来自 OLEAUT32.779A83D5
0012F17C77A1ADA8\pModule = "KERNEL32.DLL"
0012F180779C0222返回到 OLEAUT32.779C0222 来自 OLEAUT32.779A83D0
0012F18477A1F908OLEAUT32.77A1F908
0012F1C478001E96/CALL 到 GetModuleHandleA 来自 msvcrt.78001E90
0012F1C8780322D4\pModule = "KERNEL32"
0012F1CC78001E46返回到 msvcrt.78001E46 来自 msvcrt.78001E8B
0012F1D078001E1A返回到 msvcrt.78001E1A
0012F1D4780010EC返回到 msvcrt.780010EC 来自 msvcrt.78001E0F
0012F73C00667EF3/CALL 到 GetModuleHandleA 来自 A_F_T_FR.00667EED
0012F74000000000\pModule = NULL
001298DC00DD32BD/CALL 到 GetModuleHandleA 来自 00DD32B7
001298E000DE2C1C\pModule = "kernel32.dll"
001298E400DE3E98ASCII "VirtualAlloc"
001298DC00DD32DA/CALL 到 GetModuleHandleA 来自 00DD32D4
001298E000DE2C1C\pModule = "kernel32.dll"
001298E400DE3E8CASCII "VirtualFree"
0012967C00DC563C/CALL 到 GetModuleHandleA 来自 00DC5636
00129680001297B8\pModule = "kernel32.dll"; ★注意!在这里清除硬件断点后Alt+F9返回程序
00DC563C8B0D 14B0DE00movecx, [DEB014]; 然后我们返回到这里
00DC564289040Emov[esi+ecx], eax
00DC5645A1 14B0DE00moveax, [DEB014]
00DC564A393C06cmp[esi+eax], edi
00DC564D75 16jnzshort 00DC5665
00DC564F8D85 DCFEFFFFleaeax, [ebp-124]
00DC565550pusheax
00DC5656FF15 90D0DD00call[DDD090]; KERNEL32.LoadLibraryA
00DC565C8B0D 14B0DE00movecx, [DEB014]
00DC566289040Emov[esi+ecx], eax
00DC5665A1 14B0DE00moveax, [DEB014]
00DC566A393C06cmp[esi+eax], edi
00DC566D0F84 2F010000je00DC57A2; 改成为 jmp00DC57A2 修改这是为了避开IAT加密
00DC567333C9xorecx, ecx
00DC56758B03moveax, [ebx]
00DC56773938cmp[eax], edi
然后我们继续下断点 bp GetCurrentThreadId
按F9运行中断后,看堆栈:
0012923C66001E3A/CALL 到 GetCurrentThreadId 来自 66001E34
0012921C66003505/CALL 到 GetCurrentThreadId 来自 660034FF
0012F72000DC59D3/CALL 到 GetCurrentThreadId 来自 00DC59CD; ★注意!在这里Alt+F9返回程序
这里说下我判断返回的经验,我的经验是 00DC59CD 跟上面跨段很大。前面都是6开头的,而这个是00D开始的..
这里如果说的不对就请大家多多包含。
00DC59D350pusheax; 返回到这里。然后我们F8单步向下下走
00DC59D4FF75 FCpushdword ptr [ebp-4]
00DC59D7E8 05000000call00DC59E1
00DC59DC83C4 0Caddesp, 0C
00DC59DFC9leave
00DC59E0C3retn
00DC59E1E8 82FFFFFFcall00DC5968
00DC59E66A 14push14
00DC59E8E8 B56C0100call00DDC6A2; jmp 到 msvcrt.operator new[]
00DC59ED85C0testeax, eax
00DC59EF59popecx
00DD89A133DBxorebx, ebx; 返回到这里。继续F8向下走
00DD89A353pushebx
00DD89A4E8 B80CFFFFcall00DC9661
00DD89A959popecx
00DD89AABE 006ADE00movesi, 0DE6A00
00DD89AF8BCEmovecx, esi
00DD89B1E8 E0FEFDFFcall00DB8896
00DD89B684C0testal, al
00DD89B875 09jnzshort 00DD89C3
00DD89BA6A 01push1
00DD89BC8BCEmovecx, esi
00DD89BEE8 664BFEFFcall00DBD529
00DD89C3C705 E030DE00 A>movdword ptr [DE30E0], 0DE3FAC
00DD89CDB9 F82DDF00movecx, 0DF2DF8
00DD89D2E8 B73C0000call00DDC68E
00DD89D753pushebx
00DD89D8E8 B13C0000call00DDC68E
00DD89DD59popecx
00DD89DE33D2xoredx, edx
00DD89E08955 DCmov[ebp-24], edx
00DD89E3895D FCmov[ebp-4], ebx
00DD89E6A0 2470DE00moval, [DE7024]
00DD89EB8845 C8mov[ebp-38], al
00DD89EE84C0testal, al
00DD89F075 4Djnzshort 00DD8A3F
00DD89F2A1 4C70DE00moveax, [DE704C]
00DD89F78B88 88000000movecx, [eax+88]
00DD89FD894D C4mov[ebp-3C], ecx
00DD8A00894D D0mov[ebp-30], ecx
00DD8A038B0D 6470DE00movecx, [DE7064]; A_F_T_FR.00400000
00DD8A09894D C0mov[ebp-40], ecx
00DD8A0C8B70 6Cmovesi, [eax+6C]
00DD8A0F3370 60xoresi, [eax+60]
00DD8A123370 54xoresi, [eax+54]
00DD8A1503F1addesi, ecx
00DD8A178975 D4mov[ebp-2C], esi
00DD8A1A8B98 90000000movebx, [eax+90]
00DD8A203358 7Cxorebx, [eax+7C]
00DD8A233358 44xorebx, [eax+44]
00DD8A26895D A8mov[ebp-58], ebx
00DD8A298D4D D0leaecx, [ebp-30]
00DD8A2CE8 CF85FDFFcall00DB1000
00DD8A3133D2xoredx, edx
00DD8A33F7F3divebx
00DD8A3503D6addedx, esi
00DD8A378955 CCmov[ebp-34], edx
00DD8A3A8B12movedx, [edx]
00DD8A3C8955 DCmov[ebp-24], edx
00DD8A3F834D FC FFordword ptr [ebp-4], FFFFFFFF
00DD8A43EB 11jmpshort 00DD8A56
00DD8A456A 01push1
00DD8A4758popeax
00DD8A48C3retn
00DD8A498B65 E8movesp, [ebp-18]
00DD8A4C834D FC FFordword ptr [ebp-4], FFFFFFFF
00DD8A508B7D 08movedi, [ebp+8]
00DD8A538B55 DCmovedx, [ebp-24]
00DD8A56A1 4C70DE00moveax, [DE704C]
00DD8A5B3190 88000000xor[eax+88], edx
00DD8A61A1 4C70DE00moveax, [DE704C]
00DD8A663190 88000000xor[eax+88], edx
00DD8A6CA1 4C70DE00moveax, [DE704C]
00DD8A718B88 90000000movecx, [eax+90]
00DD8A773348 2Cxorecx, [eax+2C]
00DD8A7A3348 18xorecx, [eax+18]
00DD8A7D030D 6470DE00addecx, [DE7064]; A_F_T_FR.00400000
00DD8A838B17movedx, [edi]
00DD8A8585D2testedx, edx
00DD8A8775 1Bjnzshort 00DD8AA4
00DD8A89FF77 18pushdword ptr [edi+18]
00DD8A8CFF77 14pushdword ptr [edi+14]
00DD8A8FFF77 10pushdword ptr [edi+10]
00DD8A928B90 90000000movedx, [eax+90]
00DD8A983350 40xoredx, [eax+40]
00DD8A9B3350 04xoredx, [eax+4]
00DD8A9E2BCAsubecx, edx
00DD8AA0FFD1callecx注意到这里; 真正的OEP到了,我们F7追进去..
0060876055pushebp; 追进来后这就是入口了。
006087618BECmovebp, esp
0060876383C4 F0addesp, -10
00608766B8 C8816000moveax, 006081C8
0060876BE8 74E5DFFFcall00406CE4
0060877074 03jeshort 00608775
0060877275 01jnzshort 00608775
00608774E8 8D054080call80A08D06
0060877960pushad
0060877A00FFaddbh, bh
0060877CD07404 75salbyte ptr [esp+eax+75], 1
0060878002F4adddh, ah
00608782FFE8jmpfar eax; 非法使用寄存器
006087840C BForal, 0BF
00608786DFFFfistpedi; 非法使用寄存器
006087880000add[eax], al
现在可以用 LordPE DUMP了。完整转存后, 我们运行脱壳后的 看看无法运行。 所以我们要修复
所以我们要 修复IAT..用 ImportRECOEP处填208760这个地址就是自动搜索IAT 获取输入表
显示无效函数
当前输入函数信息:
0 (十进制:0)
1F5 (十进制:501) 输入函数增加: +1F5
(11 (十进制:17)无效指针(s)增加: +11
这里有无效指针,全部CUT掉。修复抓取文件
修复 好了。 这次在看看能不能运行OK脱壳 完成。。。 用PE 在查查壳
Borland Delphi 6.0 - 7.0
正明没有壳 了 脱壳成功。。 呵呵。。 然后大家就随便改吧 呵呵 。。。。
谢谢。。 希望大家以后有空多多来本站 捧场。。 88
祝 大家 私服 生意 财源滚滚。。。。