免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。
上一个内容:104.游戏安全项目-基址的技术原理-基址的本质
下图是火炬之光2游戏人物的血量地址
火炬之光2这个游戏里存储人物对象的结构是如下代码,是一个多级基址结构
class F{
人物 r;
}
class 人物{
int hp;
}
F* f;
int main(){
f = new F;
}
血量的偏移是560
可以看出搜索对象首地址,没有绿色高亮的数据
这种多级的逆向分析首先要确定在游戏中有什么位置会只访问人物对象或者访问人物对象并且访问其它少量的对象,如果一个位置会访问多个位置说明这个函数是通用性的会有很多层,会封装的很深找起来很费劲,比如通过减血量的代码找人物对象就会很费劲,火炬之光里使用的方式是通过把攻击者的对象传给一个函数然后攻击者里有一个变量表示的是攻击目标,找攻击目标在那赋值的就非常的费劲需要找很长时间,如果通过只访问人物对象的位置去找人物对象会变得很简单,比如通过显示血量的ui,下图红框位置
所以当遇到多级基址的情况要先考虑游戏中什么位置会访问人物对象并且除了人物对象不会访问其它的对象或者少量的其它对象,通过显示血量的ui找基址就是找什么访问了血量
然后找出了三个位置有访问人物对象,然后打开 Ollydbg 工具跟过去分析
然后很幸运第一个地址就满足了条件,这里只有一个人物对象
把它改为retn之后ui直接变成灰色的了,说明找对了位置
然后选择补丁
选择恢复原始代码,让它恢复
然后 ctrl + f9返回到上层
ecx的值来自于eax + 2c位置,eax是上一个函数的返回值
然后进入上一个函数中,发现了数字,数字就是全局变量,但是这里的数字是 游戏的基址加偏移的结果,所以用的时候需要用 27095F4 - 游戏的基址
当前游戏的基址是 220000,关联人物对象变量的偏移就是 27095F4 - 220000 = 24E95F4,然后再用 Torchlight2.exe+24E95F4 位置的值再加2c
然后使用 Cheat Engine 测试
当发现找一个地址很费劲的时候说明 有可能方向找错了,如果找对了方向会很容易