zoukankan      html  css  js  c++  java
  • 脱壳->内存断点法脱壳

    内存断点法,脱壳详解

    一丶内存断点方法

    1.何为内存断点法,以及原理

    内存断点就是在内存上下断点,然后进行下断.进而寻得我们脱壳位置处代码

    脱壳和内存断点有啥关系

    首先我们要明白一个壳, 常见的壳都是 先保存寄存器 保存OEP等.最后 跳转到OEP 也就是入口点去执行代码

    注意,跳转的方式很多种,只要能修改EIP即可.或者RIP. 例如 push + ret方法 jmp方法等

    既然明白了会保存我们的寄存器以及恢复我们的寄存器,那么就可以使用 ESP定律来进行脱壳了

    但是这里是另一种方法

    壳会读取内存,那么我们就在内存上设置读取断点 而后读完之后最后会将数据写入到入口点(也就是Imagebase)所对应的节中,也就是 (Text)节.所以可以在 Text节上下一个内存写入断点

    操作方法如下:

    1.在 资源节或者 .data节中下内存访问断点(一次性)

    2.shift + F9 进行执行代码,此时会断在访问数据的位置

    3.继续切换到内存窗口 (Alt+ M) 在Text节上面设置一次性内存写入断点

    4.shift + F9 进行执行

    注意,在进行操作的时候,请务必讲异常进行忽略,以X64为例子

    选型->设置->异常->添加区间

    二丶内存断点实战演练

    • 跳转到壳入口点

    • Alt + M 切换到内存窗口,并且在资源节或者数据节上下一个内存访问断点,一次性的

    • shift + F9 无视异常进行执行

    会断在访问资源的地方

    • 继续ALT + M 跳转到内存窗口,在.Text节上下内存写入断点一次性,如果是内存访问那么距离特征地址会很远

    断下之后查看特征可以看到一个 popad push + Ret组合, 在最下边的RET位置选中,按F4 让代码执行到RET 此时单步一次,RET返回的位置就是OEP了

    只有当你F4到RET位置,push 0才会变成一个原始的OEP地址压入堆栈,否则就是如上还是push0

    单步即可到达OEP位置

    三丶OEP位置脱壳

    关于脱壳已经讲过了,请查看如下文章

    https://www.cnblogs.com/iBinary/p/12628176.html

  • 相关阅读:
    Codeforces Round #161 (Div. 2)
    Codeforces Round #160 (Div. 2)
    Codeforces Round #159 (Div. 2)
    Codeforces Round #157 (Div. 2)
    世界树的考验「NOIP多校联考 2019」
    最大异或和
    腿部挂件「NOIP多校联考 2019」
    玩具取名「HAOI2008」
    涂色「CQOI2007」
    唱、跳、rap 和篮球「TJOI2019」
  • 原文地址:https://www.cnblogs.com/iBinary/p/12679527.html
Copyright © 2011-2022 走看看