http://bbs.pediy.com/showthread.php?s=&threadid=1990&highlight=EncryptPE
研究了好长时间,文件算是dump出来了,但是修复IAT遇到了麻烦
引用:
―――――――――――――――――――――――――――――――――――
// 写一段恢复 API 的补丁程序, 放到 7119CF60
7119CF60 60 PUSHAD
7119CF61 B8 50124000 MOV EAX,401250 ; // 搜索从 401250 开始
7119CF66 BA 00000101 MOV EDX,1010000 ; // 把 API 放到 1010000 开始的空闲区域
7119CF6B 66:8138 90E9 CMP WORD PTR DS:[EAX],0E990 ; // 90 E9 = NOP, JMP XXXXXXX
7119CF70 0F85 2F000000 JNZ V1200351.7119CFA5
7119CF76 8BC8 MOV ECX,EAX ; // [EAX] is 90 E9
7119CF78 8B40 02 MOV EAX,DWORD PTR DS:[EAX+2] ; // EAX = XXXXXXXX
7119CF7B 03C1 ADD EAX,ECX
7119CF7D 83C0 06 ADD EAX,6
7119CF80 3D 00000070 CMP EAX,70000000 ; // > 7000 0000 就是 API
7119CF85 0F87 0E000000 JA V1200351.7119CF99
7119CF8B 83C0 05 ADD EAX,5
7119CF8E 8BD8 MOV EBX,EAX
7119CF90 83C0 02 ADD EAX,2
7119CF93 8B00 MOV EAX,DWORD PTR DS:[EAX]
7119CF95 8B00 MOV EAX,DWORD PTR DS:[EAX]
7119CF97 33C3 XOR EAX,EBX ; // < 7000 0000 的 API
7119CF99 8902 MOV DWORD PTR DS:[EDX],EAX ; // 保存 API Address
7119CF9B 83C2 04 ADD EDX,4
7119CF9E 8BC1 MOV EAX,ECX
7119CFA0 90 NOP
7119CFA1 90 NOP
7119CFA2 90 NOP
7119CFA3 90 NOP
7119CFA4 90 NOP
7119CFA5 83C0 04 ADD EAX,4
7119CFA8 3D 208C4300 CMP EAX,438C20 ; // 搜索到 438C20 结束
7119CFAD ^ 72 BC JB SHORT V1200351.7119CF6B
7119CFAF 61 POPAD
60 B8 50 12 40 00 BA 00 00 01 01 66 81 38 90 E9 0F 85 2F 00 00 00 8B C8 8B 40 02 03 C1 83 C0 06 3D 00 00 00
70 0F 87 0E 00 00 00 83 C0 05 8B D8 83 C0 02 8B 00 8B 00 33 C3 89 02 83 C2 04 8B C1 90 90 90 90 90 83 C0 04
3D 20 8C 43 00 72 BC 61
IMPortRec, VA=1010000, RVA = C10000, Size = 688, Get Imports 得到IAT
OEP: 00099780 IATRVA: 00C10000 IATSize: 00000688
FThunk: 00C10000 NbFunc: 000001A2
1 00C10000 kernel32.dll 001F CloseHandle
1 00C10004 kernel32.dll 0039 CreateFileA
1 00C10008 kernel32.dll 012D GetFileType
1 00C1000C kernel32.dll 012A GetFileSize
1 00C10010 kernel32.dll 016D GetStdHandle
1 00C10014 kernel32.dll 0237 RaiseException
1 00C10018 kernel32.dll 0244 ReadFile
1 00C1001C kernel32.dll 025E RtlUnwind
............
―――――――――――――――――――――――――――――――――――
我是这样做的:
载入目标文件,运行到OEP处中断下来,然后把这段恢复 API 的补丁程序, 覆盖7119CF60处的原本的程序,再F9运行,程序报错,说是内存读取错误,打开ImportREC,得到的还是一团乱七八糟的IAT,并没有解密出来的IAT表?
并且,在7119CF60处下过断点,也没有看见程序被断下来,这段补丁程序根本就没有被运行过??
怎么回事哦?是我的做法出问题了么?
请指教!
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!