Android版xx助手之天天酷跑外挂具体分析

Android版xx助手之天天酷跑外挂具体分析

图/文      莫灰灰

背景

近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯。当腾讯的微信平台接入手机游戏之后,移动端的游戏也開始火了起来,这更是改变了人们长久以来的游戏娱乐习惯。茶余饭后,小伙伴们掏出“家伙”打个飞机已是习以为常的事情了。加之移动client游戏开发周期短,投入少等特点,非常多初创公司也纷纷投入到这个领域中来,而且非常多游戏都取得了不错的成绩。就在前不久,全球游戏巨头暴雪的新游戏《炉石传说》也推出了iPad版本号,更加印证了移动端的重要性。

如同PC端一样,移动端游戏的兴起,自然也就造就了游戏外挂产业的火热市场。大名鼎鼎的xx助手就是这样一款移动端的游戏外挂软件,它不仅功能强大,并且兼容IOS和Android等多平台系统。正所谓树大招风,接下来,我们就来对其内部实现做一个具体的分析,来一窥Android平台下游戏外挂的实现原理。

特此申明:本文涉及的代码与分析内容仅供学习交流使用,不论什么个人或组织不得使用文中提到的技术做违法犯罪活动,否则由此引发的不论什么后果与法律责任本人概不负责。

測试环境

红米TD版

MIUI-JHACNBA13.0(已越狱)

叉叉助手Beta1.1.2

使用工具

IDA

Apktool

Ddms

jd-gui

程序分析

在分析程序之前,我首先去下载了《欢乐斗地主》、《全民飞机大战》、《天天酷跑》三款腾讯的热门游戏,打开xx助手,界面如图1所看到的。

图1

此时,xx助手已经检測到机器上安装的游戏了,在xx助手里面下载对应游戏的外挂程序之后点击“启动游戏”来打开天天酷跑,界面如图2所看到的。

图2

非常明显,从xx助手中打开游戏会发现右边多了一个设置button,点击设置,在弹出的界面中我们能够设置对应的“飞行距离”、“奖励倍数”等。

打开DDMS,使用FileExplorer工具定位到/data/data/com.xxAssistant,查看文件夹结构如图3所看到的。

图3

细致查看图3中的app_plugin文件夹,发现当中恰好有三个子级文件夹,分别相应了酷跑,欢乐斗地主和飞机大战的外挂插件。

到眼下为止,单从这个文件夹结构中,我们大致能够得出例如以下一个猜想,即:xx助手主程序仅仅是一个启动器,用来启动各个游戏外挂,很多其它时候,能够把它理解为是一个游戏外挂的公布平台,本身并不具备改动游戏的功能。而每个插件文件夹才是具体实现某个游戏的外挂程序。比如,拿103文件夹来说,xxUI.apk是上述图2中看到的那个游戏中出现的设置界面,libxxkupao.so是实现hook游戏关键函数,改动游戏功能的重要库文件,而xxplist可能是某个配置文件。为了印证自己的推測是否正确,我们利用工具把103插件文件夹导出到本地来做具体分析。

验证猜想

1、com.tencent.pao.xxplist

用文本编辑器打开插件文件夹下的com.tencent.pao.xxplist文件,内容如图4。

图4

经过简单的分析,此文件确实是为xx助手的配置文件。当中,game-name字段为被操作的游戏包名;apk-path字段为详细外挂的apk文件;ui-name字段则是外挂启动后的主Activity;activity-name字段为游戏的主Activity;so-path字段则为详细实现hook游戏相关函数,patch游戏进程的主要文件。

2、xxzhushou_android.apk

此apk文件为xx助手的安装文件,经过具体分析,xx助手主程序主要实现了下载指定游戏外挂、启动游戏、解析上述xxplist、把外挂dex注入到游戏进程等功能。并且这一整套东西的实现与具体的某个游戏是松耦合的,堪称是一个游戏外挂的公布平台呀。(因为我们今天主要分析的是游戏外挂的实现原理,下回有时间再写一篇具体分析xx助手的文章,所以在这里,关于xx助手本身的功能就先一笔带过了)

3、xxUI.apk

这个包文件是进入游戏之后主要显示的外挂设置界面,详细如图2所看到的。以下我们来详细分析下事实上现原理。

解包xxUI.apk,使用JavaDecompiler工具查看解密出来的类java代码,代码结构如图5所看到的。

图5

发现代码并没有经过加密混淆,以下我们首先来看看xxkupao这个类的实现,如图6所看到的。

图6

这个类的init函数首先保存so path路径,然后调用show函数初始化界面布局。show函数中调用initView来创建Setting和About View,并使用线性布局来排版界面。接下来我们来看看Setting View的实现,如图7。

图7

这个Setting View类的大致功能是,首先保存so文件的路径,即/data/data/com.xxAssistant/app_plugin/103/libxxkupao.so,然后调用initNativeFunc函数载入so文件,并開始patch游戏的相关函数,接着调用initView函数初始化界面中的各种控件。

详细来看下initNativeFunc函数,图7中这个函数反编译出来的代码并非非常准确,大致的代码应该是这种,如图8所看到的。

图8

InitNativeFunc函数首先载入so文件,然后通过调用set方法设置对应的外挂属性。最后推断CPU的类型,实施不同的hook方案(由于天天酷跑这个游戏会依据CPU的不同而释放不同的游戏so文件,所以hook的时候代码偏移都有所不同,这里hook方案的不同主要就是为了配合游戏释放出来的文件不同)。当中这里的set方法和xxdohook函数都是JNI调用,即在java层中调用底层c或者c++的代码,不知道这方面知识的同学能够学习下NDK开发。

4、libxxkupao.so

通过上面的分析之后,我们知道 xxUI.apk事实上是通过JNI调用实现的,详细功能的实现都在这个so文件里。

详细来看下setBonus,即设置奖励倍数方法的详细实现吧,其它都大同小异了。使用IDA打开libxxkupao.so,定位到Java_com_xxAssistant_UI_xxkupaoSettingView_setBonus函数,汇编代码如图9所看到的。

图9

JNI调用的前面两个參数是系统传进来的,我们不必关心,參数3是我们自己传进来的奖励倍数,是一个整形的数值,经过简单处理之后把奖励倍数保存为全局变量,供后面函数调用使用。

以下我们来看看xxdohook函数的实现,因为函数太长,主要以奖励倍数功能的实现開始分段解说。

(1).保存传进来的參数到局部变量中,參数3即是我们自己传进来的參数,依据CPU类型来决定hook类型。

图10

(2).获取游戏进程中libGameApp.so的基址。

图11

(3).依据CPU的不同,java层会传递不同的參数下来,用以实现不同的hook。当中大体的实现思路是一样的,主要是由于不同的CPU,游戏释放出来的so文件是不同的,所以两种hook类型基本上仅仅是文件偏移的不同,以下我们选择当中的一个分支来进行具体介绍。

图12

(4).获取到游戏so文件基址之后,调用dlsym方法依据符号名试图解析出AddScore函数的地址。

图13

(5).假设通过符号找到了对应函数的地址,那么就调用MSHookFunction函数进行hook游戏的关键call,以此来改变游戏的运行流程。(MSHookFunction是Cydia Substrate的库函数,此框架功能强大,支持Android和IOS的hook)

图14

(6).当然,通常情况下,我们并没有游戏的符号文件,所以在第(4)步中调用dlsym函数解析符号地址的时候就已经失败了,那么此时函数便会依据硬编码地址来进行hook。

图15

(7).至此,游戏的patch工作已经所有完毕,接下来就能够開始玩游戏了。游戏在执行过程中,会进入到我们的hook函数中。比如,一局游戏结束后,那么系统会给予一定奖励,此时,便会进入我们的mine_AddScore函数中開始执行,以下我们来看下此函数的详细实现。

图16

经过分析,此函数的实现逻辑事实上非常easy,比如我设置了奖励倍数为10,那么hook代码就会循环调用10次游戏本身的addScore函数来实现多倍奖励的功能。

整体的调用过程用一张图来说明就更加形象了,如图17所看到的。

图17

总结

游戏的设计和架构在非常大程度上与网络资源息息相关。基于移动端网络的不稳定性,以及国内网络流量资费比較昂贵等特点,大多数移动端游戏都会将绝大部分的功能放在本地来实现,仅仅有绝少部分重要的信息才会与server端进程同步,比如装备、资金的变更。因此,游戏外挂仅仅要patch掉本地游戏的关键函数就能达到类似无敌、穿墙、飞行等变态功能。

基于以上的特点,游戏作者能够额外的开一个线程来定时检測自身代码是否被恶意篡改了。可是,线程和定时器又是非常easy被外挂patch掉的,因此,无论是PC端游戏还是移动端游戏,外挂与游戏的斗阵始终都不会结束。

Android版xx助手之天天酷跑外挂具体分析

时间: 2024-10-10 06:18:18

Android版xx助手之天天酷跑外挂具体分析的相关文章

Android版xx助手之天天酷跑外挂详细分析

Android版xx助手之天天酷跑外挂详细分析 图/文      莫灰灰 背景 近些年来,移动互联网的大肆崛起,潜移默化中影响着人们的生活和工作习惯.当腾讯的微信平台接入手机游戏之后,移动端的游戏也开始火了起来,这更是改变了人们长久以来的游戏娱乐习惯.茶余饭后,小伙伴们掏出"家伙"打个飞机已是习以为常的事情了.加之移动客户端游戏开发周期短,投入少等特点,很多初创公司也纷纷投入到这个领域中来,并且很多游戏都取得了不错的成绩.就在前不久,全球游戏巨头暴雪的新游戏<炉石传说>也推

《天天酷跑》游戏后台结构体标准化探 转

http://www.yxrb.net/thread-11839-1-1.html 在程序设计领域,程序就是数据结构加算法的理论早已深入人心.在手机游戏的后台系统中,数据结构就是各式各样的struct或class,遍布于数据存储(DB).内存(业务逻辑).网络(C/S交互协议),算法就是各种基于数据的业务处理逻辑了. 手机游戏后台数据结构有一些特点: 以整形数据为主,字符串类型比例很少,绝大部分数据可以用整形(直接或间接)表示. 相对大型端游,数据结构相对简单,绝大多数可以通过2-3层结构来抽象

程序游戏推荐(C语言贪吃蛇,python天天酷跑(需要安装pygame),js是狠人就坚持30s)

下面是下载位置,我把他们上传到我的文件下了. C语言贪吃蛇:https://files.cnblogs.com/files/ITXiaoAng/%E8%B4%AA%E5%90%83%E8%9B%87.rar python天天酷跑:https://files.cnblogs.com/files/ITXiaoAng/%E5%A4%A9%E5%A4%A9%E9%85%B7%E8%B7%91.zip 30s: https://files.cnblogs.com/files/ITXiaoAng/%E7%B

cocos2d 简单高仿天天酷跑游戏

1.先直接上视频来看下这个游戏的样子(GIF已经不能满足这个游戏的展示了) 跑酷游戏最纠结的是地图,碰撞倒是简单,可以自己写或者使用box2d等物理引擎.跑酷游戏地图的特点就是随机性.但是随机中又有策划特意安排的部分,这样让玩家有小小惊喜.所以我就打算这样实现:用地图编辑器编写个几十个地图,然后洗牌掉,从第一个开始取,直到最后最后一个后,再重新洗牌,取第一个.这样就能突出天天跑酷游戏的特点.随机中又有特定安排. 游戏中绘制地图当然不能一次全部完成,那样太慢了.手机屏幕横向就那么长,初始化两个地图

【Cocos Creator 实战教程(2)】——天天酷跑(动画、动作相关)

转载请保留原文链接,个人公众号:xinshouit(新手程序员),欢迎关注 准备工作 把背景图拉长,很长很长的那种....一会我们要让它滑动起来 背景动画 为背景节点添加滚动动画 现在背景就循环滚动起来了(图是我后来截的,这步猴哥还没登场呢) 猴哥动画 导弹动画 这里我们要添加两个Clip,一个是高空导弹,一个是低空导弹 这里我们要给导弹加几个帧事件,在导弹导弹猴哥头上的几个帧上添加judgeDown事件,当导弹到达猴哥头上,猴哥还没低头,那就游戏结束,低空导弹同理,需要猴哥跳起 结束场景 游戏

天天酷跑多态

package Tian; public class Actor{ String name; Pet pet; package Tian; public final class Bear extends Pet { public void run(){ System.out.println("我是雄二,我喜欢蜂蜜"); } } package Tian; public class Cat extends Pet{ public void run(){ System.out.printl

BZOJ 3628 JLOI2014 天天酷跑 记忆化搜索

题意:...给定一个矩阵,每个点有一堆金币,自己在(0,1),然后各种跳,求最大收益(具体自己看) 传说中的省选第二题,当时写的爆搜20分,现在想想把深搜改成广搜再加个记忆化不就切了么...不过这题要开滚动数组 直接交MLE 正解应该是DP 我实在懒得DP就记忆化搜索了 反复memset那里常数有点大 懒得处理了 我自然溢出的队列居然写挂了...直接把h-1写在中括号里会强制类型转换成int导致调用q[-1] 所以只能这样了 交的人好少..这题也没啥意思 水水就切了 注意这题无论是数组还是读入输

Android版九连环NineRings

喜欢九连环以及想玩九连环的小伙伴们,送福利了,Android版本的九连环小游戏NineRings上线了!!!快来尝鲜吧,如果觉得好玩,请帮忙转发.游戏演示及下载地址 http://onestraw.net/ninerings 91助手下载: http://url.cn/W4R4Eo 百度助手下载: http://url.cn/PhqcRq 安卓市场下载: http://url.cn/JgDfoN Android版九连环NineRings,布布扣,bubuko.com

Android版九连环NingRings

喜欢九连环以及想玩九连环的小伙伴们,送福利了,Android版本的九连环小游戏上线了!!!快来尝鲜吧,如果觉得好玩,请帮忙转发.游戏演示及下载地址http://onestraw.net/ninerings NineRings是根据中国古典益智游戏九连环规则,抽象出来的一款休闲益智游戏! NineRings是第一款将九连环玩具在手机上(Android)模拟出来的游戏,九连环爱好者终于可以随时随地把玩九连环了. NineRings游戏界面中有一根柱子和多个方块,方块位于柱子的左侧,方块从上往下依次标