| 菜鸟脱ExeCryptor的笔记 |
| 责任编辑:水土不服 更新日期:2007-11-3 |
|
|
|
三、修复OEP。
参考其他Borland Delphi文件修改OEP。
这个软件中有一个Borland Delphi文件Project1,没有加密。 -------------------------------------------------------------------------------------------------
--- 0048FF74 > 55 push ebp 0048FF75 8BEC mov ebp,esp 0048FF77 83C4 F0 add esp,-10 0048FF7A 53 push ebx 0048FF7B B8 ACFC4800 mov eax,Project1.0048FCAC 0048FF80 E8 F760F7FF call Project1.0040607C ; F7跟随进入。
来到这里。 0040607C 53 push ebx 0040607D 8BD8 mov ebx,eax 0040607F 33C0 xor eax,eax 00406081 A3 9C104900 mov dword ptr ds:[49109C],eax 00406086 6A 00 push 0 00406088 E8 2BFFFFFF call <jmp.&kernel32.GetModuleHandleA> ; 多熟悉的函数! -------------------------------------------------------------------------------------------------
--- 修改OEP: 0063E9A0 > 55 push ebp 0063E9A1 8BEC mov ebp,esp 0063E9A3 83C4 F0 add esp,-10 0063E9A6 53 push ebx 0063E9A7 B8 30E26300 mov eax,AQTB_01.0063E230 ; 这里修改看下面②! 0063E9AC E8 FB86DCFF call 004070AC ; 这里修改看下面①! 0063E9B1 8B1D C0E26300 mov ebx, [63E2C0] ; AQTB_2.0043508C 看后面! 0063E9B7 68 A4EA6300 push 0063EAA4 ; ASCII "AQB2005" 0063E9BC 6A 00 push 0 0063E9BE 6A 00 push 0 0063E9C0 E8 6326DDFF call 00411028 0063E9C5 E8 BE27DDFF call 00411188 0063E9CA 3D B7000000 cmp eax, 0B7 0063E9CF 75 20 jnz short 0063E9F1 0063E9D1 6A 00 push 0 0063E9D3 6A 00 push 0 0063E9D5 68 A4EA6300 push 0063EAA4 ; ASCII "AQB2005" 0063E9DA E8 DD95DCFF call <jmp.&user32.RegisterClipboar> -------------------------------------------------------------------------------------------------
-- ①在dumped_.exe的OEP附近搜索:
push ebx mov ebx,eax xor eax,eax
搜索到这里就是了。 004070AC 53 push ebx 004070AD 8BD8 mov ebx,eax 004070AF 33C0 xor eax,eax 004070B1 A3 A4F06300 mov dword ptr ds:[63F0A4],eax 004070B6 6A 00 push 0 004070B8 E8 2BFFFFFF call <jmp.&kernel32.GetModuleHandleA>
从OEP开始进入第一个call的入口地址这样就确定为004070AC。
②确定0063E9A7 B8 30E26300 mov eax,AQTB_01.00xxxxxx。 确定了OEP开始进入第一个call的入口地址后,F7进入跟踪。 现在另开OD打开用没有修复OEP的dumped_.exe,在反汇编窗口Ctrl+G:004070AC。 在004070AC设内存访问断点,Shift+F9,运行。 出现注册窗口,点“试用”,断下。
看积存器:eax=0063E230
为确认继续,F8步进到这里。 004070E6 E8 4DD5FFFF call 00404638 ; F7进入。 004070EB 5B pop ebx
F8步进到这里。 00404672 E8 61FFFFFF call 004045D8 ; F7进入。 00404677 C3 retn
004045D8 55 push ebp 004045D9 8BEC mov ebp, esp 004045DB 53 push ebx ; AAAA_.0063E230 这里入栈了。 004045DC 56 push esi 004045DD 57 push edi 004045DE A1 40966400 mov eax, [649640] 004045E3 85C0 test eax, eax 004045E5 74 4B je short 00404632 004045E7 8B30 mov esi, [eax] ; 注意[eax]地址!
ds:[0063E230]=000000ED
数据窗口中定位: 0063E230 000000ED 0063E234 0063E238 AAAA_.0063E238 0063E238 00407120 AAAA_.00407120 0063E23C 004070F0 AAAA_.004070F0 0063E240 00406F14 AAAA_.00406F14 0063E244 00406EC0 AAAA_.00406EC0
得到: 0063E9A7 B8 30E26300 mov eax,0063E230
==================================================================================================== 四、初始化修改。
修复OEP变形代码,完成初始化过程中,又出现内存异常,只能到启动界面,这个问题很费了一番周折,主要是
基 础太差的原因造成。
也好,拿出没有修复OEP的dumped_.exe,对照在第一个call后补的代码行:
0063E9AC E8 FB86DCFF call 004070AC ; 这里修改看下面①! 0063E9B1 8B1D C0E26300 mov ebx, [63E2C0] ; AQTB_2.0043508C
经动态跟踪,没有修复OEP的dumped_.exe的是:
00634D90 E8 1723DDFF call prj_safe.004070AC 00634D95 8B1D C0E26300 mov ebx,dword ptr ds:[63E2C0] ; prj_safe.0063FC14
修改: 0063E9AC E8 FB86DCFF call 004070AC ; 这里修改看下面①! 00634D95 8B1D C0E26300 mov ebx,dword ptr ds:[63E2C0] ; prj_safe.0063FC14
004070AC=prj_safe.004070AC
保存,运行。到了“用户登陆”界面,测试正常。
==================================================================================================== 五、文件优化。
这个软件未脱壳前为1.95 MB,想当然的把3个壳区断删除,重建PE。 运行后问题出来了,键入用户名后,又跳出一个口令窗口,我没有设密码呀!? 载入未优化的软件,在壳的3个区段F2,断在一个壳区段,只得将这个区段重新装配进去。 启动脱壳软件,运行畅快了。 就是文件字节还是有些大,为3.9MB,还是基础太差,汗!
==================================================================================================== 六、脱壳ExeCryptor小结
这是纯属个人理解,千万别误导你的正确思路。
1、必须有一个能反反跟踪的OD,建议用OllyICE。 2、转存时PETools比LordPE成功率高。 3、未加壳前文件的TLS在idata区段头。 4、ExeCryptor加密的IAT区段在BBS段下面的一个区段(Borland Delphi)。 5、脱壳前准备一个同语言的参考文件,最好是本软件文件内的。 6、保留一个ImportREC修复的最初文件,修复参考用。 7、有些SDK是存在壳区段,优化时要注意。
本人是个菜鸟,不是很懂编程语言,作为脱壳过程中走过的失败,给像我一样的初哥们参考。上一页 [1] [2] |
|
| 上一篇文章: 黑客探取密码的原理及防范 |
| 下一篇文章: 新手脱壳系列教程——CI Crypt V0.1 手动脱壳 |
|
|
|
|