设为首页收藏本站购买充值卡

     

龙飞电脑工作室|海门论坛

 找回密码
 立即注册
查看: 472|回复: 0

[游戏资讯] 从零开始学手游安全:做手游外挂

[复制链接]
  • TA的每日心情

    2023-2-3 22:52
  • 签到天数: 4 天

    [LV.2]八品 酒鬼

    494

    主题

    612

    帖子

    5020

    积分

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    5020
    发表于 2023-1-22 16:01:16 | 显示全部楼层 |阅读模式
    前言
    最近快过年了,有点闲不知道该干嘛,就想着找个游戏玩一玩,在我打开了老头环受苦了半个小时后,毅然决然地打开了修改器。但是玩了一会之后就老觉得别人的修改器老有一点我想要的功能没有,所以想着自己做个修改器。但是很惭愧,学了这么久的二进制安全,可我对游戏一窍不通,甚至 Win32 的东西都已经两年没碰了,近年来一直在做 Android 应用相关的东西,于是想着学一点游戏安全的东西,来慢慢入门。
    出于对 Android 的熟悉,这第一步我想都没想就是分析分析 Android 手游,当然这里说的肯定不是用 GG 或者 CE 搜一搜内存,于是需要对 Android 手游做一个大概的了解,然后是动手看看能不能分析出一点东西。
    一、基础知识1.1 手游保护基础
    既然想怼手游,首先要明白我们的攻击目标是什么?目前手游上比较热门的引擎有 cocos、unity 、虚幻、以及一部分的自研引擎或原生游戏。
    cocos 据传是开源引擎,看了两眼好像是 js 写的?国产的?这些我都不确定,但是我确定的是目前教程比较少,所以不打算怼 cocos。
    unity 就名气大得多了,PC 端也有不少用 unity 写的游戏,而手游上边如原神、王者等盈收较大的游戏目前都以 unity 为主,所以打算第一步采用 unity 做学习。
    虚幻,不懂,过。
    自研引擎倒是有听网友吹逼的时候说网易挺多游戏用的自研引擎,不知道真的假的。原生开发的游戏目前应该比较少了吧,也不了解,不多说。
    1.2 unity 基础
    既然说了怼 unity,下一步就是要明白怼哪里?好像概括来说游戏上跟应用上也没啥区别,无外乎扒游戏资源和改游戏逻辑。在早些时候看过吾爱上有一个教程是通过改 smail 改变元气骑士的内购逻辑,比较有意思的是,如果只改 smail 就可以更改如此重要的逻辑的话,要么是开发人员对安全不够重视,要么是游戏修改会比应用更简单一些?hhh
    不过我看了一些帖子之后发现我好像想简单了。unity 引擎因为逻辑采用 C# 开发,作为一个和 Java 差不多的解释性语言,用反编译器基本能从逻辑里边扒出源码,例如 jadx 之于 dex、jar 等,而这个时候的 C# 编译器叫 mono,很显然这样的效率和安全性都有问题,就连 Android 5.0 都引入了 ART ,更何况一个再次转译的 C# 呢。
    于是在后来 il2cpp 的构建方式成为了主流。IL 是啥可以自己百度,我凭印象解释一下的话应该是 smail 之于 java,具体对不对我也忘了,它是一个中间件。而 cpp 是啥就不用我多说了吧... 其实 Android 的 java2c 加固就挺像这么一回事,不知道是谁先借鉴的谁...
    说回 il2cpp,通过这种方法编译的游戏会有一个很重要的文件,即 GameAssembly.dll ,这个文件中会存在所有游戏相关的重要逻辑,例如角色血量攻击力啥的,都会在这个文件中。不过好像也有比较特殊的情况,就是 unity3D 版本,这个文件会是 Assembly-CSharp.dll,当然具体是不是我也不知道,反正留意这两个文件就行。
    1.3 手游安全对抗基础
    而加固侧的攻防对抗一般也是针对这两个 dll 文件来的,比如说加密了的 dll。不过比较可惜的是,因为 unity 引擎本身需要对这两个文件的函数进行操作,所以最后在内存中终究还是存在解密后的 dll 的,好像也有专门的 dump 工具,不过一下子记不得名字了。而另一方面就是部分游戏专用加固是否存在逻辑,可以使得这个东西没办法被 dump,这也是我目前不知道的。
    另一方面,除开加固的加密逻辑外,还有一个问题也很重要,那就是游戏的反作弊服务,不过对应游戏的话应该说成反外挂服务会更合适。目前国内乃至全世界好像也没几家手游反外挂服务提供商,甚至国内的反外挂服务好像都还是比较有名的?而从我看到的几个宣传来看,目前新兴的上海四小龙好像也用自己的反外挂服务,基本不是用的腾讯的ACE就是网易的易盾。
    二、简单实操2.1 挑选目标
    因为是游戏安全的第一篇章,所以肯定挑一个没接反外挂的,尽量减少入门的学习动力hh。说到没接反外挂,就想到了上面提到的元气骑士。

    一看,还真就那个没加固,所以就以元气骑士为背景,来看看手游在没有保护的情况下能改成啥样。
    2.2 运用到的工具
    虽然说起来很轻巧,好像知道原理就能直接怼了,但是考虑开发的时候大量的数据结构和 IDA 逆大半天很累(主要是懒),所以想着能不能找到一些 frida 脚本自动打数据结构的。
    幸运得是,得益于各大群控和模拟点击工具,我对于现在的作弊工具该咋叫还是有点心得的,可以大胆的搜一下 “测试工具”,你看,一搜就搜到了 GG(第二行):

    不过我在最开始就说了,GG 在刚入门的时候啥也不是,毕竟我又不是冲着脚本小子去的。但是我没想到的是,第一行就找到了我想要的东西(一般百度搜出来的东西,我都不看第一行),也就是这个说要开源的东西,稍微看了一下,好像能满足我的要求,链接在这里:https://github.com/GrowthEase/GameSentry (有问题别找我,github 自己提 issues,实在不行自己改,我看了下基本是 frida 为核心的东西)
    这东西还真就只提供一个源码,不过好在环境只要求 nodejs 和 frida。nodejs 百度一下咋装一般三分钟就搞定了,frida 的话。。。我只能说现在的 Android 逆向工程师又名frida 开发工程师。如果 frida 都不会的话建议先学 frida,可以少走不知道多少弯路,脱壳、inline、协议一把梭...
    2.3 正式上手
    启动界面突出一个能用就行,我原本都不报希望了:

    但是没想到居然大部分功能都有:

    最惊喜的是啥呢,这个内存跟踪功能直接把我想要的东西全扒出来了。。什么叫懒人福音啊(战术后仰

    记得我们在前文提到过的 unity 基础嘛?没错,在这个 dll 里面就是游戏的核心数据,于是我们就可以在这里面找一下内存里面我们感兴趣的东西了,比如什么呢?角色血量、蓝量,经过查找后,发现类 RoleAttributePlayer 就是我们关心的东西。

    在右边,最大蓝量、当前蓝量,最大护甲、当前护甲等较为重要的属性都展示出来了,且该实例所处的内存也已经展示出来了,那让我们尝试一下修改蓝量,会是什么情况呢?

    不过显然,游戏也做了一定的检测与对抗,即使我修改为了 9999,他也在一直扣蓝,即使掉到了 180 以下也仍然在掉,不过显然这并不是啥问题,已知内存和数据结构的情况下,有太多办法把这个值固定了。那还有没有别的有意思的东西呢?有的,比如血量:

    比较有意思的是,发现游戏是将角色的信息单独保存在了类 RoleAttribute 中,且在这个类中有多个角色的数据,应该是在出生房间选不同的角色,直接在这里读取的数据。

    当然你要问我咋找到这些类的,那我只能说一个个看过去。当然对于大部分的逆向工作来说,运气和耐心都是良好的品质hh。(另外提一嘴,希望开发方能加一个锁定内存数值的功能hh,这样甚至 GG 脚本都不用写,直接就能当外挂用了hh)
    而上面说的玩法都还只是内存的,整体修改思路偏向于 GG 与 CE 的做法。但是对于 frida 来说,除了内存之外,函数的玩法也可以玩出花来。同一个工具同一个 dll,上面导航栏切换到 “函数展示”,甚至同样针对上面说到过的 RoleAttributePlayer,在 frida 上面来说就更夸张了:

    get/set 想必就不用我说多了吧,应该都明白是啥了吧。。
    2.4 总结
    而实际上呢,在有了这个工具之后,原本很多要慢慢尝试才能做的外挂,感觉一下子就能做出来了。我这里都还只是盯着游戏内的属性在攻击,实际上我还看到了类似于角色皮肤、枪械皮肤、宠物伤害、角色解锁等相关信息。不过对于我来说,只是起一个学习的引子,所以就不再细究了,有真的喜欢这款游戏的朋友可以自行再去摸索。
    另外最后再吹一句这个“测试工具”,真好用,各位专业的外挂佬也可以试一试,毕竟我在各个论坛上好像都没看见有人说过这玩意,有点埋没了。
    后面也打算慢慢学一点游戏相关的东西,毕竟玩的多hh,上面说得如果有些啥基础问题说错了的也欢迎大佬们指正,毕竟我是真不懂一点游戏安全和游戏开发。
    最后的最后再多说一句,我看到了游戏实名认证相关的数据,奉劝各位用别人外挂的玩家,不要用没开源或者不知道底细的外挂,他们能做的比你能想到的多得多。
    以上,完。

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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