最后一次异常的原理和走出异常的方法及IAT的修复问题。

 

对于最后一次异常,在脱壳中用得挺多,但是对于为什么它能脱壳,以前还是有点疑问的。。。

 

首先,对于这种方法,我想应该从壳的角度出发来说说,壳通过某种方法,在程序运行之前,拿到控制权,

怎么样拿到它的控制权呢?

我想:应该是 INT 3 , 当然还有一些其他的方法,想一些 调试器的函数, SDK 和 WDK 里面可以去查到的,

最近开始设计一些驱动方面的东西,才知道ring 0 , 是多么的强大,哦,回到正题。。。

当中断下来之后。。

对程序的PE 进行处理,当然处理的方法很多,包括 压缩个节表的东西,对 IAT 处理,加入花指令,哦,花指令

大量的用于对 调试器的检查,pushaf ... popaf , 这是一组产生异常的常用的方法,当然方法很多。。

说了很多,当处理完之后的最后一次异常,壳将会把控制权交换给应用程序, OEP ,也就不远了。。。

说一下跑出异常的方法吧:

三种:  1: 当遇到 SEH 的异常时: 可以当开 view --> seh line ---> 在 seh 下断点,运行就跑出来了。。

2: 可以在 seh handle 出反汇编跟随,就会来到出口,在出口下段,记住此时的代码可能会乱序,这是

作者防止解密的行为,我们可以通过 shift + 箭头 来查看代码。。之后 ,shift + F9运行,就 O 了

注释:2中如果在在程序的领空,是不能在反汇编窗口跟随的。。。

3:在 ZwContion---> ecx + 0xb8 ---这就是异常的出口;

可以在 vc 中查看这个函数的用法:

如果我没有记错; ZwContion(void *);

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值