脱壳->内存断点法脱壳

内存断点法,脱壳详解

一丶内存断点方法

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

posted @ 2020-04-11 14:37  iBinary  阅读(611)  评论(0编辑  收藏  举报