手脱UPX壳方法介绍

方法1:单步跟踪

F8单步跟踪,向上不能让他跳,有loopd循环也一样(跳转的下一行按F4:运行到选定位置,循环loopd在call下一句F4执行)

只允许向下跳,如单步跟踪CALL处程序运行,则需要重载程序,再CALL处F7跟进(近CALL F7,远CALL F8)

pushad 入栈 
popad:出栈 出栈就离OEP不远了
看基址如有大的跳转则为调到OEP,到达OEP后就壳脱壳
 
005791EE    61              popad
005791EF  - E9 98E1EFFF     jmp rmvbfix.0047738C
 
0047738C    55              push ebp
0047738D    8BEC            mov ebp,esp
0047738F    83C4 F0         add esp,-0x10
00477392    B8 2C714700     mov eax,rmvbfix.0047712C                 ; UNICODE "K"
找到OEP后下来就是脱壳,两种方法
1)OD插件OllyDump,
2)LordPE:选择进程->修正镜像大小并完整保存->运行ImportREC输入表重建程序,找进程,OEP改为找到的OPE基址,取后5位,然后自动查找IAT,获取输入表,修复转存文件
注:如遇到SRV病毒,需要脱壳后在导入OD分析,如下位SRV病毒OEP特点
00579080    60              pushad
00579081    BE 00104F00     mov esi,rmvbfix.004F1000
00579086    8DBE 0000F1FF   lea edi,dword ptr ds:[esi-0xF0000]
0057908C    57              push edi
0057908D    83CD FF         or ebp,-0x1
00579090    EB 10           jmp short rmvbfix.005790A2
方法2:ESP定律法
F8单步一下进入下一行,寄存器窗口ESP显示红色,ESP右键 数据窗口中跟随或命令 dd或hr ESP基址来到大跳转->在第一行数值 右键 断点-硬件访问断点 word->F9运行->删除硬件断点,单步直达OEP
dd XXXXX-->ESP地址
hr XXXXX-->ESP地址
 
方法3:2次内存镜像法
m:在区段的程序段.rsrc(第一个.rsrc)下断点,运行,然后在进入m在00401000在下断点运行,F8单步到popad->oep
注意:如在第一个程序区段无.rsrc,则直接在00401000(code)处下断点
 
方法4:一步直达法
不是什么壳都适用。绝大多数UPX和ASPACK
查找popad(取消勾选整个区块),单步到大跳转OEP,可多次查找popad
方法5.最后一次异常法
1.调试选项忽略所有异常

载入程序shift+F9运行知道程序运行跑飞,记下次数比如5次,则重新载入按5-1=4次,然后找到如下SE句柄,转到表达式,然后下断点并运行,取消断点然后单步跟踪


 

方法6.脱壳脚本

插件-》OdbgScript-运行脚本 打开脱壳脚本,直达OEP(不一定准确,不准时需继续单步)

发布了28 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/biao197/article/details/97818175