原贴地址:
http://bbs.pediy.com/showthread.php?t=44400
//////////////////////////以下为原文////////////////////////////////////////////////////////////////
主程序脱壳:
1、BP VirtualProtect 中断两次后ALT+F9返回:
引用:
0040EC6D FF15 10B84100 CALL DWORD PTR DS:[41B810] ; kernel32.VirtualProtect
0040EC73 8B15 E8B64100 MOV EDX,DWORD PTR DS:[41B6E8] ; 返回到这。[0041B6E8]=003E1F00,数据窗口中看003E1F00的内容,就是OEP:004011C6
0040EC79 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0040EC7C 0342 08 ADD EAX,DWORD PTR DS:[EDX+8] ; [EDX+8]=0000444C,0000444C就是输入表的RVA。这里就可以dump主程序了
0040EC7F 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX
0040EC82 C705 74B94100 0>MOV DWORD PTR DS:[41B974],0
0040EC8C 6A 00 PUSH 0
0040EC8E 68 B4AC4100 PUSH Packed.0041ACB4 ; ASCII "EXECUTABLE"
0040EC93 8B0D 70B94100 MOV ECX,DWORD PTR DS:[41B970] ; Packed.004000D8
0040EC99 51 PUSH ECX
0040EC9A 8B55 E8 MOV EDX,DWORD PTR SS:[EBP-18]
0040EC9D 52 PUSH EDX
0040EC9E 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]
0040ECA1 50 PUSH EAX
0040ECA2 E8 E9FAFFFF CALL Packed.0040E790
0040ECA7 83C4 14 ADD ESP,14
0040ECAA E8 B30F0000 CALL Packed.0040FC62
0040ECAF 25 FF000000 AND EAX,0FF
0040ECB4 85C0 TEST EAX,EAX
0040ECB6 74 15 JE SHORT Packed.0040ECCD
0040ECB8 E8 B60F0000 CALL Packed.0040FC73
0040ECBD 25 FF000000 AND EAX,0FF
0040ECC2 85C0 TEST EAX,EAX
0040ECC4 74 02 JE SHORT Packed.0040ECC8
0040ECC6 ^ EB F0 JMP SHORT Packed.0040ECB8
0040ECC8 E8 950F0000 CALL Packed.0040FC62
0040ECCD 68 14AD4100 PUSH Packed.0041AD14 ; ASCII "imm32.dll"
0040ECD2 FF15 7CB74100 CALL DWORD PTR DS:[41B77C] ; kernel32.GetModuleHandleA
堆栈中可以看到这样的内容:
引用:
0012FE44 00400220 Packed.00400220
0012FE48 00000001
0012FE4C 00000000
0012FE50 00000004
0012FE54 00407784 ASCII ".data"
0012FE58 7C93056D 返回到 ntdll.7C93056D 来自 ntdll.7C92EE02
0012FE5C 00400000 Packed.00400000
2、在 0012FE54 00407784 ASCII ".data" 这句上右键“数据窗口中跟随”,可以看到未加壳前原程序各个区段的名称及属性。
3、到上面所说的位置后不要关OD,保持原样,直接dump主程序按找到的内容参考修复。
///////////////////////////////////////////////////////////////////////////////////////////////////
捆邦文件能解了,反而主程序不能脱。
问题是这样的:方法1。按上面的 这里就可以dump主程序了 dump了后,按上面的OEP和RVA填入
Import REC的相应中,Import REC的IAT信息SIZE按默认的1000,改小了也不行,然而获取指针全是无效指针,把SIZE改成很小也不行,
方法2。查看--内存,在004011C6相应代码按F2设断,F9,停在入口位置,Dump程序,按上面的OEP和RVA填入Import REC的相应中,先自动查IAT,能查到,再获取,但还是有部分指针无效,删除后修复转储后主程序还是不能运行。。。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课