假期学习脱壳技巧总结(一)

脱壳是破解逆向题目的必要过程,但是这一过程往往也是让人挠破头皮的又多又杂,别问我怎么知道的。
1.upx(压缩壳)
方法一:单步跟踪
使程序只执行向下跳转,不让向上跳,直到运行到popad处(和开始的pushad对应),后面的jmp大跳跳转到oep。
方法二:ESP定律法
pushad后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
断点—>硬件访问—>Word(命令:hr [ESP] )—>运行—>删除硬件断点—>F8到OEP。
方法三:一步直达法
根据pushad和popad成对出现性质 Ctrl+F查找命令(不勾选整个段)。
------------------------------------------------------------------------------------------------------------
2.ASPACK壳(压缩壳)
ASPack 2.12 -> Alexey Solodoynikoy

方法一:单步跟踪
使程序只执行向下跳转,不让向上跳,直到运行到popad处(和开始的pushad对应),后面的jmp大跳跳转到oep

方法二:ESP定律法
pushad后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
右键断点—>硬件访问—>Word(命令:hr [ESP] )—>运行—>删除硬件断点—>F8到OEP

方法三:2次内存镜像法
ALT+M(到程序段)—>在第一个.rsrc设置访问中断(F2)—>Shift+F9—>ALT+M(到程序段)—>在00401000设置访问中断(F2)—>Shift+F9—>向下运行几步便可以看到popad

方法四:一步直达法
根据pushad和popad成对出现性质 Ctrl+F查找命令(不勾选整个段,CTRL+L查找下一个)


NsPack壳
版本:nSPack 1.3 -> North Star/Liu Xing Ping
开始pushfd
方法一:ESP定律法
单步运行,发现ESP值变换
断点—>硬件访问—>Word(命令:hr [ESP] )—>运行(到达popfd)—>删除硬件断点—>F8到OEP

方法二:单步跟踪
使程序只执行向下跳转,不让向上跳,直到运行到popfd处(和开始的pushfd对应)

方法三:2次内存镜像法
ALT+M(到程序段)—>在00401000设置访问中断(F2)—>Shift+F9—>向下运行几步便可以看到popfd

方法五:模拟跟踪法
ALT+M(到程序段)查找包含SFX,imports,relocations的区段—>输入命令“tc eip<[地址]”—>到达OEP或者需要向下运行几步


FSG壳

FSG 2.0 -> bart/xt

方法一:单步跟踪
使程序只执行向下跳转,不让向上跳,直到运行到三个连续跳转处,其中jmp(无条件跳转)跳转之后即为OEP

方法二:ESP定律法
push后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
断点—>硬件访问—>Word(命令:hr [ESP] )—>运行—>删除硬件断点—>F8到OEP

方法三:FSG 2.0 专用ESP定律法
当执行到popad后一条代码时,查看堆栈窗口,第四条的数值即为OEP地址,反汇编窗口跟随,设置硬件断点,运行即可到OEP
——————————————————————————————————

PECompact壳

PECompact 2.x -> Jeremy Collake

方法1:单步跟踪
使程序只执行向下跳转,不让向上跳,当执行某些call程序出现时,咋则重新加载进入call单步跟踪,直到找到OEP

方法二:ESP定律法
push后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
断点—>硬件访问—>Word(命令:hr [ESP] )—>运行—>删除硬件断点—>F8到OEP

方法三:BP VirtualFree
命令添加断点(BP VirtualFree)—>Shift+F9—>取消断点—>返回到用户代码(Alt+F9)—>查找push 8000(特征码)并运行到此—>F8到OEP

方法四:BP VirtualFree
命令添加断点(BP VirtualFree)—>Shift+F9—>Shift+F9—>取消断点—>返回到用户代码(Alt+F9)—>F8到OEP

方法五:bp [开始mov的地址]
bp [开始mov的地址]—>Shift+F9—>在retn下面下断点—>Shift+F9—>F8到OEP

方法六:bp VirtualAlloc
命令添加断点(BP irtualAlloc)—>Shift+F9—>取消断点—>返回到用户代码(Alt+F9)—>向下拉看到JMP运行到这—>F8到OEP

方法七:最后一次异常法
选项—>调试设置—>异常—>忽略所有异常(取消所有勾)—>重新载入—>Shift+F9(直到程序跑飞,记录次数)—>重新载入—>Shift+F9(刚才记录的次数-1)—>堆栈窗口查找SE句柄—>CTRL+G—>堆栈窗口句柄对应的值(十六进制形式)—>在retn下面下断点—>Shift+F9—>F8到OEP。

有些技巧还没有记录进去,将会继续学习补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值