先说一点 ALT+L 看记录~
在某条语句上按了SHIFT+F4后出现了个对话框,
1)第一行是"条件": 要输入的确定是你感兴趣的条件啦,好比说下面的俩句
0041150 push eax
0041151 call [TranslateMessage]
你在0041150处下条件记录中断,假如这时候你要是想知道ESI等不等于0,那就能够设置条件 ESI==0 或ESI!=0 反正是关于ESI的条件了而不是只能利用这行的EAX. 固然同样能够在0041150处下断追消息,好比说你想知道按了 老鼠标移动消息,那么就设置 MSG==WM_MOUSEMOVE 或是 MSG==0200(移动的数字代码). 有人该问了,消息记录好象应该在下一行有函数的下断才正确吧?其实不必定非要在传递消息的那行0041151下断的,但在那行下断的好处是能够记录到函数参数,这在下面会讲到~
"条件"这的书写是按照 MASM32汇编的形式书写的,好比 == != > <
2)"说明"="表达"
"解码表达式的值"
"说明"就是个注释啦,添不添无所谓了,除非你下的记录中断比较多,这样在记录里能看的明白~
"表达"其实就是咱们记录的核心啦,程序在咱们第1小条里的"条件"为真的时候,就会记录咱们在"表达"里填的内容,好比说ESI==0的时候,咱们记录 [eax+4]的值
反正是你感兴趣的内容啦,如果想记录消息就添 MSG 啦,不少时候咱们只添了"条件"而没有添"表达",程序中断后就会显示"未知的函数或标识符!",这就是缘由了.
至于下面的"解码表达式的值"你能够随便选了,他不过是把记录后的数据又分析了一下, 好比说咱们记录了[eax+4]的值是 201 ,那么当你选"信息代码(WM_XXX)"的时候那么你在记录(ALT+L看记录)里看到的就是被分析成了 201 WM_LBUTTONDOWN
当你选"布尔数值",那么记录里数值201后面就会跟个 TRUE了,其实就是OD对这个数据按照咱们选择的类型又进行了一次分析而已~~
3)暂停程序 => 永不 条件知足时 永远
这三个选择就是条件为真记录表达的时候程序暂不暂停程序,那就看你调试的须要了~
4)记录表达式的值 => 永不 条件知足时 永远
呵呵,要是选"永不",那么咱们设立记录"表达"还有啥意义啊, 如果选"永远",那么条件彷佛不就没意义了,由于记录的时候已经无论条件了,只要运行到这就记录表达.不过好象也能够利用的,本身去想一想啦..我不说.
通常都是选"条件知足"啦.
5)记录函数参数 => 永不 条件知足时 永远
这个要是你下在没函数的那行,那么这行就变灰了~~ 记录函数的参数颇有意义啊,直接能够看到不少信息,咱们好比说在有函数的那行下条件记录."条件"是 EAX==0 "表达"是 [EAX+4],而后在这选择记录函数参数在"条件知足时";固然你若只想记录运行到此处的函数参数,那么就空着"条件"和"表达"吧,同时3)和4)的选择也要变为"永不"了...也许你在记录了啥也看不到,由于运行到这行可能EAX总不=0 ,那么好换换 EAX>0 ,好象看了到一堆,而后还有PMSG=XXXX Hw=XXXX,这就是运行到这里这个函数的参数啦~~ 咱们也能够记录 CREATFILEA 函数,那么就知道都打开什么文件了~~
6) "运行次数":0为无限次
7) "若是程序暂停,发动以下参数到插件中..."
我不会,我就会上面那些,但愿高手给补充一下,好让咱们这些菜鸟学学~~
注意一点: 咱们在OD菜单"查看"=>"窗口"里也能够用老鼠标右键给窗口过程下消息断点,下完后你能够用SHIFF_F4打开那个消息断点,发现它其实就是条件记录断点的一种形式而已~~~
举个例子吧:
好比说一个程序要求注册,点后出现一个注册窗口那么咱们就要对点注册按钮下断,看看它以后执行了什么~~
注册窗口若是是对话框,那么确定要用函数 CreatDialoParam或DialogBoxParam 若你对这俩函数都不了解的话,那就去看看书吧...首先用OD里的插件"窗口工具"得到注册按钮的标识(即ID),好比说是0422,记录下来备用啦~,
在OD里对这俩函数下断,而后执行程序,让注册窗口显示就会中断,OD里看堆栈,此函数的第4个参数pDlgProc就是对话框的过程入口了,这里是0041b0b0是入口
去对话框入口处,SHIFT+F4,在"条件"里输入 [ESP+8]==0111 && [ESP+C]==0422
"表达"能够空着,暂停程序在"条件知足时"
又该问了,为何这么写? 请记住: 因为是过程调用,确定要先向堆栈里压数据的,也就是标准说法:传递参数! 对于对话况过程或窗口过程,执行到入口处的时候堆栈内确定压入的是MSG消息结构的数据,那么 [ESP+8]正好是WM_xxx消息,因为点了按钮咱们确定要抓的是WM_COMMAND消息 也就是111啦,这个不明白去看书~ [ESP+C]是Wparam参数,就是窗口的ID号了,这个条件就是当你按下了ID为422的注册按钮的时候中断,接下来你就能够单步看了~~ 固然,你用窗口工具的时候也能看到按钮的子窗口句柄,这时候 {ESP+10]就是它的数值了,也同样能够代替 {ESP+C]==0422的条件了.其实都同样的,
友人该说了,不会用工具怎么办啊,那就直接在过程入口下SHIFT+F4啦,条件和表达都空着,只选记录函数参数,那么就能获得一堆记录了,找到显示有 WM_COMMAND的消息,把他的内容里的ID作为[ESP+C]==的数值,一个个试啦web