首页
社区
课程
招聘
我研发的一种菜鸟游戏补丁方案~
发表于: 2007-1-7 04:47 5120

我研发的一种菜鸟游戏补丁方案~

2007-1-7 04:47
5120
此方案的核心思想是"断点".我们知道游戏运行的时候,跑到某个断点就必然意味着游戏世界里发生了某件事情,比如某个断点的EAX里装的是HDC,我就可以把它断下来,然后自己调用字符输出API.
首先利用debug api编制一个小工具.它也是方案中最复杂的一个东西.但它的功能却是很简单.在游戏启动的时候,它根据断点地址表依次设置各个断点,为了让断点数量不受限制,我采用CC断点而不是硬件断点,这增加了复杂性,我在上面折腾了N久才最终调试通过.
所有的断点布置好以后,它就把控制权交给游戏,自己在后台静静等待那一个个断点异常的到来.当收到一个断点后,它完成一些必要的工作后,最关键的就是修改EIP了,这样我们就完成了游戏流程的强制调转功能.所以这个工具可以称为"跳转器"吧,哈哈
为了配合跳转器,必须要修改游戏的原始EXE文件,用编辑器给它增加两个附加段.一个代码一个数据,用来放我们自己的代码和数据.而这两个附加段里的东西,就只能靠用OD来手工硬编码,这活儿可真不是人干的,搞的人晕头转向几乎要吐血.于是我又考虑做一个DLL来装复杂一点的代码.只有体验过硬编码的人才知道回到编译器世界的感觉有多爽了~
那么DLL又怎么挂在游戏进程中去呢,我采用的是修改游戏EXE入口点,游戏一启动先立马跳到我的附加代码段中,在这里用LoadLibary载入DLL.然后取函数地址保存在附加数据段中备用.这样我的DLL就完全成了游戏的一部分,可以尽情为所欲为...~
就这样,断点->跳转器->附加硬编码保护现场->DLL工作函数->返回硬编码恢复现场->返回游戏.
现在试验基本上成功了,只是这种方案实施起来实在叫人晕头转向的,从上面的流程就看出来,要几种工具协同配合,还要非常小心,稍不注意就乱套了.
但是这种菜鸟补丁方案的功能自我感觉还是挺强大的,它可以让我不用去仔细分析那浩瀚的游戏代码,反正随便找到一个断点,就可以干出很多有趣的事情了.太爽啦~~HOHO~~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
完全不懂~
2007-1-7 05:33
0
雪    币: 242
活跃值: (14)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
不错的想法

不过鄙人看来有以下问题
1)从你的做法来看,此方法仅仅对没做任何防护的游戏有用。但现在恐怕稍微能吸引人的游戏都会有保护措施,直接修改原文件基本上不可那。
2)断点从何得到?代码分析应该是必须得。
3)既然你能写CC下断点,那么完全可以通过inline hook 来实现同样的功能,而且更简单实现,还有必要这么绕圈子吗?
2007-1-7 05:33
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
...破解者基本技能..
2007-1-7 05:35
0
雪    币: 191
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
有些游戏自带启动主游戏程序前
1.检测所有文件的原始性 如果不原始 直接删除此文件 然后到服务器下载
2.更新NP 启动NP
3.运行真正的主游戏程序

这样 你的方法就不行了
此时只好用“全局消息钩子(WH_GETMESSAGE)”进入游戏进程 因为NP限制了“OpenProcess、ReadProcessMemoery及WriteProcessMemory这些函数”

还是用注入法求得基址 最后做成内存补丁的形式 因为不能破坏原有EXE

至于NP下的调试。。。是另一个话题
2007-1-7 14:54
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
断点监视法  我以前做过 监视封包明文
2007-1-7 17:55
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
7
我想搂主讨论的是单机游戏吧?就算不是单机游戏,这个思路也一般在单机游戏上使用,下面怎么越说越跑题,见到游戏必谈NP呢?难道这就是鲁迅先生说的从白衬衣联想到私生子?  
2007-1-7 18:15
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
8
菜鸟不如从系统dll做补丁爽.
比如kernel32.dll,ntdll.dll

ntoskrl.exe也是不错的内核补丁对象

这才是一劳永逸的方法...
2007-1-7 18:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
8楼的老大说得对,是个古董单机游戏,其实就是帝国时代.我是铁了心要和它耗上了,好在它一点都没有任何保护什么的.就象一位脱光光的美女..哈哈哈哈,实在菜鸟我瞎折腾的最佳对象,嘿嘿

同时搞这些纯粹也只是为了好玩,我觉得乐趣比当初沉迷在游戏里面还要大.所以我觉得一个人要克服游戏上瘾,最好的办法就是把游戏拿来解剖研究.哈哈

这样饶了一个大圈子是比较麻烦,是个非常笨的办法.但我觉得反正有效就行了,至于hook什么的,实施起来也比较复杂,而且可能还没这么灵活.

比如我想加入一段代码,它每隔"游戏时间"的一秒就执行一次,游戏中有很多断点都符合这个需要,随便抓一个就是了.不需要去分析游戏的时间系统~.
2007-1-7 19:28
0
游客
登录 | 注册 方可回帖
返回
//