千里冰封 发表于 2017-1-22 22:22

OD内存断点,硬件断点的使用请看【Shark恒百集教程第三季16,17课】

本帖最后由 千里冰封 于 2017-1-22 22:25 编辑

有矛有盾,逆向不费劲。【吾爱汇编论坛】{:5_124:}
帖子内容如题:OD内存断点,硬件断点的使用请看【Shark恒百集教程第三季16,17课】
{:5_194:}


OD 断点总结【汇总+转载】:
第一 寻常断点
Ollydbg中一般下中断的方法,就是在程序的地址处用鼠标选择这一行。然后按F2键,这时被选择的那一行的地址会变成别的颜色,就表示这个地址处下了中断。然后运行程序时只有到这个地址处就会被Ollydbg中断。
这个方法用的比较多,所以把他称作寻常断点。
如果有命令行插件,就可以在命令窗口中输入BPX xxxxxxxx 下断点。
优点:只要自己怀疑是重要的代码处都可以下这种下断点,不受条件的限制,所以方便实用。
缺点:如果不知道代码功能下断点具有盲目性。

   第二 API断点
Ollydbg中一般下API中断的方法,有二种。
1.在代码窗口中点鼠标右键,出现功能菜单。在[搜索]选择项下有〔当前模块的名称〕和〔全部模块的名称〕俩项,选择其中的一项就打开了程序调用API的窗口,在这个窗口中选择你要跟踪的API函数名。双击这个函数就能到程序的调用地址处。然后用F2下中断。也可以在API窗口中选择需要跟踪的函数点鼠标右键出现功能菜单,选择〔在每个参考设置断点〕。同样下了断点。                                    
快捷方式:Ctrl+N
2.在命令行窗口中输入BPXAPI函数名或者BPAPI函数名 后回车。这时出现了所有调用这个函数的地址的窗口,在这个窗口中可以看到调用这个API函数的地址已改变了颜色。说明下好了断点。
说明一下:BPX一般中断在程序调用API的地址处。BP会中断在API的写入地址处。二者有所不同,根据需要选择。
   优点:这种方法下的断点是针对每一个API函数的,所以具有明确的目的。
   缺点:关键的API函数不容易找到。所以有时下的断点没有作用。

       第三内存断点(跟踪关键数据的断点)
       Ollydbg中的内存断点相当于TRW中的bpm 断点。
下断点的方法是:在程序运行中断时选择界面中的内存窗口,用光标选择内存中的一段关键数据(颜色会改变),然后右击鼠标出现功能菜单。选择〔断点〕项,其中有二个选择〔内存访问〕和〔内存写入〕。
   【内存访问断点】是程序运行时,OD会设置被选择的地址访问权限为不可读, 任何试图读取该地址的操作都会引发异常,OD会捕获这个异常,中断 并等待用户处理 。 根据这个特点在逆向跟踪时只要在关键数据内存中下中断就可以知道程序在什么地方和什么时候用到了跟踪的数据。对于一些复杂算法和流程变态的算法跟踪有很大的帮助。从逆向上讲,一个注册码的生成一定是由一些关键数据或者原始数据计算来的。所以在内存中一定要用到这些关键数据。那么〔内存访问〕断点就是最好的中断方法。 【内存写入断点】是程序运行时,OD会设置被选择的地址访问权限为不可写, 任何试图写入该地址的操作都会引发异常,OD会捕获这个异常,中断 并等待用户处理 。根据这个特点在逆向时可以跟踪一个关键数据是什么时候生成的,生成的代码段在那个地方。所以一个关键的数据如果不知道他的由来就可以用〔内存写入〕断点查找计算的核心。
内存中断的下断点还有另外的一种方法:程序运行时如果知道关键的数据,比如我们输入的试验码、程序生成的序列号等。这时在内存中一定存在这些数据。用Alt+M打开内存窗口,在这个窗口中搜索知道的关键数据。用光标选择这些数据同样下内存中断,这种方法更容易找的关键的数据。
优点:断点是直接面向关键数据的,所以比较容易到核心部分。
缺点:内存断点重新运行后会消失,干扰比较多。
第四硬件断点(跟踪关键标志的断点) 硬件断点是Olldbg所特有的断点,他不会因为重新运行就销毁,只要不删除。跟踪这个程序时就有效。但他在98系统下会不起作用。
硬件断点是根据关键标志回逆到关键代码的好方法。下中断的方法和内存断点的方法相同,有三个方式〔硬件访问〕、〔硬件写入〕、〔硬件执行〕。一般用前2个。他也同样有内存断点的特性,所以可以用内存断点的地方也可以用硬件断点。(一般内存断点断在当前指令处, 硬件断点断在当前指令的下一条。)这里介绍利用硬件断点来跟踪注册标志的使用方法,一般软件的注册都用到了标志比较。即在内存地址中有一个标志,在判断是不是注册时比较标志的值。不同的值表示不同的注册状态。这个标志的地址一般比较固定。根据这个特点可以下硬件断点来跟踪标志位是什么地方被标志的。 方法:在内存窗口中选择到标志存放的内存地址处,然后选择标志值。下〔硬件写入〕中断(根据标志的字节下不同的长度)。重新运行程序你会发现Ollydbg会不断的中断在这个标志的内存地址处。在功能菜单的〔调试〕选项下选择〔硬件断点〕就打开了硬件断点的窗口,在这个窗口中选择〔跟踪〕,这时内存窗口就会来到被下中断的内存地址处。运行程序跟踪内存地址中的值就会知道被赋标志的代码,跟踪到计算的核心。〔硬件访问〕的使用可以知道程序在运行时多少地方用到了这个注册标志。对于逆向复杂效验的程序十分的有效。{:5_117:}

千里冰封 发表于 2017-1-22 23:27

自己顶一下,谢谢鲨鱼老大帮忙移动帖子到正确位置

叶良辰和赵总 发表于 2017-1-23 11:48

DEEMO 发表于 2017-2-10 16:42

感谢分享啊

289128110 发表于 2017-2-16 07:46

{:5_117:}真是够详细

金诚电脑 发表于 2017-2-16 10:12

感谢楼主感谢恒大{:5_116:}

haier8917 发表于 2017-2-16 10:39

首先感谢楼主带来的教程,此教程对新手肯定是很大的,但是
但是,这里我纠正下这的错误::::就是这句"【内存访问断点】是程序运行时,OD会设置被选择的地址访问权限为不可读, 任何试图读取该地址的操作都会引发异常",在这里大家要注意:::访问其实不仅仅是读,而且写也是访问,比如如下的这两段代码:
mov dword ptr ds:,eax    (把eax的值赋值给456789地址处,这是往内存中写入数据的指令,需要访问456789这个地址,对吧)
mov eax,dword ptr ds:    (把456789地址处的值赋值给eax,这是从内存中读取数据的指令,需要访问456789这个地址,对吧)
综上所述::::【内存访问断点】是程序运行时,OD会设置被选择的地址访问权限为不可访问,才对,看到这里有些人可能会迷茫::既然OD设置了内存访问断点呢,为什么还设置内存硬件断点,我是这样认为的:::OD设置内存访问断点的原因是比较全面,但是不管往下了断点的内存处地址写入,或者读出就断下,对于有部分程序,程序启动时OD就要不停的这样::
当写入地址时设置内存断点,F9后不久当读取地址时设置内存断点,然后F9后不久当读取地址时设置内存断点。。。。。。。。(很值得同情OD啊,但是有些时候我们除功能性暗装就要用这个访问断点,因为程序没注册就不触发暗装,注册就要触发暗装,注没注册他总要先判断,判断就要访问(但不是100%,因为有些是CALL判断的)),但是有些时候我们不关心程序从这个地址读取数据,我们只关心程序往这个地址写入数据,此时,下内存写入断点就是明智的选择,此时你如果还下内存访问断点,那你的OD就值得同情了   

pnccm 发表于 2017-2-16 10:50

不错,感谢分享

a1186494930 发表于 2017-2-16 11:49

感谢楼主分享。

ank 发表于 2017-2-16 12:02

我是觉得是不是可以考虑用x86/x64来讲解下?OD操作可能和那个不太一样,虽然界面很相似,操作方面或者按键不知道有没有相应的说明
页: [1] 2 3 4 5
查看完整版本: OD内存断点,硬件断点的使用请看【Shark恒百集教程第三季16,17课】