20145319 《网络渗透》免考—逆向脱壳技术

20145319 《网络渗透》免考—脱壳技术

概述

  • 本次实验主要是展示了如何通过ollydbg依照esp定律来实现逆向脱壳
  • 工具:ollydbg
  • 环境:windows xp
  • 原理:堆栈平衡原理

实验内容

概述

  • 在讲过了众多恶意代码“瞒天过海”的种种手段之后,在学习的最后,还是学点正能量的技术吧,在最后,要学习的就是在面对恶意代码的“重重堡垒”——壳的时候,如何抽丝剥茧找到其中的蛛丝马迹

ESP定律

  • 原理: 从一定意义上来说,ESP定律就是“堆栈平衡”原理,我们可以把壳假设为一个子程序,当壳把代码解压前和解压后,他也必须遵循堆栈平衡的原理,解压前,壳会先将当前寄存器内容压栈,所以相对,在解压后,会将之前的寄存器值出栈,当硬件访问断点之后。当程序要通过堆栈访问这些值,从而恢复原来寄存器的值,跳转到正确的OEP位置

  • 首先我们使用peid打开查看加壳方式

  • 使用ollydbg打开,打开后会弹出错误提示框,我们选择确定继续打开

  • 我们不断的单步执行,直到ESP的值变成红色

  • 此时我们可以看到esp的值为xxx,我们对这个值选择“数据窗口中跟随”,可以再数据窗口中看到如下内容,先择窗口中前四个字节,右键选择“断点”,“硬件访问”,“双字”

  • 接下来运行程序,Ollydbg就会在0x00401190处停下来,而此处就是我们的OEP的位置

  • 在我们找到的oep位置进行“dump debugged process”操作,导入表我们之后还会着重修复,记下“Modify”后的内容,也就是“1190”,这就是OEP的位置

  • 接下来我们使用importREC来修复我们的导入表,首先在其中选择附加到我们正修复的进程

  • 将oep的值修改成我们之前所记下的modify后的内容,1190,尝试搜寻导入地址表信息

  • 通过IAT获得输入信息,如图显示,其输入表信息一切正常,我们将其转存到我们之前dump出来的程序之后,我们的脱壳工作到此就全部完成了

  • 此时我们再通过PEID来对脱壳后的文件扫描,发现壳已经被脱掉了

其他

  • 通过对于堆栈平衡的原理上来说还有一些其他衍生出来的手法,例如,当我们使用ollydbg打开加壳程序的时候,经常会发现pushad指令出现,那么按照堆栈平衡原理上来说,我们只需要在程序中搜索popad指令,那么oep就一定在其中的一个popad的附近,找到oep,通过olldbg dump将其dump出来,不过这种方法只局限于几种壳,且效率也不高,因此仅仅作为一种参考

posted on 2017-06-18 12:50  20145319钟轲  阅读(353)  评论(0编辑  收藏  举报