这一篇讲的是 内存断点

上一篇学习函数参考的时候最后破解是这样子的。

0040132D |. 3BC6 CMP  EAX, ESI ;比较EAX和ESI的内容;

而ESI和EAX的值是经过一个加密算法的出来的。这次就结合寻找ESI的值怎么来的和这个算法学习内存断点的使用。

继续上次的小软件将其拖进OD,使用刚学的函数参考在GetWindowTextA函数处下断。

F9运行断下在其附近找到ESI的赋值处。截图如下:


 由此可知ESI的数值是由内存(40339C)处传进来的。所以我们把注意力转到(40339C)内存地址处。我们可以在给ESI赋值的地方单击选中在信息框中就可以查看相应的信息我这里显示  DS:[0040339C]=11D5B80A

在这个时候这个内存地址的数据已经产生了。就是说加密算法已经完成并将结果付给了ESI。这样达不到我们目的我们要跟踪这个数值是怎么来的也就是40339C这块内存什么被写入了数据。故我们可以下内存断点。在程序开始往这个内存地址写东西的时候断下来,这样就可以知道这个数据怎么来的了。

内存断点 在OllyDBG中一般我们用到的内存断点有内存访问和内存写入断点。

内存访问断点就是指程序访问内存中我们指定的内存地址时中断,

内存写入断点就是指程序往我们指定的内存地址中写东西时中断

如何下内存断点:

首先得知道你要下载内存断点的那个内存地址这里即(40339C).找到它怎么找这么找

在OD下边的数据窗口单击激活该窗口再右击转到表达式也可以激活后直接Ctrl+G  在弹出的框中填写40339C这个地址确定即可

找到了内存地址处开始下内存断点在40339C 后边的HEX栏或者asc码栏选中四个字节

内存断点的特性就是不管你选几个字节,OllyDBG都会分配4096字节的内存区。这里我就选从40339C地址处开始的四个字节,主要是为了了解一下硬件断点的设法,因为硬件断点最多只能选4个字节。选中后右击断点内存写入即可

内存断点只在当前调试的进程中有效,就是说你如果重新载入程序的话内存断点就自动删除且内存断点每一时刻只能有一个。就是说不能像按F2键那样同时设置多个断点。现在按F9键让程序运行,OllyDBG中断了说明咱的那块4096大的内存写入了东西。如图:


注意到中断时的指令地址很大很大(很显然时系统领域)。。再看一下领空发现到了ntdll系统领空。此时我们再看一下我们跟踪的那个内存地址(一定要时时观察记住咱的目的)记着刚才的话内存断点OllyDBG 都会分配4096字节的内存区所有看多点,发现


40339C地址处确实写入了东西03. 而咱要的那个地址40339C 没有变化很好。此时内存断点木有什么用了删掉(好习惯)在反汇编的窗口右击断点删除内存断点即可 然后分析程序找40339C的来源。先把程序从系统领空返回到我们程序的领空Alt+F9返回到:

下图选中的那条指令:

 

向上翻翻(这也是习惯没事上看看下看看哈哈)发现返回的这里是上一篇我们分析的代码下边。

我们在0040140C  /$  60            PUSHAD 这一行F2下断

重新载入程序F9运行。程序断在这里开始分析。。。

xx学OD -- 内存断点(下)