GHF Protector脱壳
壳下载地址:http://free.ys168.com/?breezer
我用这个壳给一个小程序加壳,用PEiD检查显示为Morphine 1.4 - 2.7 -> Holy_Father & Ratter/29A
实际是GHF Protector。这个壳压缩引擎使用的是AHPack,加密引擎Morphine。脱壳比较简单。
忽略OD所有异常,载入程序:
00511687 > 22ED AND CH,CH///壳的入口。
00511689 F5 CMC
0051168A FC CLD
0051168B F9 STC
0051168C 8D2D 30010000 LEA EBP,DWORD PTR DS:[130]
00511692 55 PUSH EBP
00511693 52 PUSH EDX
00511694 81F7 00000000 XOR EDI,0
0051169A 5A POP EDX
0051169B 5D POP EBP
0051169C FC CLD
0051169D 57 PUSH EDI
到入口后 下断bp GetModuleHandleA
第一次断下:
77E12CD1 > 837C24 04 00 CMP DWORD PTR SS:[ESP+4],0 ///断在这里。
77E12CD6 74 18 JE SHORT 77E12CF0 ; 77E12CF0
77E12CD8 FF7424 04 PUSH DWORD PTR SS:[ESP+4]
77E12CDC E8 92FFFFFF CALL 77E12C73 ; 77E12C73
77E12CE1 85C0 TEST EAX,EAX
堆栈区:
0012F6E4 77BD1EB2 /CALL 到 GetModuleHandleA 来自 77BD1EAC
0012F6E8 77BF1094 \pModule = "kernel32.dll"
第二次断下时堆栈区:
0012FF9C 0040E10C /CALL 到 GetModuleHandleA 来自 VB1_1?.0040E10A
0012FFA0 0040E054 \pModule = "KERNEL32.DLL"
取消断点,返回程序领空:
0040E10C 68 B3E04000 PUSH 40E0B3 ; ASCII "GlobalAlloc"///返回到这里。
0040E111 50 PUSH EAX
0040E112 B8 44E04000 MOV EAX,40E044
0040E117 FF10 CALL DWORD PTR DS:[EAX]
0040E119 68 00A00000 PUSH 0A000
往下找:
0040E281 FF10 CALL DWORD PTR DS:[EAX]
0040E283 68 BFE04000 PUSH 40E0BF ; ASCII "GlobalFree"
0040E288 50 PUSH EAX
0040E289 B8 44E04000 MOV EAX,40E044
0040E28E FF10 CALL DWORD PTR DS:[EAX]
0040E290 8B15 CAE04000 MOV EDX,DWORD PTR DS:[40E0CA]
0040E296 52 PUSH EDX
0040E297 FFD0 CALL EAX
0040E299 61 POPAD
0040E29A BA D8104000 MOV EDX,4010D8 ///4010D8就是入口。
0040E29F FFE2 JMP EDX///跳向程序入口。
0040E2A1 90 NOP
0040E2A2 C3 RETN
0040E2A3 44 INC ESP
0040E2A4 0000 ADD BYTE PTR DS:[EAX],AL
来到程序真正的入口:
004010D8 68 BC614000 PUSH 4061BC ///OEP到了!
004010DD E8 F0FFFFFF CALL 004010D2 ; JMP to MSVBVM60.ThunRTMain
004010E2 0000 ADD BYTE PTR DS:[EAX],AL
004010E4 0000 ADD BYTE PTR DS:[EAX],AL
004010E6 0000 ADD BYTE PTR DS:[EAX],AL
004010E8 3000 XOR BYTE PTR DS:[EAX],AL
004010EA 0000 ADD BYTE PTR DS:[EAX],AL
再来看IAT:
00400FF8 00 00 00 00 00 00 00 00 ........
00401000 EE 15 54 73 8B B4 52 73 ..Ts..Rs
00401008 67 7D 53 73 29 2F 52 73 g}Ss)/Rs
00401010 AE 7D 51 73 A0 7E 53 73 ?Qs.~Ss
00401018 03 B4 52 73 6F D8 45 73 ..Rso.Es
00401020 78 B7 45 73 85 E3 46 73 x.Es..Fs
00401028 33 7C 51 73 7C 67 51 73 3|Qs|gQs
00401030 5B 4E 46 73 20 C1 52 73 [NFs .Rs
00401038 6E 82 46 73 3B 66 52 73 n.Fs;fRs
00401040 3E DE 44 73 F1 49 46 73 >.Ds.IFs
00401048 48 82 53 73 6D D6 51 73 H.Ssm.Qs
00401050 00 00 00 00 00 00 00 00 ........
到入口后就可以DUMP进程了,但由于Morphine对文件头做了手脚,用LORDPE无法DUMP出有用的文件。改用PETOOLS就可以DUMP了。
DUMP后还要修复IAT,用ImportREC修复时不能自动搜索IAT,要注意设置“选项”中“使用来自磁盘的PE文件头”不能选上。然后填上OEP=10D8 RVA=1000 SIZE=50
搜索后修复即可。这个压缩引擎估计是早期版本,还比较好对付。
附件:vb1.rar
[课程]Linux pwn 探索篇!