《手脱实现双进程标准保护ArmaDillo壳.pdf》由会员分享,可在线阅读,更多相关《手脱实现双进程标准保护ArmaDillo壳.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 穿山甲壳的一个重要特点就是:寻找 OEP 本身不难,但 Armadillo 会对 IAT 进行加密处理,导致后面 dump 出的内容无效,因此寻找 OEP 之前,需要绕过 IAT 的加密处理,以后 dump 后才能方便地用 ImpRec 修复。程序名为 notepad.exe,运行后有两个 notepad.exe 进程。原理大概是互相通过一个 Mutex来通讯检测对方是否存在。OD 中可以通过手动汇编的方式进行双变单。此样本运行后有两个进程。双进程保护。1 OD 加载程序,对 OpenMutexA 函数下断,F9 运行 2 观察栈 3 手动汇编,使进程由双变单 Ctrl+G 定位到 0040
2、1000 地址,手动输入汇编代码:Pushad Pushfd Push 0012FDD8 Xor eax,eax Push eax Push eax Call CreateMutexA Popfd Popad Jmp OpenMutexA 截图如下:然后在 00401000 出 新建 EIP,程序从此处运行 Jmp OpenMutexA 处跳到 OPenMutexA 函数处 取消 OpenMutex 断点,消除 00401000 处修改的代码,恢复原状 接下来在系统空间内对 GetModuleHandleA 函数下硬件执行断点 He api F9 1 次:0012E79C 77C079B2 /
3、CALL 到 GetModuleHandleA 来自 77C079AC 0012E7A0 77BE31BC pModule=kernel32.dll F9 2 次:0012E61C 74683C4E /CALL 到 GetModuleHandleA 来自 MSCTF.74683C48 0012E620 0012E624 pModule=C:WINDOWSsystem32ntdll.dll F9 3 次:0012E624 74683C4E /CALL 到 GetModuleHandleA 来自 MSCTF.74683C48 0012E628 0012E62C pModule=C:WINDOWSs
4、ystem32imm32.dll F9 4 次:0012E570 74683C4E /CALL 到 GetModuleHandleA 来自 MSCTF.74683C48 0012E574 0012E578 pModule=C:WINDOWSsystem32KERNEL32 F9 5 次:0012ECFC 7365D4BA /CALL 到 GetModuleHandleA 来自 msctfime.7365D4B4 0012ED00 0012ED04 pModule=C:WINDOWSsystem32ntdll.dll F9 6 次:0012EE64 5D175324 /CALL 到 GetMod
5、uleHandleA 来自 5D17531E 0012EE68 5D175370 pModule=kernel32.dll F9 7 次:0012EF24 77F45CD0 /CALL 到 GetModuleHandleA 来自 77F45CCA 0012EF28 77F4501C pModule=KERNEL32.DLL F9 8 次:0012F73C 00433EF3 /CALL 到 GetModuleHandleA 来自 练习用 NO.00433EED 0012F740 00000000 pModule=NULL F9 9 次:(时间稍长)00129528 00BB6DF3 /CALL
6、到 GetModuleHandleA 来自 00BB6DED 0012952C 00BCBC1C pModule=kernel32.dll 00129530 00BCCEC4 ASCII VirtualAlloc F9 10 次:00129528 00BB6E10 /CALL 到 GetModuleHandleA 来自 00BB6E0A 0012952C 00BCBC1C pModule=kernel32.dll 00129530 00BCCEB8 ASCII VirtualFree F9 11 次:0012928C 00BA5CE1 /CALL 到 GetModuleHandleA 来自 0
7、0BA5CDB 00129290 001293DC pModule=kernel32.dll Ok Alt+F9 回到程序领空 以下寻找 OEP 有两种方法 一是 修改 jmp 后往下跟,直到找到下图 jmp+salc 是对 IAT 加密结束的标志,在 jmp 处下断,Shift+F9 运行,断在这儿。回到上面,把 jmp 的改动恢复成 je。至此 IAT 加密被绕过了。下一步:清除 GetModuleHandleA 断点后下断 he CreateThread,Shift+F9 运行一次,断后 Alt+F9返回 F8 走下去 一直到 Call ecx 即可到达 OEP 另外一种方法是:从 Ge
8、tModuleHandleA 返回程序领空后,将 je 修改为 jmp 去掉 GetModuleHandleA 的硬件执行断点 然后 alt+M 打开内存面板 对 00401000 处下 内存访问断点,F9 运行到达 OEP 附近:F8 往下走吧 没多少步就到达 Call Ecx 了 ,Ecx 中的地址即为 OEP F7 单步进入到达 OEP:接下来就是 dump,修复导入表了 Dump 的时候最好不好用 OD 插件 否则很可能会卡死 Dump 使用 LordPE 软件,选中进程后右键选择“完全脱壳”,即可完整 dump 然后使用 ImportREC 修复导入表 无效链接的处理办法:选择一个无效的指针,右键单击 选择“剪切指针”命令 去掉所有的无效指针!最后修复 dump.exe 文件 双击记事本程序 可以运行 大功告成!