手工脱壳练习

文章讲述了通过单步调试技术,如步入、步过和运行到光标处,结合ESP定律来寻找程序的原始入口点(OEP)。在调试过程中,关注jmp和call指令,利用堆栈平衡在解密后设置硬件断点,以及使用X64debug的插件进行IAT修复和Dump分析,以高效定位OEP。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单步调试跟踪

单步跟踪法的原理就是通过单步调试(步入、步过)和运行到光标处等功能,完整走过程序的自脱壳过 程,跳过一些循环恢复代码的片段,并用单步进入确保程序不会略过 OEP。

遵循的原则:

  1. 按 F8 单步向下,尽量实现向下的 jmp 跳转

  2. 会经常遇到大的循环,这时要多用 F4 来跳过循环

  3. 如果壳代码入口点不远处就是一个 call(近 call),尽量不要直接跳过,而是进入这个 call

  4. 一般跳转幅度大的 jmp 指令,都极有可能是跳转到了原程序入口点 (OEP)
    更据上述原则单步,到后面会发现触发关键字,popad并且看到一个大跳
    在这里插入图片描述
    这就是找到了oep

ESP定律

是脱壳的利器, 是应用频率最高的脱壳方法之一,它的原理在于利用程序中堆栈平衡来快速 找到 OEP。

由于在程序自解密或者自解压过程中,不少壳会先将当前寄存器状态压栈,如使用 pushad ,在解压结 束后会将之前的寄存器值出栈,如使用 popad 。因此在寄存器出栈时,往往程序代码被恢复,此时硬 件断点触发。然后在程序当前位置,只需要少许单步操作,就很容易到达正确的 OEP 位置。

  1. 程序刚载入开始 pushad/pushfd
  2. 将寄存器压栈后就在 ESP/RSP 寄存器所在地址处设硬件访问断点
  3. 运行程序,触发断点
    在这里插入图片描述
    在这里插入图片描述
    找到和上面一样的OEP点了

命令检索

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次找到OEP

Dump以及IAT修复

在这里插入图片描述
X64debug自带的插件
在这里插入图片描述
使用高级方法,找到重定位
在这里插入图片描述
然后点击确定,点击get imports,再点击fix dump
先后会在桌面生成
在这里插入图片描述
dump.exe和dump_scy.exe
在这里插入图片描述
勾选第四行
在这里插入图片描述
取消勾选第一行
然后保存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G_BEST

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值