脱壳基础知识入门之用内存断点找OEP
2007-01-15 16:44:16 来源:WEB开发网核心提示:1.前言发现论坛中很多兄弟在询问:什么是二次内存断点,三次内存断点,脱壳基础知识入门之用内存断点找OEP,还有很多人对内存断点的原理不是很明白,其实只要懂得壳是如何解压代码的,执行,004AE242A100104000moveax,dwordptrds:[004AE24C]//004AE24C处的内存读取004AE24
1.前言
发现论坛中很多兄弟在询问:什么是二次内存断点,三次内存断点。还有很多人对内存断点的原理不是很明白。其实只要懂得壳是如何解压代码的,那么就完全可以按自己的喜欢来下断。
本文要解决的问题是:
1.什么是内存断点?
2.如何在寻找OEP时使用内存断点。
3.内存断点的局限性。
2.内存断点寻找OEP的原理
i.首先,在OD中内存断点,硬件断点和普通断点(F2下断)是有本质区别的。硬件断点等效与SoftICE命令bpm,他的中断要用到DR0-DR7的调试寄存器,也就是说OD通过这些DR0-DR7的调试寄存器来判断是否断下。
普通断点(F2下断)等效于bpx,他是在所执行的的代码的当前地址的一个字节修改为CC(int3)。当程序运行到int3的时候就会产生一个异常,而这个异常将交给OD处理,把这个异常的regEIP-1以后就正好停在了需要的中断的地方(这个根据系统不同会不一样),同时OD在把上面的int3修改回原来的代码。
而内存断点基本上使用的是对代码使用的保护属性来实现中断。
内存断点分为:内存访问断点,内存写入断点。
我们知道,在程序运行的时候会有3种基本的状态产生:读取,写入,执行。
004AE242 A100104000 moveax,dwordptrds:[004AE24C] //004AE24C处的内存读取
004AE247 A300104000 movdwordptrds:[004AE24C],eax //004AE24C处的内存写入
004AE24C 83C001 addeax,1 //004AE24C处的内存执行
那么我们应该如何中断在上面的几行呢?
1.当我们对004AE24C下内存访问断点的时候,可以中断在004AE242也可以中断在004AE247。
更多精彩
赞助商链接