能力值:
( LV2,RANK:10 )
|
-
-
2 楼
我承认我没看懂。
|
能力值:
( 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 )就是基址
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
OD现在好像过不了一些游戏的保护,。,,都是用CE了
|
能力值:
( LV7,RANK:100 )
|
-
-
5 楼
找基址用CE比较方便,但OD也是可以的,基址就是静态地址
首先你要先确定某一内存数据,即血蓝XY什么的
然后看地址,基址就是固定在程序中的某一位置的地址,具体点就是data区段里的地址
通常来说刚开始找到的地址是动态的,即临时分配的内存中
这个时候需要在你找的地址上下读写断点
一般来说会断到形如“mov 寄存器1, [寄存器2 + 偏移]”的指令
接着去搜索"寄存器2"的值,看看有没有静态地址存放,如果没有,重复上述步骤,直到找到静态地址
好了就先说那么多吧
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
对不起大家 我觉得我还是没能表达明白自己的意思 用CE配合OD找基址我会的 但是我做不到仅仅用OD找到基址 顶多找到距离基址很接近的地方 然后断不下来 就没办法再继续回溯了 不知道自己差在哪里 还是需要什么方法么
另外我对于一个可执行程序在OD中的汇编代码整体感不强 追来追去发现有时候追回来了 求高手给点指点 怎样避免混乱 让我的对程序变成汇编代码后的脉络清晰一些
|
能力值:
( LV3,RANK:30 )
|
-
-
7 楼
先瞎跟,一般跟出感觉来,就离成功不远了
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
其实大家说的已经很好了 但是我确实还是没能说明自己的问题 我发个图吧 大家应该能明白我的困惑了
我只找到了这里 再往下找用CE一扫就出现基址了 但是如果不用CE还能不能找到基址呢 这里断不下来了 不知道该怎么找了 怎样才能找到形如[XXXXX]这样的基址呢
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
嗯,现在游戏修改用CE的比较多了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
继续向上跟,找到edx写入代码,我一般是做2个断点,然后第一个断点后开始RUN跟踪,第二个短点停下后就翻回去慢慢看,一般都可以找的到其实基址用CE找比用OD找好用,但找一些CALL的参数来源,CE就弄不出来,只能用OD。2个断点之间距离越短越好,可以在相邻2个返回之间设置断点,重复几次,基本就能找到所有需要的数据。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
我是一个新手 郁闷的是在追EDX的来源时 会遇到EBP+XX 或者ESP+XX的情况 这时候断不下来就没办法按照数值追了 感觉自己一到断不下来的地方就彻底没了脾气 没办法对付了 说实话 追了几次基址了 没有一个能用OD追到形如[XXXXX]这样的基址 打击很大的
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
EBP+XX一般是函数的参数,这情况你要去上一层去找,ESP+XX是临时变量,这时要看是哪里给这个变量赋的值
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
为什么一定要OD找呢,OD是找来源,一般新手建议用ce找,别专死胡同了
|
能力值:
( 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。一层一层跟上去,肯定能找到的。
|
能力值:
( 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,缩小跟踪范围。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
楼主,都说得很详细了。。。你主要的问题是不会跟踪【EBP+XX】 和 【ESP+XX】,前者是上一个CALL的参数,后者是一个临时变量。你只要搞懂了这两个问题,那么,找基址就很简单了。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
[QUOTE=流浪的猫猫;1316439]我是一个新手 郁闷的是在追EDX的来源时 会遇到EBP+XX 或者ESP+XX的情况 这时候断不下来就没办法按照数值追了 感觉自己一到断不下来的地方就彻底没了脾气 没办法对付了 说实话 追了几次基址了 没有一个能用OD追到形如[XXXXX]这样的基址 打击很大的[/QUOTE]
这个也可以跟的,EBP和ESP是堆栈指针,先把指针算出来,向上跟代码,查看压栈指令,当ESP数值等于该指针时的压栈,就是该参数传入的指令。
如果是多级指针,很可能在一个循环里都没有读基址的代码,因为读基址的代码在这之前已经运行了,把里面数据读到了下一级的指针,这个时候只用OD找比较麻烦,先找到2级指针传入的代码下断后,再找上一级的,可能还要重启程序。工作量太大,如果能CE找的到,只要是正确的,能用的就OK,何必管他是怎么来的呢。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
难道找基址不是用OD找吗 我还是第一次听说 CE有些结构能那么容易找出来吗?(二叉树 链表这些 递归)
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
找基址一般都是用CE找,实在找不到才用OD,一般好找的地址,用CE就足够了,就象在同一个市场买菜,从一个摊位走到另一个滩位,难道也要去发动汽车?这是找虐啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
谢谢大家的指点 虽然没能完全明白 但是也觉得受益不小 但是我现在在我发的截图这块断不下来 我是不是只能在前面能断下来的位置断下来一个点,然后再去给基质下个内存访问断点 然后观察两点之间的代码么 去寻找来源么 还有RUN跟踪是不是在断不下来的情况下自己根据代码一点点的往上追啊 这个需要专业的学习还是能自己通过反复的找慢慢的掌握啊
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
这些是不是能断下来才可以准确的回溯啊 ,但是我真正的难题是断不下来在这里 ,马上就要到基质了, 我断不下来才不会追了, 是不是像有位老师说的 ,必须需要RUN追踪啊
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
条件断点就能断下来了
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
虽然不知道在说什么,但是感觉好厉害的样子。
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
一般找来源是看lea,mov这2个汇编指令。
|
|
|