免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
工具下载:
链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3
提取码:6tw3
复制这段内容后打开百度网盘手机App,操作更方便哦
上一个内容:17.x86游戏实战-深剖堆栈
这里说一句OD代码区翻页的快捷键:减号
这里说的翻页的意思是,当打了断点按了ctrl+f9它会来到调用函数的位置,这时如果想回到按ctrl+f9之前的位置就按键盘上的减号键
现在游戏的名字叫染指樱
然后打开CE,点击下图红框位置附加到游戏
然后搜索名字,下图红框位置,如果名字搜不到,那么就取消勾选重新再搜一次试试
搜索名字,搜出了35个
全部选择,然后点击下图红框位置的红色箭头
然后选中一般,鼠标右击选择修改数值
现在改成3333
改完游戏中没反应,继续选择另一半,最终找到了名字,改名字的时候,游戏可能会闪退,重新启动,重新使用CE搜一次就好,下图就是游戏闪退重新搜的
然后现在找到了名字,但是这个地址没法用,游戏重启之后地址就会变,所以打开OD找它的基址,打开OD并附加到游戏之后,先鼠标左键单机一下内存区,然后按ctrl+g键,弹出弹框输入刚刚使用CE找出来的名字的地址,然后点确认
然后就可以看到44444的编码了,4的编码是34
然后鼠标右键单机名字的地址,然后选择硬件访问断点、byte,如下图选中的
单击完byte之后它就会卡主,这说明这段代码访问了名字,下图的代码基址没法找(对于新手不友好,所以不看它,现在只知道这段代码没法找名字基址就好)
然后游戏中访问名字的代码不可能只有一段,按F9或单击下图的运行
多按基础F9就会来到下图位置,这里的代码找名字基址就会很简单,所以就从它开始找基址
然后现在找到追名字基址的位置了,先把刚开始下的硬件访问断点关掉(为了防止莫名其妙断下来)
点击下图红框位置
然后点删除,然后点确定
然后开始追名字基址
首先代码是执行完下图红框的代码断下来的
然后eax的值是名字的地址,所以接下来查看eax的值是从哪来的
然后看到eax的值是从ebp+8位置得到的,ebp+8这样的写法是函数的参数,上一个内容中有例子
所以按ctrl+f9来到调用当前函数的地方,下图红框位置就是调用的上图函数
然后接下来看这个函数的入参,也就是看调用函数之前push的什么东西,然后它push的是eax
所以还是要看eax的值哪来的,下图红框是eax最近一次赋值,为了确认是不是0x1AB7CDC
直接在je后面打断点,也就是下图红框位置打断点,je指令与test指令配合意思是看eax的值是不是0,如果是0就跳转,如果能下下图红框位置断下来0x1AB7CDC就跑不了了,它就是名字基址了,打完断点按f9
然后在这断了下来
然后按F8单步运行,可以看到eax的现在也是名字,所以名字的基址计算是[[0x1AB7CDC]+0x258]
这里可以使用OD带的一个功能确认[[0x1AB7CDC]+0x258]的值,如下图红框,输入db [[0x1AB7CDC]+0x258]然后按回车键(Enter键)就可以看到了,然后 db [[0x1AB7CDC]+0x258]里的db是一个数据类型,db是让内存以1字节数据类型方式展示,上图的内存显示是dd类型4字节类型
然后到这名字的基址就找到了
然后除了db类型Windows有多种数据类型,如下图,下图是从微软官方截的图
网址:https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debuggercmds/d--da--db--dc--dd--dd--df--dp--dq--du--dw--dw--dyb--dyd--display-memor