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
图片来源:恶意代码分析实战