首页
社区
课程
招聘
[旧帖] OD OD 我怎么才能只用OD找到基址 0.00雪花
发表于: 2014-9-11 11:00 23921

[旧帖] OD OD 我怎么才能只用OD找到基址 0.00雪花

2014-9-11 11:00
23921
我是个新手,在找基址的时候能看懂小片的汇编代码,但是对整体彼此之间的联系弄得不清晰,说白了就是一个程序在OD下我搞不懂总体的脉络关系,只能看到眼前的汇编段依次往下追,经常出现追来追去是一个圈,又追回到了起始点,另外只用OD能不能追到基地址,我一个朋友说他自己百分之九十的基质全是只用OD追到的,而我如果是5级偏移的话拿OD只能追到4级就追不下去了,断不下来 ,所以就不会追了 ,怎么能改变这种情况呢,需要什么方法么。求高手们给点指点,感激不尽

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (23)
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我承认我没看懂。
2014-9-11 11:06
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你找到的血地址 下个硬件断点
然后会断到血的偏移处,比如esi+24c--找esi的值--ce搜索esi的值--对搜索出来的值下一个硬件内存断点 hr xxxxxxxx--然后dd [xxx+xxx]+24c看看指向的是不是血值的十六进制数--然后就是跟啊找啊跟啊找啊,全告诉你所需要打的字太多,而且如果你不会用od的话说了也白搭,先学习一些od的基本命令,给你一条路自己研究吧

或者:CE搜索到代码后,od attach上去,然后 Cmdbar里面输入 dd 动态地址
在内存里面下访问断点,或者其他可以自行选择,类似于CE的访问时记录下来。

中断后分析,由谁写入,逐渐往上推.最后找到基址 (Base+offset )就是基址
2014-9-11 11:07
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
OD现在好像过不了一些游戏的保护,。,,都是用CE了
2014-9-11 12:28
0
雪    币: 2153
活跃值: (740)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
找基址用CE比较方便,但OD也是可以的,基址就是静态地址
首先你要先确定某一内存数据,即血蓝XY什么的
然后看地址,基址就是固定在程序中的某一位置的地址,具体点就是data区段里的地址
通常来说刚开始找到的地址是动态的,即临时分配的内存中
这个时候需要在你找的地址上下读写断点
一般来说会断到形如“mov 寄存器1, [寄存器2 + 偏移]”的指令
接着去搜索"寄存器2"的值,看看有没有静态地址存放,如果没有,重复上述步骤,直到找到静态地址
好了就先说那么多吧
2014-9-11 12:42
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对不起大家  我觉得我还是没能表达明白自己的意思  用CE配合OD找基址我会的  但是我做不到仅仅用OD找到基址  顶多找到距离基址很接近的地方  然后断不下来  就没办法再继续回溯了  不知道自己差在哪里  还是需要什么方法么
另外我对于一个可执行程序在OD中的汇编代码整体感不强  追来追去发现有时候追回来了  求高手给点指点  怎样避免混乱 让我的对程序变成汇编代码后的脉络清晰一些
2014-9-11 18:35
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
先瞎跟,一般跟出感觉来,就离成功不远了
2014-9-11 19:05
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
其实大家说的已经很好了  但是我确实还是没能说明自己的问题  我发个图吧  大家应该能明白我的困惑了

我只找到了这里  再往下找用CE一扫就出现基址了   但是如果不用CE还能不能找到基址呢  这里断不下来了  不知道该怎么找了  怎样才能找到形如[XXXXX]这样的基址呢
上传的附件:
2014-9-11 19:18
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
嗯,现在游戏修改用CE的比较多了
2014-9-13 20:43
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
继续向上跟,找到edx写入代码,我一般是做2个断点,然后第一个断点后开始RUN跟踪,第二个短点停下后就翻回去慢慢看,一般都可以找的到其实基址用CE找比用OD找好用,但找一些CALL的参数来源,CE就弄不出来,只能用OD。2个断点之间距离越短越好,可以在相邻2个返回之间设置断点,重复几次,基本就能找到所有需要的数据。
2014-9-14 05:00
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我是一个新手  郁闷的是在追EDX的来源时  会遇到EBP+XX  或者ESP+XX的情况 这时候断不下来就没办法按照数值追了 感觉自己一到断不下来的地方就彻底没了脾气  没办法对付了 说实话 追了几次基址了  没有一个能用OD追到形如[XXXXX]这样的基址  打击很大的
2014-9-14 10:33
0
雪    币: 203
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
EBP+XX一般是函数的参数,这情况你要去上一层去找,ESP+XX是临时变量,这时要看是哪里给这个变量赋的值
2014-9-14 11:59
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
为什么一定要OD找呢,OD是找来源,一般新手建议用ce找,别专死胡同了
2014-9-14 14:10
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
[QUOTE=流浪的猫猫;1316439]我是一个新手  郁闷的是在追EDX的来源时  会遇到EBP+XX  或者ESP+XX的情况 这时候断不下来就没办法按照数值追了 感觉自己一到断不下来的地方就彻底没了脾气  没办法对付了 说实话 追了几次基址了  没有一个能用OD追到形如[XXXXX]这样的基址  打击很大的[/QUOTE]
你可以尝试用CE找到基址后,再在OD里面下个内存读取断点,断下后单步运行,看看它的代码,然后再尝试直接在OD跟代码找出那个。OD找参数RUN跟踪的使用很重要,这个基础一定要掌握。RUN跟踪后,察看刚才跟踪出来的代码,基本上可以找到所有参数的来源。如果找不到,一般就是跟踪的范围不对,很多参数是上一层CALL调用时传入基址,然后在当前的CALL里面根据基址读出来。先找一个已经知道了的基址,验证自己的方法和思路。RUN跟踪...是最重要的手段。我就是这样找的,至于有没有更好的办法,我就不知道了。

譬如,找当前EDX来源,就在当前下断(断点1),等下次断下的时候,返回一次,然后在上一层的CALL入口下一个断(段点2),有了这2个断点,程序运行的时候,是在断点2运行到断点1的,现在要做的就是跟踪断点2到断点1之间的代码,正常来说,一般可以找到EDX的来源。但很多时候,上一层CALL传给断点1的EDX数据,是一个变量而不是常量,这就要继续找上两层的CALL。一层一层跟上去,肯定能找到的。
2014-9-14 16:47
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
[QUOTE=流浪的猫猫;1315914]其实大家说的已经很好了  但是我确实还是没能说明自己的问题  我发个图吧  大家应该能明白我的困惑了
92130
我只找到了这里  再往下找用CE一扫就出现基址了   但是如果不用CE还能不能找到基址呢  这里断不下来了  不知道该怎么找了  怎样才能找到形如[XXXXX]这样的基址呢...[/QUOTE]

到了这步,可以在当前下断(断点1),然后在基址下一个读取断点(断点2),然后跟踪断点2到断点1之间的代码,看看程序读出基址后,是怎样把参数传到寄存器的。

再在断点1的第一个返回下一个断点3,如果程序运行时,断下的顺序是 3、2、1,这个时候,就可以跟踪断点3到断点1之间的代码,然后找出断点2,断点2就是基址读出代码,一切的根源.............关键是定位断点3,缩小跟踪范围。
2014-9-14 17:04
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
楼主,都说得很详细了。。。你主要的问题是不会跟踪【EBP+XX】 和 【ESP+XX】,前者是上一个CALL的参数,后者是一个临时变量。你只要搞懂了这两个问题,那么,找基址就很简单了。
2014-9-14 19:14
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
[QUOTE=流浪的猫猫;1316439]我是一个新手  郁闷的是在追EDX的来源时  会遇到EBP+XX  或者ESP+XX的情况 这时候断不下来就没办法按照数值追了 感觉自己一到断不下来的地方就彻底没了脾气  没办法对付了 说实话 追了几次基址了  没有一个能用OD追到形如[XXXXX]这样的基址  打击很大的[/QUOTE]

这个也可以跟的,EBP和ESP是堆栈指针,先把指针算出来,向上跟代码,查看压栈指令,当ESP数值等于该指针时的压栈,就是该参数传入的指令。
     如果是多级指针,很可能在一个循环里都没有读基址的代码,因为读基址的代码在这之前已经运行了,把里面数据读到了下一级的指针,这个时候只用OD找比较麻烦,先找到2级指针传入的代码下断后,再找上一级的,可能还要重启程序。工作量太大,如果能CE找的到,只要是正确的,能用的就OK,何必管他是怎么来的呢。
2014-9-15 02:25
0
雪    币: 68
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
难道找基址不是用OD找吗 我还是第一次听说 CE有些结构能那么容易找出来吗?(二叉树 链表这些 递归)
2014-9-15 02:43
0
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
找基址一般都是用CE找,实在找不到才用OD,一般好找的地址,用CE就足够了,就象在同一个市场买菜,从一个摊位走到另一个滩位,难道也要去发动汽车?这是找虐啊。
2014-9-15 04:18
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
谢谢大家的指点 虽然没能完全明白  但是也觉得受益不小  但是我现在在我发的截图这块断不下来   我是不是只能在前面能断下来的位置断下来一个点,然后再去给基质下个内存访问断点  然后观察两点之间的代码么 去寻找来源么  还有RUN跟踪是不是在断不下来的情况下自己根据代码一点点的往上追啊   这个需要专业的学习还是能自己通过反复的找慢慢的掌握啊
2014-9-15 13:47
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
这些是不是能断下来才可以准确的回溯啊  ,但是我真正的难题是断不下来在这里 ,马上就要到基质了, 我断不下来才不会追了, 是不是像有位老师说的  ,必须需要RUN追踪啊
2014-9-15 18:26
0
雪    币: 2670
活跃值: (2048)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
条件断点就能断下来了
2014-9-19 01:19
0
雪    币: 5
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
虽然不知道在说什么,但是感觉好厉害的样子。
2014-9-19 08:14
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
一般找来源是看lea,mov这2个汇编指令。
2015-1-29 23:08
0
游客
登录 | 注册 方可回帖
返回
//