VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 1352|回复: 2

[交流] 【经验】我是如何Hack一款单机游戏的

[复制链接]
47_avatar_middle
在线会员 发表于 2016-7-22 11:46:44 | 显示全部楼层 |阅读模式
【Miss丿小沫】荣誉出品,欢迎转载,请注明出处。
----------------------------------------------------------------------------------------------
最近玩一款游戏《泰拉瑞亚》,2D版的《我的世界》,话说这游戏有毒,毒瘾还不小。。。。

额。。程序员玩游戏就不能和普通人玩游戏一样了,玩游戏就有一种想做G的冲动【经验】我是如何Hack一款单机游戏的
额。。刚开始当然是用CE附加找基址了,找血值这么简单的事,大家应该都懂吧。
不出所料,血值是动态地址,那当然是一路追过去找他的基址啦。
【经验】我是如何Hack一款单机游戏的
就两个偏移,到了最后, mov eax,[033E3CBC]
本以为自己找到基址了,游戏就这么简单的被我Hack了,果断去写代码,写了一个锁血(Timer实现的)

但是。。。等我第二次玩的时候,基址他娘的变了!!!
那是一个假基址,还是我没有找到真的基址,我也不知道。。。

果断分析问题,又重开游戏,重复第一次找基址,发现每次都不一样,并且基址只有前三位会变,后几位固定不变。
发现这个规律之后,我以为是操作系统(WIN7随机基址)的问题(毕竟都已经mov eax,[XXXXXX]了),果断尝试CreateToolhelp32Snapshot + Module32First获取程序基址,
这样找了几组数据,每组数据,一个程序基址,一个血值的基址,我算偏移,发现两者的差每次都不一样,偏移不固定?
顿时陷入了困惑,这什么问题?没有办法了,怎么办?!
就在这时,灵光一闪!我们可以搜索特征码!直接填充 减血是的 sub 为NOP
这样还可以解决Timer实现锁血的不足(Timer总归还是有一个时间差的),
但是搜索特征码该从哪里开始呢?(这个问题我没有很好地解决,我把程序起始地址乘以一个常数作为开始地址的)
采用BYTE转CString利用Find函数查找特征码,从而获取减血地址处,然后NOP填充

但这样 速度很慢,搜索特征码速度真的很慢。
我想过找一个DLL地址+偏移的方式,但我遍历每一个DLL看他的地址都离sub位置好远。只能这么暴力查找这种会变的基址了。。。

哪位大神如果有更好的办法或者思路的话,请一定要告诉我啊!!!




上一篇:ODBC 存储/读取 图像数据 (VC2008代码)
下一篇:求大神指教
11_avatar_middle
online_vip 发表于 2016-7-30 22:46:50 | 显示全部楼层
晕倒  什么都是浮云  你加载的基地址 应该是在一个动态库里 因为他每次加载时不一样的DLL 地址  前面几位当然不一样了  方法是每次获取这个DLL 的加载新地址  然后加上偏移  试一下  应该是可以的了。。
47_avatar_middle
ico_lz  楼主| 发表于 2016-8-1 15:48:36 | 显示全部楼层
luduxin 发表于 2016-7-30 22:46
晕倒  什么都是浮云  你加载的基地址 应该是在一个动态库里 因为他每次加载时不一样的DLL 地址  前面几位当 ...

我也这么想过 试着找了几个 DLL 离目标地址都相差甚远 过去好长时间了 等有时间在看看吧
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-5-25 04:11

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表