【文章标题】: 菜鸟脱ExeCryptor的笔记 【文章作者】: machenglin 【软件名称】: pm 【软件大小】: 1.9MB 【下载地址】: 自己搜索下载 【加壳方式】: ExeCryptor 【保护方式】: ExeCryptor 【编写语言】: Borland Delphi 【使用工具】: OllyICE、PETools、ImportREC 【操作平台】: winxp sp2 【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教! -------------------------------------------------------------------------------- 【详细过程】
首先感谢ExeCryptor脚本的作者。
感谢参考学习ExeCryptor教程的作者。
OD载入。
7C921231 C3 retn ; 系统断点。 7C921232 8BFF mov edi, edi 7C921234 90 nop 7C921235 90 nop 7C921236 90 nop 7C921237 90 nop 7C921238 90 nop 7C921239 > CC int3 7C92123A C3 retn 7C92123B 90 nop 7C92123C 8BFF mov edi, edi -------------------------------------------------------------------------------------------------
-- 一、找到OEP、转存。
运行脚本Bypass AntiDBG OEP,出现几次异常,Shift+F9通过。
0079F7BA E8 038DEDFF call 006784C2 ; 停在伪OEP。 0079F7BF 0D 71C08494 or eax, 9484C071 0079F7C4 07 pop es 0079F7C5 40 inc eax 0079F7C6 63E9 arpl cx, bp 0079F7C8 51 push ecx 0079F7C9 97 xchg eax, edi 0079F7CA ED in eax, dx 0079F7CB FFE8 jmp far eax ; 非法使用寄存器
脚本结束。 -------------------------------------------------------------------------------------------------
-- 查code段00401000+23E000=63F000。
shoooo大侠告诉我们: “delphi直接到初始化表的下一行去看,原oep处改成了jmp XXXX, XXXX可作oep”。
0063E9A0 - E9 150E1600 jmp <模块入口点> ; OEP!!! 0063E9A5 81E0 CEF1E9B3 and eax, B3E9F1CE 0063E9AB 8BD0 mov edx, eax 0063E9AD E8 DEF41100 call 0075DE90 0063E9B2 335F 0C xor ebx, [edi+C] 0063E9B5 D95B 0B fstp dword ptr [ebx+B] 0063E9B8 B7 BD mov bh, 0BD 0063E9BA 0BD8 or ebx, eax 0063E9BC - E9 3F360200 jmp 00662000 0063E9C1 D5 E8 aad 0E8 0063E9C3 8AD2 mov dl, dl 0063E9C5 53 push ebx 0063E9C6 EC in al, dx 0063E9C7 3A7C90 6A cmp bh, [eax+edx*4+6A] 0063E9CB 8424F5 E5D8176A test [esi*8+6A17D8E5], ah 0063E9D2 006A 00 add [edx], ch 0063E9D5 68 A4EA6300 push 0063EAA4 ; ASCII "AQB2005"
用PETools转存为dumped.exe。
在0063E9A0新建EIP。
==================================================================================================== 二、解密IAT,修复转存文件。
用LordPE查看,一般EXECryptor壳,BBS区段下面的0eqizouf区段就是IAT表地址,当然,这个区段名由人随便命
名 ,但在BBS区段下面一个区段没有疑问。
0eqizouf=0025C000。在OD数据窗口Ctrl+G:65C000。
注意,EXECryptor加密的IAT函数用:文件名.xxxxxxxx 表示,“x”是数字。
向下看:
0065C1DC 00000000 0065C1E0 007C731F prj_safe.007C731F ; 加密的IAT,IATstart。 0065C1E4 007DC743 prj_safe.007DC743 0065C1E8 00678B15 prj_safe.00678B15 ...... 0065C2C0 00760A9E prj_safe.00760A9E 0065C2C4 00000000 0065C2C8 770F4850 oleaut32.SysFreeString ; 未加密的IAT 0065C2CC 7711C99D oleaut32.SysReAllocStringLen 0065C2D0 770F4B59 oleaut32.SysAllocStringLen 0065C2D4 00000000 0065C2D8 00674239 prj_safe.00674239 ...... 0065CBB8 71A23E00 WS2_32.bind 0065CBBC 00000000 0065CBC0 01FD1F70 sys_aq.get_key_password ; IATend。
-------------------------------------------------------------------------------------------------
--- 打开ExeCryptor 2.xx IAT Rebuilder v1.1 脚本编辑。
mov IATstart,0065C1E0 mov IATend,0065CBC0
保存修改,运行ExeCryptor 2.xx IAT Rebuilder v1.1 脚本。
这时可打开脚本运行窗口观察恢复情况。
在恢复到0065C258出现异常,记住这个地址,下次修改用!终止脚本。
注意,最好关闭文件,清理UDD全部。
重新开始,直到伪OEP。
在反汇编窗口Ctrl+G:0063E9A0(OEP),在0063E9A0新建EIP。 在数据窗口Ctrl+G:0065C258,修改为00000000。
运行ExeCryptor 2.xx IAT Rebuilder v1.1 脚本。
脚本结束后,根据0065C258的函数地址修改为kernel32.FreeLibrary。
再用ImportREC,OEP=0023E9A0 RVA=0025C1E0,修复转存文件。
[1] [2] 下一页 |