本文为脱壳入门,没啥技术含量,高手略过,勿喷。
ExeStealth2.exe程序用PEiD查壳为EXEStealth 2.5x - 2.7x -> WebToolMaster
EXEStealth壳使用最后一次异常的方法就可以脱壳,只是这个程序脱完需要找一下iat。
一、找OEP
将OD调试选项中,除忽略kernel32异常外的所有勾去掉。
然后不停shift+f9,弹出提示框,30天试用。点击确定,再继续shift+f9,到最后一次异常。
00A639EC 3100 xor dword ptr ds:[eax],eax
00A639EE 64:8F05 00000000 pop dword ptr fs:[0]
00A639F5 58 pop eax
shift+f8到系统领空,alt+m打开内存镜像,在00401000段f2下断。f9到oep.
00403607 6A 00 push 0
00403609 E8 E2040000 call ExeSteal.00403AF0
0040360E A3 02184000 mov dword ptr ds:[401802],eax
00403613 6A 00 push 0
00403615 68 2B364000 push ExeSteal.0040362B
0040361A 6A 00 push 0
0040361C 6A 64 push 64
0040361E 50 push eax
0040361F E8 08050000 call ExeSteal.00403B2C
入口特征是masm的程序。
二、找iat
loadpe 脱壳
importrec修复,显示无效,等级1修复,但是还有1adc 1ae4 1b10 3个指针不能修复。等级2,等级3也都不行,所以这三个指针就是需要手动寻找的。
在没有加密的iat下硬件写入断点,看iat是什么时候写入的。
不知道为什么,我下硬件写入断点,断不下来,所以改为内存访问断点。
重新加载,忽略所有异常。f9执行到
00A63335 8902 mov dword ptr ds:[edx],eax ; kernel32.CloseHandle
00A63337 EB 09 jmp short 00A63342
00A63339 B8 A417A600 mov eax,0A617A4
00A6333E 8B17 mov edx,dword ptr ds:[edi]
00A63340 8902 mov dword ptr ds:[edx],eax
00A63342 8307 04 add dword ptr ds:[edi],4
00A63345 5F pop edi
00A63346 5E pop esi
00A63347 5B pop ebx
00A63348 8BE5 mov esp,ebp
00A6334A 5D pop ebp
00401AD0 00001B54
00401AD4 00001B62
00401AD8 00001B70
00401ADC 00001B7E
00401AE0 00001B90
00401AE4 00001B9E
查看一下 00401b54
00401B54 1A 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 30 00 .CloseHandle.0.
00401B64 43 72 65 61 74 65 46 69 6C 65 41 00 80 00 45 78 CreateFileA.€.Ex
00401B74 69 74 50 72 6F 63 65 73 73 00 C8 00 47 65 74 43 itProcess.?GetC
00401B84 6F 6D 6D 61 6E 64 4C 69 6E 65 41 00 F5 00 47 65 ommandLineA.?Ge
00401B94 74 46 69 6C 65 53 69 7A 65 00 09 01 47 65 74 4D tFileSize..GetM
00401BA4 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 52 01 oduleHandleA..R
00401BB4 47 65 74 54 69 63 6B 43 6F 75 6E 74 00 00 67 01 GetTickCount..g
所以需要找的三个函数,就是GetCommandLineA GetModuleHandleA DialogBoxParamA
修复dump后的程序,运行,提示框消失。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界