脱壳-两次内存断点法

  • 会飞的鱼
  • 1 Minutes
  • January 18, 2019

1.普通断点:原理是将所执行代码的当前地址的一个字节修改为CC(int3中断),当程序运行到int3的时候就会抛出异常,od捕获异常并处理,把这个异常的regEIP-1以后就正好停在了需要的中断的地方(这个根据系统不同会不一样),同时OD在把上面的int3修改回原来的代码

2.内存断点:分为内存访问断点和内存写入断点,通过对代码的保护属性来实现中断

3.内存断点的特点:程序在运行时有三种基本状态:读取,写入,执行

因为在内存读取和写入的时候都需要访问内存,所以内存访问断点可以断在读取,写入,执行中,若对执行状态下内存写入断点,则只能断在写入状态。

4.程序脱壳过程如图所示

加壳的程序运行时要先解压和解密原来的代码,这里可以看作为代码段(.text)的写入,解压之后从壳的jmp跳到oep的过程可以看作对代码段的执行。

两次断点法分别在.data或者.rsrc下内存访问断点,那么在中断时code段已经解压完毕了,这时在对code段下内存访问断点,就可以直接到达oep

学习链接:

https://blog.csdn.net/xingkongtianyuzhao/article/details/50628544?_t_t_t=0.27854063152335584

图片来源:恶意代码分析实战