首页
论坛
专栏
课程

[原创]利用CheatEngine工具Ultimap功能对抗游戏数据加密以及拓展

2019-6-11 13:43 5264

[原创]利用CheatEngine工具Ultimap功能对抗游戏数据加密以及拓展

2019-6-11 13:43
5264
前言:

昨天有个网友问我,游戏加密了咋办,我当时就震精了。加密了?干他啊!安排,必须安排!那么今天就给大家分享几个游戏数据加密的逆向方法!



步入主题:这款游戏叫做战地X盟,是一款小型FPS网络射击游戏,别看游戏小,“麻雀虽小,五脏俱全”,这个游戏也不例外,各种数据都不能让你好好逆向。

第一步,上游戏,我们拿游戏人物的子弹数量开刀,话说,大家都是这么开刀的吧,那我也开刀了:

[七颗子弹搜索七]:



还不错,有数据,那我们继续干:

[五颗子弹搜索五]:



甚好甚好,还有数据,那我们继续筛选:

[四颗子弹搜素四]:




这...有点难为人啊,于是乎,我就把所有的数据类型都试验了一个遍,依然没有数据:



搞到这里,我们必须要意识到一个问题,那就是:这个游戏数据真的被加密了!那么我们现在不妨讲一下游戏的数据加密吧:

游戏数据加密:顾名思义,就是游戏的数据被加密了呗,你还想让我咋解释...整那些乱七八糟的名词真的没必要,搞的大家都听不懂



游戏加密的后果:还能有啥后果,后果就是让你逆向不出来呗,还能咋地...



那么对抗的方法呢,来了,老弟~:

对抗方法①之闷头撞墙法:什么意思呢,游戏数据加密,我们首先要猜测子弹数量数量是不是把数据类型改掉了,比如按照常理应该是整数型,结果这个程序员脑袋一机灵改成了浮点型也是有可能的,然后我们就挨个的切换数据类型扫描减少增加,这个方法我试过了,脑门都起了好几个大包了,没找到,所以果断放弃,会出人命的!



对抗方法②之佛系未知法:意思就是我们先扫描未知的初始值,然后开枪,搜索变动,不开枪搜索未变动,听不懂是吧,来我们演示下:

[先搜索未知的初始值]:




[开枪搜索变动,不开枪搜索不变动]:



然后,最后还真的找到几个跟随子弹数量变动的地址:



但是只要你修改或者锁定就知道都是没有效果的,甚至还会崩溃,而且我们还不知道哪个是关键的数据,这就很头痛了...



加密就意味着,子弹数量的数据每次开枪变动都遵循着加密的算法,可能被放大或者缩小,或者遵循着某个算法而变大或缩小

那么问题就来了,我们怎么解决呢?其实按照上面找出的地址也是可以逆向的,但是太繁琐了,我们不如找点简单的方法,那就是Ultimap!

先来讲讲这是个什么东西:

说白了,这就是个代码执行过滤的工具,可以通过该工具找到某个时刻执行或者没执行的代码,于是乎,我们就可以找到开枪攻击的关键代码或者Call

那么,怎么开启这个工具呢?第一点,加载DBVM,唉,等等,怎么又多出来一个DBVM,这又是个什么东西?

开讲了,开讲了!什么是DBVM!

官方解释:https://www.cheatengine.org/aboutdbvm.php

DBVM是一个虚拟机,它将运行您的操作系统并扩展指令集以允许用户模式应用程序访问kernelmode。它允许程序将系统事件流重定向到不同的位置并更改其结果。(例如,在不编辑中断表的情况下将中断重定向到不同的中断处理程序)

Cheat Engine可以利用这些添加的指令来简化游戏修改和调试。特别是在Vista 64中。要使用它,只需使用DBVM启动,然后启动操作系统,通常是Windows,Cheat Engine将自动检测DBVM是否已加载并使用添加的功能。

安全性:恶意软件可以使用DBVM。因此,它需要一个64位长的密钥才能使用这些指令。其中一条说明是将默认密钥更改为其他密钥,以便其他程序在没有正确密钥的情况下无法使用它。

请注意,DBVM的当前实现要求您的cpu支持intel-vt指令集。对于AMD版本,请捐出足够的钱,以便我可以购买AMD系统来测试AMD的特定代码。

找出您的系统是否支持dbvm的一种简单方法是在CE徽标上点击以显示about屏幕。它会告诉您系统是否有能力。如果您实际上已经加载了dbvm,它甚至会告诉您正在运行的dbvm的哪个版本.


也就是说,不管他是什么东西,用UltiMap工具就必须开启dbvm


开启方法:


①:打开帮助界面




②:提示支持DBVM然后点击一下绿色的字




③:出来提示点击OK就可以了


相关文章参考: https://wiki.cheatengine.org/index.php?title=DBVM


然后我们就要开启Ultimap工具了!!!激动人心的时刻!!!


第一步:打开内存浏览器




第二步:点击Ultimap




然后我们进游戏,拿起枪,点击start:




开一枪,然后点击第二步的按钮:意思就是代码执行了,因为开枪了,开枪相关的代码肯定得执行




不开枪随便走两步,点击未执行的代码:



继续开枪,搜索执行的代码:



以此类推,通过我手动的过滤,还剩下175个地址:

然后我们点击下面的show,也就是显示过滤的结果




然后显示出来了,还有计数:

这边是极其重要的,因为我们开了四枪,所以相关的代码也应该执行了四次!

因此,我们把所有执行4次的代码,拷贝下来进行分析:

通过修改相关逻辑,最终实现了“无限子弹”,当然了,是自wei的,哭了,因为是网络游戏,所以子弹数量跟服务器是交互的哦~

具体的内存地址不放出来了,太敏感,而且有些人也可能会拿去做坏事~

这篇文章呢,只是讲解Ultimap工具,它是一个可以过滤代码执行的强大工具

拓展:

1.人物穿墙的碰撞检测
2.子弹穿墙的碰撞检测
3.各种内存call:比如攻击call,寻路Call
4.按钮等控件call

等等等等,自由发挥咯

另外,打个小广告咯,QQ群:786070465,一起交流逆向知识吧!






[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-6-11 13:45 被小迪xiaodi编辑 ,原因:
最新回复 (20)
人在塔在 2019-6-11 14:47
2
0
顶一个
ps:现在没点表情包都不敢发文章了
StriveMario 2019-6-11 15:23
3
0
这东西还真没用过 
iporus 2019-6-11 16:05
4
0
wem 2019-6-11 16:48
5
0
好贴留名。
Buu 1 2019-6-11 17:14
6
1
lankerr 2019-6-11 19:36
7
0
感谢
yimingqpa 1 2019-6-11 20:44
8
0
更多的情况是dbvm开不起来.
小迪xiaodi 1 2019-6-11 22:05
9
0
yimingqpa 更多的情况是dbvm开不起来.
开的起来,最新版的CE,一般没问题,对应着CE DBVM说明的系统就可以。
flarejune 2019-6-12 16:34
10
1
又是无脑搜索法,虽然很无脑,但是也不失为对新手的一个好解决办法.
其实你要获取开枪状态的话,为什么不换个思路?你去获取DINPUT的调用,看下游戏取了按键值之后放在哪里(也有些游戏是直接在获取按键值后就进入处理环节的了),那个就是代表行为动作的FLAG,给那个FLAG下个读取断点,去读取它的就必定是"行为"处理函数了,一般是几个CAST或者是直接根据行为值获取行为函数指针,跟踪这个函数调用,进去就是开枪的处理了.
小迪xiaodi 1 2019-6-12 16:59
11
0
您这才是真正的大佬!
nevinhappy 2 2019-6-12 17:56
12
1
大佬,666!
编程小白 2019-6-12 19:17
13
0
wem 2019-6-13 11:25
14
0
过滤出来显示的数据,居然没有按序排列
cmputer 2019-6-14 09:27
15
0
方便新手学习了,表情丰富,我是笑着看完的
小迪xiaodi 1 2019-6-14 10:40
16
0
cmputer 方便新手学习了,表情丰富,我是笑着看完的
哈哈,感谢支持!
小迪xiaodi 1 2019-6-14 10:40
17
0
flarejune 又是无脑搜索法,虽然很无脑,但是也不失为对新手的一个好解决办法. 其实你要获取开枪状态的话,为什么不换个思路?你去获取DINPUT的调用,看下游戏取了按键值之后放在哪里(也有些游戏是直接在获取按键值 ...
学习了!哥哥!
小迪xiaodi 1 2019-6-14 10:41
18
0
wem 过滤出来显示的数据,居然没有按序排列
这个是没有顺序的,他不会按照代码的执行流程顺序排列,但是我们可以设置只显示某个模块的代码进行筛选
严启真 2019-6-14 16:04
19
0
厉害啊,加密的都可以搞
flarejune 2019-6-17 15:39
20
0
这些低难度的不好玩,来玩个进阶点的,如何找到子弹轨迹的计算函数,也就是计算子弹是否命中的处理,将不命中改为命中,反之亦然。或者找子弹碰撞的检测处理,将命中的子弹,穿透处理,也就是"无敌"。或者再强化一下,将子弹的轨迹,直接指向敌人的脑袋,也就是自动瞄准处理。
jfdsa 2019-8-14 17:48
21
0
长见识了,楼主厉害
游客
登录 | 注册 方可回帖
返回