[求助]IAT的手动修复问题
1. 找到OEP后,第一个call 处F7步入:
004B21F0 55 PUSH EBP // OEP!
004B21F1 8BEC MOV EBP,ESP
004B21F3 83C4 F0 ADD ESP,-10
004B21F6 B8 801D4B00 MOV EAX,Loader.004B1D80
004B21FB E8 1049F5FF CALL Loader.00406B10 // 第一个call,F7步入
004B2200 A1 78634B00 MOV EAX,DWORD PTR DS:[4B6378]
004B2205 8B00 MOV EAX,DWORD PTR DS:[EAX]
004B2207 E8 D02EFBFF CALL Loader.004650DC
2. F7步入后,仍是call,无奈尝试F8到下一个call再F7步入:
00406B10 53 PUSH EBX
00406B11 8BD8 MOV EBX,EAX
00406B13 33C0 XOR EAX,EAX
00406B15 A3 A0304B00 MOV DWORD PTR DS:[4B30A0],EAX
00406B1A 6A 00 PUSH 0
00406B1C E8 2BFFFFFF CALL Loader.00406A4C
; JMP 到 kernel32.GetModuleHandleA
// F7再次步入
00406B21 A3 68764B00 MOV DWORD PTR DS:[4B7668],EAX
00406B26 A1 68764B00 MOV EAX,DWORD PTR DS:[4B7668]
00406B2B A3 AC304B00 MOV DWORD PTR DS:[4B30AC],EAX
00406B30 33C0 XOR EAX,EAX
00406B32 A3 B0304B00 MOV DWORD PTR DS:[4B30B0],EAX
00406B37 33C0 XOR EAX,EAX
00406B39 A3 B4304B00 MOV DWORD PTR DS:[4B30B4],EAX
00406B3E E8 C1FFFFFF CALL Loader.00406B04
3. 进到以下地址:
00406A4C - FF25 8437D800 JMP DWORD PTR DS:[D83784]
; kernel32.GetModuleHandleA
// 惊喜,以为找到地址 D83784
00406A52 8BC0 MOV EAX,EAX
00406A54 - FF25 6C37D800 JMP DWORD PTR DS:[D8376C]
; kernel32.LocalAlloc
00406A5A 8BC0 MOV EAX,EAX
00406A5C - FF25 2435D800 JMP DWORD PTR DS:[D83524]
; kernel32.TlsGetValue
00406A62 8BC0 MOV EAX,EAX
00406A64 - FF25 8030D800 JMP DWORD PTR DS:[D83080]
; kernel32.TlsSetValue
4. OD转存区,CTRL+G,弹出输入框,选VA/API项,输入D83784,红字警告“未知标识符”!
请教各位大大,这是怎么回事呀,我该怎么做才能找到IAT地址呀???
顺便问一句,是不是IAT的开始地址和结束地址一般都是以00 00 00 00 做界定呀?
多谢指点,期盼早日,哦,不,早秒解决!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!