目标程序:!EP (EXE Pack) 1.0加壳程序
下载地址:
http://www.tuts4you.com/download.php?list.52
下载: !EP (EXE Pack) 1.0
解压后文件名:UnPackMe_!EP (EXE Pack) 1.0.exe 337KB
PEID查壳:AHpack 0.1 -> FEUERRADER
这个壳比较简单,有多种方法,我也看了不少方法,今天在脱壳过程中发现这一方法,不对的地方请大侠指正.
下面开始脱壳:
OD载入后停在这里:
004B20FF > 60 pushad
004B2100 68 54204B00 push UnPackMe.004B2054 ; ASCII "KERNEL32.DLL"
004B2105 B8 48204B00 mov eax,<&KERNEL32.GetModuleHandleA>
004B210A FF10 call dword ptr ds:[eax]
004B210C 68 B3204B00 push UnPackMe.004B20B3 ; ASCII "GlobalAlloc"
004B2111 50 push eax
004B2112 B8 44204B00 mov eax,<&KERNEL32.GetProcAddress>
004B2117 FF10 call dword ptr ds:[eax]
004B2119 68 004A0900 push 94A00
004B211E 6A 40 push 40
004B2120 FFD0 call eax
004B2122 8905 CA204B00 mov dword ptr ds:[4B20CA],eax
004B2128 89C7 mov edi,eax
下断点:
bp GetModuleHandleA
F9运行,注意观察堆栈窗口。
0012FF9C 004B210C /CALL 到 GetModuleHandleA 来自 UnPackMe.004B210A
0012FFA0 004B2054 \pModule = "KERNEL32.DLL"
注意这里
0012FFA4 7C92E920 ntdll.7C92E920
0012FFA8 7C930228 ntdll.7C930228
堆栈中第二行中pModule的值,多为*.dll
不去管它,继续F9
直到出现:
0012FF98 00406BD5 /CALL 到 GetModuleHandleA 来自 UnPackMe.00406BD0
0012FF9C 00000000 \pModule = NULL
注意,我们要找的地方到了
0012FFA0 004958EC UnPackMe.004958EC
到了这里,pModule = NULL
而下面的堆栈指针(0012FFA0 004958EC UnPackMe.004958EC),004958EC就是OEP了,双击在反汇编窗口跟随,004958EC处新建EIP接下来就可以脱壳了,LOADPE脱壳,在用ImportREC修复,试下能正常运行,PEID看一下,是Borland Delphi 6.0 - 7.0写的。
到此脱壳完成,别的版本我没有试验。1.0的用此方法应该没问题。
另外希望各位大侠能邀请我加入看雪,兄弟不胜感激。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课