内存补丁的小应用-某游戏的辅助工具

近段在玩一个网络游戏,粗略的分析发现这个游戏的某些数据是可以在本地
内存中修改的。但游戏可能有某些检测,所以不能直接修改执行程序,否则
自动掉线。但可以通过ollydbg每次手工修改内存,使修改起作用。另外一个
方面,这个游戏版本更新比较频繁,即使对某个特定版本的客户端进行修改,
更新之后内存地址有会改变,比较麻烦,所以想写一个通用版本的自动修改
工具自己使用。

可行性:
观察发现,游戏版本更新与否,某处一小段汇编代码是不变的,大概他们没发现此处的
缺陷,从未修改。
我把这段代码叫做特征码:
00660B39    81EC 44040000  sub esp,444
...
00660B47    8983 4E0A0000  mov dword ptr ds:[ebx+A4E],eax

每次修改时,只要修改
00660B47    8983 4E0A0000  mov dword ptr ds:[ebx+A4E],eax
处ds:[ebx+A4E]所指向的内存中的数据即可.
但每次版本更新之后,这一小段特征代码的位置是变化的,
ds:[ebx+A4E]所指向的内存当然也是不一样的了。

所以,我的想法是:
1,扫描执行文件的.text段,确定特征码在执行程序中的位置。
2,通过pe信息,确定程序执行时特征代码的VA.
3, 利用DRx调试寄存器(如果用int 3设置断点程序会自动终止),在此VA设置断点,确定ds:[ebx+A4E]所指向的内存地址并保存。
4,遍历进程表,找出游戏执行文件的pid,保存到数组中(可能多开).然后分别打上内存补丁。

根据这么个思路,参考书上的代码写了这么一个小工具,见笑了。

by ikki [D.4s]



2005.6.25
附件:code.rar