标题:morphine程序加壳的简单脱壳方法
链接:http://www.unpack.cn/viewthread.php?tid=16442
贴者:8100303
日期:2007-8-20 18:58
morphine程序加壳的简单脱壳方法
很老套的东西了,呵呵呵。
以2.7版本加壳xp记事本为例。
载入后停在这里:
00401711 > /E2 19 loopd short 0040172C
00401713 |E3 17 jecxz short 0040172C
00401715 |CF iretd
00401716 |8D53 45 lea edx, dword ptr [ebx+45]
00401719 |A1 EA268678 mov eax, dword ptr [788626EA]
0040171E ^|E0 A9 loopdne short 004016C9
00401720 |2A65 57 sub ah, byte ptr [ebp+57]
00401723 |05 CFC71BC5 add eax, C51BC7CF
00401728 |A0 08FB9841 mov al, byte ptr [4198FB08]
0040172D 51 push ecx
断点:VirtualAlloc 中断后,返回来到这里:
00401342 FFD3 call ebx
00401344 85C0 test eax, eax ;返回这里
00401346 0F84 4D020000 je 00401599
0040134C 8945 F4 mov dword ptr [ebp-C], eax
0040134F 89C7 mov edi, eax
00401351 8B75 08 mov esi, dword ptr [ebp+8] ; 数据窗口定位到[ebp+8],可以看见是原始程序的起
始处,记住[ebp+8]的地址。
00401C0E 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ?........
00401C1E B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 ?......@.......
00401C2E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00401C3E 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 00 00 ............?..
00401C4E 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 ?.???L?Th
00401C5E 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
00401C6E 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
然后在下面下断:
0040139B 8B55 F4 mov edx, dword ptr [ebp-C]
0040139E 2B55 FC sub edx, dword ptr [ebp-4]
004013A1 74 5C je short 004013FF
004013A3 8B45 F4 mov eax, dword ptr [ebp-C]
运行中断后,写一个一句话的脚本:
dm 401c0e, 123F2, "c:\dump.exe"
上面401c0e是第一次记下的数据,123F2是从401c0e到code区段末的大小,可以选中401c0e到区段末的数据,od会自动提示大小。
脚本运行后,自动在c盘根目录生成一个脱壳文件dump.exe。
然后查看一下区段信息,把脱壳程序末尾多余的字节删掉,就和原程序一模一样了。
具体细节自己琢磨吧,只有琢磨出来的才是自己真正掌握的。
|