首页
社区
课程
招聘
[讨论]对绕过主流游戏保护系统的研究和当前遇到的问题
发表于: 2015-3-8 15:32 25073

[讨论]对绕过主流游戏保护系统的研究和当前遇到的问题

2015-3-8 15:32
25073
本人做程序员很久了,但进入逆向行业的时间很短水平有限,朋友圈里找不到搞逆向的好朋友可以交流,独自一人摸索研究已有半年时间。无法确定研究的方向是否正确,研究是否有价值。把这半年研究的东西和遇到的问题写上来,望求看雪的技术大牛们给予指导批评。
       研究的对象不针对某一款网游,对象是所有网游。研究的东西很简单,就是读取游戏内存,找出想要的数值,然后做成游戏辅助。然而大部分网游都有保护系统,一些强大的可以读进程内存进行调试分析的工具,如Ollydbg、Cheat Eng等在保护系统的保护下无法使用。保护系统HOOK系统关键API,使依靠这些API的工具都无法使用,比如远程打开进程、远程读写内存、远程修改保护属性等等。这种情况下想要分析游戏,一是破解保护系统恢复保护系统的HOOK点。二是自写工具避免使用API。对于我这种小白来说破解保护系统恢复HOOK有点难,HOOK点的数量众多查找起来也没有头绪。于是我使用了第二种方法:自写工具尽量避免使用API。
       任务就这样变成了不调用或极少调用系统API来完成进程内存读取和分析。如果不调用ReadProcessMemory函数读取内存,可以使用汇编语言直接读取内存。那么就涉及到汇编代码写在哪里的问题。首先,读取代码一定要在进程的2GB用户模式内存地址空间里。在这个地址空间里包含了游戏主程序的代码和数据、游戏需要用到的其它动态库的代码和数据、还有一些系统提供的动态库。其次,读取代码一样要写在比较隐蔽的地方,这样不易被保护系统检查到。根据这两点,我选择把读取内存的汇编代码写在显卡驱动的用户模式动态库中,写在这里的好处是每款游戏都要调用这个库,这个动态库的版本也特别多,每个显卡厂商都会出不同版本的显卡驱动,保护系统很难分析这里的代码。另外这个库的层级比较深,它在D3D运行时的下一层,硬件显卡的上一层。
       确定了代码写在哪后,下一步就是怎么写入代码。我采用了直接修改PE文件的方式,根据《Windows PE权威指南》的介绍,我把PE文件结构封装成C++类,然后在类中加入新增代码段的功能,在显卡驱动用户模式动态库上加入一个新的代码段。根据微软设备与驱动程序文档:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff544519(v=vs.85).aspx对显卡用户层驱动的介绍,逆向找到pfnFlush函数的入口点(这个函数刷新提交游戏每帧的图像数据)。修改pfnFlush函数的入口点代码JMP到自己新增加的代码段中.在新增加代码段写入汇编完成读取整个进程内存的任务。然后把内存数据输出到硬盘文件中。为了能大量写入汇编代码,我用C++封装了汇编语言类,这个类会自动处理汇编语句在目标库中的动态重定位、函数定义、局部变量定义、行位置处理等等任务,分离复杂度使我可以往目标库中加入成规模的汇编代码,对没有源码的库进行改造。因为当时不了解动态重定位,也是在看雪论坛发问题贴,感谢看雪论坛的好朋友们给我提供了帮助。
       至此,已经获得了游戏进程的内存数据,并保存在硬盘文件中。获得的是游戏每帧完整内存数据。接下来开始分析内存,因为内存数据已经被保存成文件,所以分析工作没必要使用汇编语言,直接用C++分析。用定值对比、变化对比就可以找出需要数值的内存地址。
经过测试,这种方式可以绕过游戏保护系统。

目前遇到的问题是:
1.数值内存地址可以找到,但没法定位内存的基地址。在辅助程序中访问这个内存,就要知道这个内存的基地址+偏移。我采用的解决办法是查找目标数据周边的特征码,根据特征定位。很期待大牛能指导我如何直接找到基地址定位。
2.可以找到每帧发生过变化的,或是知道内存值是多少的内存。无法找到没发生变化又不知道具体值是多少的内存。(这是重点问题,卡这这问题上好久了,现在几乎都要放弃)

请问看雪大牛们,遇到的这两个问题(特别是第二个问题)有没有办法解决?另外我这个研究有没有价值,还值不值得继续下去?

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

收藏
免费 0
支持
分享
最新回复 (40)
雪    币: 427
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你这是曲线救国。
我认为要彻底解决问题,你必须找到保护系统的机制及其实现的一切细节 。而这是一个很大的坑。。。
2015-3-8 15:46
0
雪    币: 427
活跃值: (488)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
如果你能突破这些保护,那你就等着算钱吧~
2015-3-8 15:52
0
雪    币: 95
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看不懂,不知道你是要读取目标内存,还是要调试目标内存?
我跟你一样,逆向好像很难搞呀
2015-3-8 15:55
0
雪    币: 150
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
内存地址有啥用? 真正需要能下断 看这代码究竟干啥了
2015-3-8 16:45
0
雪    币: 9941
活跃值: (2143)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
只能说你已经走错路了
你只是为了读取内存,居然还把内存保存成文件了
你做那么多,只是做了一个修改DLL注入, 指针读取内存的工作

你想" 然后做成游戏辅助。"

如果你按这办法来,你还是早点放弃吧,这是没办法做成辅助的

你最终目的,还是找基地址 ,你现在做的这些,已经南辕北辙!
2015-3-8 17:47
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
哈哈哈哈哈,我见过做11外挂的,15年的经验,都老被封号。。。

双方都不停得更新~~这还是不发律师函的。。。
2015-3-8 18:10
0
雪    币: 433
活跃值: (1910)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
哇 15年
2015-3-8 18:15
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
就是成功也只是实现了ce的功能
2015-3-8 18:16
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
就算成功了也只是实现CE功能
2015-3-8 21:00
0
雪    币: 257
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
小学习学习学习学习学习学习学习学习学习学习学习!!!
2015-3-8 21:19
0
雪    币: 18
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
楼主,你摸索着这条路,客观的跟你讲 成功的几率很小
你现在研究的只是如何过保护调试了,
假设你现在能过保护了 你将面对 如何找基地址,找call,这个叫数据分析 如果遇到 VM了,估计你也没辙,
OK,假设你能分析数据了,
相信楼主的代码功能,做一个稳定的挂不是难事,OK
下一步,就是多开挂机 产金了
这个时候会遇到封号问题,要判断你外挂太容易了,
有人会说,技术好 就能防封号
我会说 ,有难度,而且难度不是一般的大。
楼主,另找发财的路吧
2015-3-8 21:49
0
雪    币: 44
活跃值: (186)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
要是只读内存双何必这么复杂呢就绕过一两个API就可实现了
2015-3-8 23:04
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
切cr3读内存高强度使用问题多多……一个工作室要是一天有几十个点的蓝屏率你还想别人给你付账?
2015-3-9 00:17
0
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
LZ……
为何我感觉你离做辅助的路还很远很远很远很远呢……
请原谅我如此直接,你跟用辅助来赚钱还差得太远了。
现在绕过保护的工具太多了吧?
比如说滴水,还有那AGP什么的。
当然……你把这个做出来了也貌似没多大用吖?
又不能调试,只能看静态数据有什么用?
2015-3-9 01:44
0
雪    币: 90
活跃值: (82)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
没啥主意。关注。
值不发生变化,也不知道具体值    (就算知道具体值,可能也被变换过
这就毫无线索嘛。
我以前和你一样,也是自己一个人认准一条道走到黑。不跟别人沟通交流。最后碰得个头破血流。
当然,希望你能有突破。

太了解付出很多却走进死胡同的感觉了。不过既然做到这一步了,即使不做游戏辅助,利用这技术也可以干点别的了。
嘿嘿
2015-3-9 01:55
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
首先感谢每一位回帖的好朋友,你们的回复让我认清现实,避免再走弯路。
从大家的回复来看着个研究价值不大。
结贴,此方法有局限性,已放弃,转RO层实现。
2015-3-9 10:44
0
雪    币: 270
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
汗!你一个开发游戏的,来搞外挂逆向,还是转行吧!
2015-3-9 11:21
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
为什么开发游戏的不能搞?
2015-3-9 11:29
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
怎么不干回老本行啊?游戏开发啊。。。搞外挂对你来说门槛太高,不靠谱啊。。。花的时间精力绝对是你想象不到的啊。。。你如果真如此执着,可以边上班边利用下班时间自己搞搞。。。
2015-3-9 14:04
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
21
其实你还是有优势的,只要补全数据分析这块短板,肯定可以写出来优秀的挂的。前提是你把调试过保护这块交给别人来完成,分工合作双赢。
2015-3-9 21:57
0
雪    币: 23
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主应该坚持,其实所有技术的关键在开窍,开了窍,任何东西都不难。开窍过程即坚辛又痛苦。有时痛到生不如死, 这点要做好心理准备噢:)
2015-3-10 08:11
0
雪    币: 121
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主的精神很值得嘉奖。很像我当年的样子(本人35)。如果你真想在 这个方面得到些建议的话,加群399428710讨论下。本人技术一般,有一个中型工作室,全部自写辅助程序,年入也就百万,圈内认识几个朋友。装逼者死全家,呵呵。
2015-3-10 22:33
0
雪    币: 60
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
能加个Q联系吗?
2015-3-11 06:40
0
雪    币: 459
活跃值: (398)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
25
做辅助就单纯做辅助,过保护也是一样,不要一起搞,否则一无所获,前车之鉴
2015-3-11 08:55
0
游客
登录 | 注册 方可回帖
返回
//