首页
社区
课程
招聘
跪求高手指点用OD寻找游戏基址
发表于: 2014-8-22 19:13 15441

跪求高手指点用OD寻找游戏基址

2014-8-22 19:13
15441
求好心的高手大神指教下如何用OD寻找基址  自己在用OD寻找基址的过程中遇到好多汇编语句不知道再如何追下去   痛苦万分  在此跪求高手赐教  先在这里谢谢了  例如mov ebp,esp 这样的汇编语句  再往上追该怎么弄  自己觉得自己很混乱  缺乏经验  缺乏知识  如果大神能指点下什么书能帮助到我也行

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (13)
雪    币: 2
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
你得理解语句的语法, 之后去根据上下文判断目的. 你本来就不理解, 还要去试图做理解了之后才能做的事情, 当然会困惑.

放下手中的事情, 关了电脑, 买几本C和汇编的书看上一个月, 这是我的建议.
2014-8-22 19:33
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
按2F说的,看来我也得好好学习了。
2014-8-22 19:46
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢这位老师指点  如果mov ebp,esp之后  跳转到一个CALL中  陆续有几个POP和PUSH指令   我该怎么做  继续以ESP的内容作为寻找目标么  经过的POP和PUSH语句一律计算字节么  请您再教教我 感激不尽
2014-8-22 19:47
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的苦恼就是来自于这是个堆栈平衡语句  而跳入上一个call继续追  没有明确的mov lea 指令  这种情况是需要一路计算下去么
2014-8-22 19:55
0
雪    币: 459
活跃值: (349)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
OD 找基址,其实并不难,追数据的源头么,就是 esp+n 基本在上层CALL ,头部断下返回,继续跟,EBP+N 大都是 函数的局部变量,网上跟看看,反正找数据,从哪里跟丢的,就多注意看哪里,多搞几次,自然手到擒来,我没学过汇编,没看过书,反正就是找多了,这些就是经验之谈
2014-8-22 20:20
0
雪    币: 2
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
我不明白为什么进去个call就不知怎么找了.  没找过数据, 帮不了你了. 你说堆栈平衡, 通俗点就是还原esp嘛, c语言编译出来的代码都是会平衡堆栈的, 但是这不是强制的, 你完全可以不在函数内平衡堆栈, 只要用完把栈指针(esp)还原回去就行. 可能你看的不是常规的写法. 你可以用ida看看, 打开选项里的 stack pointer, 用法你可以写个简单的一系列push/pop的程序, 看看它列出的数字和栈指针的关系.

mov ebp, esp
保存的目的有两个, 一个是还原回去, 另个是方便用ebp引用堆栈上的数据.

push, pop
汇编写代码, 灵活性大, 可以不按规矩写, 但是要知道自己在干什么. 有时候一个函数内5个push, 2个pop, 你只要瞅着着栈指针(esp)就行了.
2014-8-22 21:08
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
喜欢您精辟的语句  朴实 实用  受教了  如果可以  让我做您的学生吧  再次感谢您的金玉良言
2014-8-22 23:36
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我在很多时候不知道该在哪里跳到上一层call  在哪里不需要跳  另外追esp  ebp时是不是就是追esp+n或者ebp+n的值的来源  正确的记录偏移方式的方法是什么   是直接拿esp+n或者 ebp+n取代  还是拿值取代
我总是自己弄来弄去就乱了  求指点下正确方式  越详细  越基本越好  再次谢谢指点我的各位老师
2014-8-23 16:00
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
$  55            push    ebp
0042C7D1   .  8BEC          mov     ebp, esp

dd [[[0012F7C8+8]+15c]+2c]+5578  esp里面的值为0012F7C8
追ebp的值追到了上面语句断下来 push ebp 语句在栈中可以跳转到上一层call

0042C7D0
上传的附件:
2014-8-23 16:13
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
到了这里 我该选择哪个值  该怎么追  依据是什么  我纠缠好几天了也没弄明白所以然  求大家指点下  该怎么弄
2014-8-23 16:15
0
雪    币: 2
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
12
我是个菜逼, 回帖讨论下, 你说的大概是这个意思? 你在游戏中找数据, 如果你找到这个数据了, 在函数a中. 他是ebp+n指向的, 按你的意思, 你是要找它的来源呀, 很大可能是参数传进来的, 于是你找栈中的上个return, 叫他funcB, 那你就需要在funcB中看看传进去的哪个参数是你在a函数中找到的ebp+n的值, 一个一个对比就错了, 这是有技巧的, 不难, 搞明白函数如何处理栈帧的, 栈帧就是栈, 叫个帧大概就像游戏帧一样, 对于函数来说, 它是"一块一块"的.

正确记录偏移
找基址, 通俗点, 是找偏移吧. 通常游戏数据都是个结构, 这个结构的地址通常又是动态申请的, 随机的地址, new, alloc什么的. 这怎么记录, 没法记录, 但是偏移可以记录, 比如+4的地方他永远是代表血量? 如果你是指这个偏移, 找法肯定是先得有基址, 具体我不懂, 但是你看一些源码, 很多结构的域都是unknow的, 他是根据程序如何处理这个值的方式来判断了, 你喝包100的血, 这值就加100, 那肯定就是了.

好像都用ce ?
2014-8-24 14:47
0
雪    币: 940
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
谢谢唱哥的解答  很专业  很有帮助  遗憾的是我把悬赏给出去了 对不起了 唱哥  再次感谢您热心的帮助  谢谢
2014-8-25 15:41
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
新手,目前还没能力帮到你。只能帮顶了。
2014-8-27 11:45
0
游客
登录 | 注册 方可回帖
返回
//