首页 > 其他 > 详细

脱壳->内存断点法脱壳

时间:2020-04-11 15:55:40      阅读:54      评论:0      收藏:0      [点我收藏+]

内存断点法,脱壳详解

一丶内存断点方法

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

脱壳->内存断点法脱壳

原文:https://www.cnblogs.com/iBinary/p/12679527.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!