首页
社区
课程
招聘
[分享]致菜鸟: OD里SHIFT+F4条件断点用法篇
发表于: 2005-8-24 20:25 38063

[分享]致菜鸟: OD里SHIFT+F4条件断点用法篇

pjb 活跃值
1
2005-8-24 20:25
38063
高手就不必看了~,若有错误的地方请指正!

先说一点  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]==的数值,一个个试啦

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 442
活跃值: (1216)
能力值: ( LV12,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
支持,还是贴图直观,有写好的没有?我来帮你贴.
2005-8-24 20:29
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
支持
2005-8-24 20:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
usa
4
最初由 pjb 发布
高手就不必看了~,若有错误的地方请指正!

由于贴不了图就直接说吧~

先说一点 ALT+L 看记录~
........

SHIFT+F4条件断点有什么作用?楼主能不能以一个具体的例子来讲解一下在破解中是怎么利用SHIFT+F4条件断点的吗? 谢谢!
2005-8-24 20:55
0
雪    币: 242
活跃值: (163)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
这个正需要的谢谢的说
2005-8-25 09:25
0
雪    币: 5696
活跃值: (2542)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
贴图出来,要不然看不懂.
2005-8-25 10:18
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最好有实例讲解,否则看了之后还是不明白.
2005-8-25 10:20
0
雪    币: 267
活跃值: (44)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
8
支持,学习中
如果有实例就更好了。。。
2005-8-25 12:03
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
9
好极了!!!
2005-8-25 12:38
0
雪    币: 215
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
收藏。。。。
2005-8-25 14:10
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
问一下楼主,如果我想同时记录两个表达式的值
怎么做?
2005-8-25 14:18
0
雪    币: 214
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
说得不太清楚,要是能多举几个 不同的实例 来说明,就更易明白了.
2005-8-25 14:46
0
雪    币: 200
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
最初由 阵雨 发布
问一下楼主,如果我想同时记录两个表达式的值
怎么做?


其他行再搞个条件记录中断啊.每搞一个就记录一种表达~

好象这个功能一条语句只能记录一个表达.
2005-8-25 15:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
还是很迷茫,能不能举个例子,我菜
2005-8-25 15:09
0
雪    币: 208
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好东西支持!!
收藏了!
2005-8-25 15:57
0
雪    币: 10500
活跃值: (2159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
哈哈 好文章讲得好 简直就是消息断点嘛
2005-8-25 15:59
0
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
一直没有见到OD的这么详细的条件断点设置教程,今天如愿了,感谢中......
2005-8-25 19:29
0
雪    币: 213
活跃值: (96)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
有OD帮助还要看这个帖子?真奇怪
2005-8-25 23:20
0
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
最初由 云重 发布
有OD帮助还要看这个帖子?真奇怪


“  高手就不必看了~,若有错误的地方请指正!  ”

2005-8-26 00:05
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
20
GOOD!
2005-8-26 14:05
0
雪    币: 216
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
最初由 pjb 发布


其他行再搞个条件记录中断啊.每搞一个就记录一种表达~

好象这个功能一条语句只能记录一个表达.


我的意思是能够像记录函数参数那样把自己定义的多个表达式一起记录下来,
你这样也行,不过还是很不方便
2005-8-26 14:25
0
雪    币: 298
活跃值: (445)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
22
最初由 yunfeng 发布
7) "如果程序暂停,发动如下参数到插件中..."


即是中断时要执行的命令。和command中的命令一样

比如
d esp

就是在该条件断点断下时。。执行命令 d esp

这时我们可以在数据窗口看到esp中的数据。。如此而已。。。
2005-9-1 15:14
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
谢谢了!――
2005-9-1 20:26
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
24
偶也需要哦
2005-9-2 07:32
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
25
支持
2005-9-2 14:36
0
游客
登录 | 注册 方可回帖
返回
//