标题:手动脱壳入门第七篇EZIP 1.0

-------------------------------------------------------------------------------------------------------------------------------

时间:2006/8/28 17:12:52

-------------------------------------------------------------------------------------------------------------------------------

内容:

xTiNt
 手动脱壳入门第七篇EZIP 1.0  
手动脱壳入门第七篇EZIP 1.0
【脱文标题】 手动脱壳入门第七篇EZIP 1.0
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg,Loadpe,ImportREC
【脱壳平台】 Win2K/XP
【软件名称】 Notepad.exe
【软件简介】 EZIP 1.0 加壳的一个Win98的记事本
【软件大小】 33.8KB 
【加壳方式】 EZIP 1.0 -> Jonathan Clark [Overlay]
【保护方式】 EZIP
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享: 
软件截图


本地下载
好现在我们来手动脱一个EZIP1.0加壳的记事本看看它的特性。
本地下载
我们看到加壳后文件大小79.3k,原Win98下的记事本52K,看来这个程序不是已压缩文件大小为目的,只是个简单保护程序不被反汇编的简单加壳程序。
首先必须的工具要准备好
附件中壳为Peid测壳为EZIP 1.0 -> Jonathan Clark [重叠]
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
这次没有任何提示,应为这个壳是增肥壳,所以Od无压缩提示。
停在这里
0040D0BE N> $ /E9 19320000 jmp Notepad.004102DC 开始地点,和我们平时看到的Pushad等不同。怎样找Oep呢,只能在程序跨段跳跃时,地址变化很大时寻找Oep,一般通过Jmp,Ret等语句跨段。
0040D0C3 . |E9 7C2A0000 jmp Notepad.0040FB44
0040D0C8 $ |E9 19240000 jmp Notepad.0040F4E6 
0040D0CD $ |E9 FF230000 jmp Notepad.0040F4D1 
0040D0D2 . |E9 1E2E0000 jmp Notepad.0040FEF5
0040D0D7 $ |E9 882E0000 jmp Notepad.0040FF64
0040D0DC $ |E9 2C250000 jmp Notepad.0040F60D
0040D0E1 $ |E9 AE150000 jmp Notepad.0040E694
0040D0E6 $ |E9 772B0000 jmp Notepad.0040FC62
0040D0EB $ |E9 87020000 jmp Notepad.0040D377
0040D0F0 $ |E9 702E0000 jmp Notepad.0040FF65
如无特别提示,单步跟踪脱壳均用F8键步过。
004102DC /> \55 push ebp 跳到这里。
004102DD |. 8BEC mov ebp, esp
004102DF |. 81EC 28040000 sub esp, 428
004102E5 |. 53 push ebx
004102E6 |. 56 push esi
004102E7 |. 57 push edi
004102E8 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004102EE |. 50 push eax
004102EF |. E8 FCCDFFFF call Notepad.0040D0F0 远程Call用F8过。
004102F4 |. 59 pop ecx
004102F5 |. 85C0 test eax, eax
004102F7 |. 75 05 jnz short Notepad.004102FE 跳
004102F9 |. E9 8C030000 jmp Notepad.0041068A
004102FE |> \68 00800000 push 8000 到这里。
00410303 |. 6A 00 push 0
00410305 |. FF95 DCFCFFFF call dword ptr ss:[ebp-324] ; kernel32.GlobalAlloc
0041030B |. 8985 3CFCFFFF mov dword ptr ss:[ebp-3C4], eax
...................................................
0041033A |. 68 00304100 push Notepad.00413000 ; ASCII "1.1.3"
0041033F |. 8D85 44FCFFFF lea eax, dword ptr ss:[ebp-3BC]
00410345 |. 50 push eax
00410346 |. E8 E7CCFFFF call Notepad.0040D032 远程Call用F8过。
...................................................
004103C3 |. 8D85 ECFBFFFF lea eax, dword ptr ss:[ebp-414]
004103C9 |. 50 push eax
004103CA |. 8D85 3CFCFFFF lea eax, dword ptr ss:[ebp-3C4]
004103D0 |. 50 push eax
004103D1 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004103D7 |. 50 push eax
004103D8 |. E8 28CCFFFF call Notepad.0040D005 远程Call用F8过。
...................................................
004103F0 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004103F6 |. 50 push eax
004103F7 |. E8 09CCFFFF call Notepad.0040D005
004103FC |. 83C4 10 add esp, 10
004103FF |. 68 E0000000 push 0E0
00410404 |. 8D85 08FDFFFF lea eax, dword ptr ss:[ebp-2F8]
0041040A |. 50 push eax
0041040B |. 8D85 3CFCFFFF lea eax, dword ptr ss:[ebp-3C4]
00410411 |. 50 push eax
00410412 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410418 |. 50 push eax
00410419 |. E8 E7CBFFFF call Notepad.0040D005 远程Call用F8过。
...................................................
0041042B |. /75 0C jnz short Notepad.00410439 小跳转,没什么值得注意。
0041042D |. |0FBE85 EDFBFF>movsx eax, byte ptr ss:[ebp-413]
00410434 |. |83F8 5A cmp eax, 5A
00410437 |. |74 14 je short Notepad.0041044D
00410439 |> |6A 00 push 0
0041043B |. |68 644B4100 push Notepad.00414B64
00410440 |. |68 184A4100 push Notepad.00414A18 ; ASCII "bad Dos Header"
00410445 |. |6A 00 push 0
00410447 |. |FF95 04FDFFFF call dword ptr ss:[ebp-2FC]
0041044D |> \6A 40 push 40
...................................................
004104BE |. E8 BFCBFFFF call Notepad.0040D082 远程Call用F8过。
004104C3 |. 83C4 0C add esp, 0C
004104C6 |. 8B85 DCFBFFFF mov eax, dword ptr ss:[ebp-424]
004104CC |. 8B8D DCFBFFFF mov ecx, dword ptr ss:[ebp-424]
004104D2 |. 0348 3C add ecx, dword ptr ds:[eax+3C]
004104D5 |. 898D E4FBFFFF mov dword ptr ss:[ebp-41C], ecx
004104DB |. 8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C]
004104E1 |. 83C0 18 add eax, 18
004104E4 |. 8985 2CFCFFFF mov dword ptr ss:[ebp-3D4], eax
004104EA |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
...................................................
0041050A |. E8 73CBFFFF call Notepad.0040D082 远程Call用F8过。
0041050F |. 83C4 0C add esp, 0C
00410512 |. 68 E0000000 push 0E0
00410517 |. 8D85 08FDFFFF lea eax, dword ptr ss:[ebp-2F8]
0041051D |. 50 push eax
0041051E |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
00410524 |. E8 59CBFFFF call Notepad.0040D082 远程Call用F8过。
00410529 |. 83C4 0C add esp, 0C
0041052C |. 8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C]
00410532 |. 0FB740 06 movzx eax, word ptr ds:[eax+6]
...................................................
0041054E |. E8 B2CAFFFF call Notepad.0040D005 远程Call用F8过。
00410553 |. 83C4 10 add esp, 10
00410556 |. 83A5 34FCFFFF>and dword ptr ss:[ebp-3CC], 0
0041055D |. EB 0D jmp short Notepad.0041056C 跳走。
0041056C |> \8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C] ; Notepad.00400080
00410572 |. 0FB740 06 |movzx eax, word ptr ds:[eax+6]
00410576 |. 3985 34FCFFFF |cmp dword ptr ss:[ebp-3CC], eax
0041057C |. 0F83 9D000000 |jnb Notepad.0041061F 看这个跳转很大,估计是循环出口。这里没跳走,因为脱壳的过程是外壳程序程序在内存中解压程序,我们看到的解压过程就是一些循环,解压完毕后就要转到程序入口点,准备运行程序,这个时候就是我们手动脱壳的时机。
...................................................
004105E0 |. 8B85 ECFDFFFF |mov eax, dword ptr ss:[ebp-214]
004105E6 |. FF70 10 |push dword ptr ds:[eax+10]
004105E9 |. FFB5 D8FBFFFF |push dword ptr ss:[ebp-428]
004105EF |. FFB5 E8FDFFFF |push dword ptr ss:[ebp-218]
004105F5 |. 8D85 3CFCFFFF |lea eax, dword ptr ss:[ebp-3C4]
004105FB |. 50 |push eax
004105FC |. 8D85 94FCFFFF |lea eax, dword ptr ss:[ebp-36C]
00410602 |. 50 |push eax
00410603 |. E8 48CAFFFF |call Notepad.0040D050
00410608 |. 83C4 18 |add esp, 18
0041060B |. 8B85 ECFDFFFF |mov eax, dword ptr ss:[ebp-214]
00410611 |. 83C0 28 |add eax, 28
00410614 |. 8985 ECFDFFFF |mov dword ptr ss:[ebp-214], eax
0041061A |.^ E9 40FFFFFF \jmp Notepad.0041055F 跳到0041055F,直到在内存中解压完毕从0041057C跳出。
我们点一下 0041057C这行,然后回车。
0041057C |. 0F83 9D000000 |jnb Notepad.0041061F 回车
0041061F |> \FFB5 E8FDFFFF push dword ptr ss:[ebp-218] F2在这句下断点,F9执行到这里F2取消断点。
00410625 |. FF95 D4FCFFFF call dword ptr ss:[ebp-32C] ; kernel32.CloseHandle
0041062B |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410631 |. 50 push eax
00410632 |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
00410638 |. 8B8D E0FBFFFF mov ecx, dword ptr ss:[ebp-420]
0041063E |. 2B48 1C sub ecx, dword ptr ds:[eax+1C]
00410641 |. 51 push ecx
00410642 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
00410648 |. E8 6CCAFFFF call Notepad.0040D0B9
0041064D |. 83C4 0C add esp, 0C
00410650 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410656 |. 50 push eax
00410657 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
...................................................
00410648 |. E8 6CCAFFFF call Notepad.0040D0B9 远程Call用F8过。
0041064D |. 83C4 0C add esp, 0C
00410650 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410656 |. 50 push eax
00410657 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
0041065D |. E8 F3C9FFFF call Notepad.0040D055 远程Call用F8过。
00410662 |. 59 pop ecx
00410663 |. 59 pop ecx
00410664 |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
0041066A |. 8B40 10 mov eax, dword ptr ds:[eax+10]
0041066D |. 8B8D 2CFCFFFF mov ecx, dword ptr ss:[ebp-3D4]
00410673 |. 0341 1C add eax, dword ptr ds:[ecx+1C]
00410676 |. 8985 38FCFFFF mov dword ptr ss:[ebp-3C8], eax
0041067C |. 8B85 38FCFFFF mov eax, dword ptr ss:[ebp-3C8]
00410682 |. 5F pop edi
00410683 |. 5E pop esi
00410684 |. 5B pop ebx 
00410685 |. 8BE5 mov esp, ebp
00410687 |. 5D pop ebp
00410688 |.- FFE0 jmp eax ; Notepad.004010CC
呵,解压完毕,准备跳到入口点了。410688和4010CC多么明显的跨段
004010CC 55 push ebp 入口点。注意,因为这个壳会修改PE头,只好用LordPE脱壳。用Od的插件脱壳并修复也不能运行。
Loadpe脱壳时,在进程列表中找到Notepad.exe这个进程,点右键完整脱壳,保存即可。
截图


004010CD 8BEC mov ebp, esp
004010CF 83EC 44 sub esp, 44
004010D2 56 push esi
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi, eax
004010DB 8A00 mov al, byte ptr ds:[eax]
004010DD 3C 22 cmp al, 22
004010DF 75 1B jnz short Notepad.004010FC
004010E1 56 push esi
004010E2 FF15 F4644000 call dword ptr ds:[4064F4] ; USER32.CharNextA
004010E8 8BF0 mov esi, eax
脱壳后的入口点不正确,手动改麻烦,我们用ImportREC这个专业级的工具修复,如果输入表坏的也可一并修复,还可以跨平台运行。
Imprec修复过程。
在Oep处填000010cc,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行,这里不用备份,Imprec自动帮你做了.
"手动脱壳入门第七篇"脱壳动画! 

  
 

  

xTiNt
 手动脱壳入门第七篇EZIP 1.0  
手动脱壳入门第七篇EZIP 1.0
【脱文标题】 手动脱壳入门第七篇EZIP 1.0
【脱文作者】 weiyi75[Dfcg] 
【作者邮箱】 weiyi75@sohu.com 
【作者主页】 Dfcg官方大本营 
【使用工具】 Peid,Ollydbg,Loadpe,ImportREC
【脱壳平台】 Win2K/XP
【软件名称】 Notepad.exe
【软件简介】 EZIP 1.0 加壳的一个Win98的记事本
【软件大小】 33.8KB 
【加壳方式】 EZIP 1.0 -> Jonathan Clark [Overlay]
【保护方式】 EZIP
【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享: 
软件截图


本地下载
好现在我们来手动脱一个EZIP1.0加壳的记事本看看它的特性。
本地下载
我们看到加壳后文件大小79.3k,原Win98下的记事本52K,看来这个程序不是已压缩文件大小为目的,只是个简单保护程序不被反汇编的简单加壳程序。
首先必须的工具要准备好
附件中壳为Peid测壳为EZIP 1.0 -> Jonathan Clark [重叠]
手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。
手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。
用OD载入程序后。
这次没有任何提示,应为这个壳是增肥壳,所以Od无压缩提示。
停在这里
0040D0BE N> $ /E9 19320000 jmp Notepad.004102DC 开始地点,和我们平时看到的Pushad等不同。怎样找Oep呢,只能在程序跨段跳跃时,地址变化很大时寻找Oep,一般通过Jmp,Ret等语句跨段。
0040D0C3 . |E9 7C2A0000 jmp Notepad.0040FB44
0040D0C8 $ |E9 19240000 jmp Notepad.0040F4E6 
0040D0CD $ |E9 FF230000 jmp Notepad.0040F4D1 
0040D0D2 . |E9 1E2E0000 jmp Notepad.0040FEF5
0040D0D7 $ |E9 882E0000 jmp Notepad.0040FF64
0040D0DC $ |E9 2C250000 jmp Notepad.0040F60D
0040D0E1 $ |E9 AE150000 jmp Notepad.0040E694
0040D0E6 $ |E9 772B0000 jmp Notepad.0040FC62
0040D0EB $ |E9 87020000 jmp Notepad.0040D377
0040D0F0 $ |E9 702E0000 jmp Notepad.0040FF65
如无特别提示,单步跟踪脱壳均用F8键步过。
004102DC /> \55 push ebp 跳到这里。
004102DD |. 8BEC mov ebp, esp
004102DF |. 81EC 28040000 sub esp, 428
004102E5 |. 53 push ebx
004102E6 |. 56 push esi
004102E7 |. 57 push edi
004102E8 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004102EE |. 50 push eax
004102EF |. E8 FCCDFFFF call Notepad.0040D0F0 远程Call用F8过。
004102F4 |. 59 pop ecx
004102F5 |. 85C0 test eax, eax
004102F7 |. 75 05 jnz short Notepad.004102FE 跳
004102F9 |. E9 8C030000 jmp Notepad.0041068A
004102FE |> \68 00800000 push 8000 到这里。
00410303 |. 6A 00 push 0
00410305 |. FF95 DCFCFFFF call dword ptr ss:[ebp-324] ; kernel32.GlobalAlloc
0041030B |. 8985 3CFCFFFF mov dword ptr ss:[ebp-3C4], eax
...................................................
0041033A |. 68 00304100 push Notepad.00413000 ; ASCII "1.1.3"
0041033F |. 8D85 44FCFFFF lea eax, dword ptr ss:[ebp-3BC]
00410345 |. 50 push eax
00410346 |. E8 E7CCFFFF call Notepad.0040D032 远程Call用F8过。
...................................................
004103C3 |. 8D85 ECFBFFFF lea eax, dword ptr ss:[ebp-414]
004103C9 |. 50 push eax
004103CA |. 8D85 3CFCFFFF lea eax, dword ptr ss:[ebp-3C4]
004103D0 |. 50 push eax
004103D1 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004103D7 |. 50 push eax
004103D8 |. E8 28CCFFFF call Notepad.0040D005 远程Call用F8过。
...................................................
004103F0 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
004103F6 |. 50 push eax
004103F7 |. E8 09CCFFFF call Notepad.0040D005
004103FC |. 83C4 10 add esp, 10
004103FF |. 68 E0000000 push 0E0
00410404 |. 8D85 08FDFFFF lea eax, dword ptr ss:[ebp-2F8]
0041040A |. 50 push eax
0041040B |. 8D85 3CFCFFFF lea eax, dword ptr ss:[ebp-3C4]
00410411 |. 50 push eax
00410412 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410418 |. 50 push eax
00410419 |. E8 E7CBFFFF call Notepad.0040D005 远程Call用F8过。
...................................................
0041042B |. /75 0C jnz short Notepad.00410439 小跳转,没什么值得注意。
0041042D |. |0FBE85 EDFBFF>movsx eax, byte ptr ss:[ebp-413]
00410434 |. |83F8 5A cmp eax, 5A
00410437 |. |74 14 je short Notepad.0041044D
00410439 |> |6A 00 push 0
0041043B |. |68 644B4100 push Notepad.00414B64
00410440 |. |68 184A4100 push Notepad.00414A18 ; ASCII "bad Dos Header"
00410445 |. |6A 00 push 0
00410447 |. |FF95 04FDFFFF call dword ptr ss:[ebp-2FC]
0041044D |> \6A 40 push 40
...................................................
004104BE |. E8 BFCBFFFF call Notepad.0040D082 远程Call用F8过。
004104C3 |. 83C4 0C add esp, 0C
004104C6 |. 8B85 DCFBFFFF mov eax, dword ptr ss:[ebp-424]
004104CC |. 8B8D DCFBFFFF mov ecx, dword ptr ss:[ebp-424]
004104D2 |. 0348 3C add ecx, dword ptr ds:[eax+3C]
004104D5 |. 898D E4FBFFFF mov dword ptr ss:[ebp-41C], ecx
004104DB |. 8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C]
004104E1 |. 83C0 18 add eax, 18
004104E4 |. 8985 2CFCFFFF mov dword ptr ss:[ebp-3D4], eax
004104EA |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
...................................................
0041050A |. E8 73CBFFFF call Notepad.0040D082 远程Call用F8过。
0041050F |. 83C4 0C add esp, 0C
00410512 |. 68 E0000000 push 0E0
00410517 |. 8D85 08FDFFFF lea eax, dword ptr ss:[ebp-2F8]
0041051D |. 50 push eax
0041051E |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
00410524 |. E8 59CBFFFF call Notepad.0040D082 远程Call用F8过。
00410529 |. 83C4 0C add esp, 0C
0041052C |. 8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C]
00410532 |. 0FB740 06 movzx eax, word ptr ds:[eax+6]
...................................................
0041054E |. E8 B2CAFFFF call Notepad.0040D005 远程Call用F8过。
00410553 |. 83C4 10 add esp, 10
00410556 |. 83A5 34FCFFFF>and dword ptr ss:[ebp-3CC], 0
0041055D |. EB 0D jmp short Notepad.0041056C 跳走。
0041056C |> \8B85 E4FBFFFF mov eax, dword ptr ss:[ebp-41C] ; Notepad.00400080
00410572 |. 0FB740 06 |movzx eax, word ptr ds:[eax+6]
00410576 |. 3985 34FCFFFF |cmp dword ptr ss:[ebp-3CC], eax
0041057C |. 0F83 9D000000 |jnb Notepad.0041061F 看这个跳转很大,估计是循环出口。这里没跳走,因为脱壳的过程是外壳程序程序在内存中解压程序,我们看到的解压过程就是一些循环,解压完毕后就要转到程序入口点,准备运行程序,这个时候就是我们手动脱壳的时机。
...................................................
004105E0 |. 8B85 ECFDFFFF |mov eax, dword ptr ss:[ebp-214]
004105E6 |. FF70 10 |push dword ptr ds:[eax+10]
004105E9 |. FFB5 D8FBFFFF |push dword ptr ss:[ebp-428]
004105EF |. FFB5 E8FDFFFF |push dword ptr ss:[ebp-218]
004105F5 |. 8D85 3CFCFFFF |lea eax, dword ptr ss:[ebp-3C4]
004105FB |. 50 |push eax
004105FC |. 8D85 94FCFFFF |lea eax, dword ptr ss:[ebp-36C]
00410602 |. 50 |push eax
00410603 |. E8 48CAFFFF |call Notepad.0040D050
00410608 |. 83C4 18 |add esp, 18
0041060B |. 8B85 ECFDFFFF |mov eax, dword ptr ss:[ebp-214]
00410611 |. 83C0 28 |add eax, 28
00410614 |. 8985 ECFDFFFF |mov dword ptr ss:[ebp-214], eax
0041061A |.^ E9 40FFFFFF \jmp Notepad.0041055F 跳到0041055F,直到在内存中解压完毕从0041057C跳出。
我们点一下 0041057C这行,然后回车。
0041057C |. 0F83 9D000000 |jnb Notepad.0041061F 回车
0041061F |> \FFB5 E8FDFFFF push dword ptr ss:[ebp-218] F2在这句下断点,F9执行到这里F2取消断点。
00410625 |. FF95 D4FCFFFF call dword ptr ss:[ebp-32C] ; kernel32.CloseHandle
0041062B |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410631 |. 50 push eax
00410632 |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
00410638 |. 8B8D E0FBFFFF mov ecx, dword ptr ss:[ebp-420]
0041063E |. 2B48 1C sub ecx, dword ptr ds:[eax+1C]
00410641 |. 51 push ecx
00410642 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
00410648 |. E8 6CCAFFFF call Notepad.0040D0B9
0041064D |. 83C4 0C add esp, 0C
00410650 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410656 |. 50 push eax
00410657 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
...................................................
00410648 |. E8 6CCAFFFF call Notepad.0040D0B9 远程Call用F8过。
0041064D |. 83C4 0C add esp, 0C
00410650 |. 8D85 94FCFFFF lea eax, dword ptr ss:[ebp-36C]
00410656 |. 50 push eax
00410657 |. FFB5 2CFCFFFF push dword ptr ss:[ebp-3D4]
0041065D |. E8 F3C9FFFF call Notepad.0040D055 远程Call用F8过。
00410662 |. 59 pop ecx
00410663 |. 59 pop ecx
00410664 |. 8B85 2CFCFFFF mov eax, dword ptr ss:[ebp-3D4]
0041066A |. 8B40 10 mov eax, dword ptr ds:[eax+10]
0041066D |. 8B8D 2CFCFFFF mov ecx, dword ptr ss:[ebp-3D4]
00410673 |. 0341 1C add eax, dword ptr ds:[ecx+1C]
00410676 |. 8985 38FCFFFF mov dword ptr ss:[ebp-3C8], eax
0041067C |. 8B85 38FCFFFF mov eax, dword ptr ss:[ebp-3C8]
00410682 |. 5F pop edi
00410683 |. 5E pop esi
00410684 |. 5B pop ebx 
00410685 |. 8BE5 mov esp, ebp
00410687 |. 5D pop ebp
00410688 |.- FFE0 jmp eax ; Notepad.004010CC
呵,解压完毕,准备跳到入口点了。410688和4010CC多么明显的跨段
004010CC 55 push ebp 入口点。注意,因为这个壳会修改PE头,只好用LordPE脱壳。用Od的插件脱壳并修复也不能运行。
Loadpe脱壳时,在进程列表中找到Notepad.exe这个进程,点右键完整脱壳,保存即可。
截图


004010CD 8BEC mov ebp, esp
004010CF 83EC 44 sub esp, 44
004010D2 56 push esi
004010D3 FF15 E4634000 call dword ptr ds:[4063E4] ; kernel32.GetCommandLineA
004010D9 8BF0 mov esi, eax
004010DB 8A00 mov al, byte ptr ds:[eax]
004010DD 3C 22 cmp al, 22
004010DF 75 1B jnz short Notepad.004010FC
004010E1 56 push esi
004010E2 FF15 F4644000 call dword ptr ds:[4064F4] ; USER32.CharNextA
004010E8 8BF0 mov esi, eax
脱壳后的入口点不正确,手动改麻烦,我们用ImportREC这个专业级的工具修复,如果输入表坏的也可一并修复,还可以跨平台运行。
Imprec修复过程。
在Oep处填000010cc,点IT自动搜索,然后点获输入信息,看到输入表全部有效,点修复抓取文件按钮,选择Dump的文件,修复它,正常运行,这里不用备份,Imprec自动帮你做了.
"手动脱壳入门第七篇"脱壳动画!