Gslab 发表于 2017-11-27 14:58

【外挂分析】《天下任我行》外挂实现原理分析

本帖最后由 Gslab 于 2017-11-27 14:59 编辑

天下任我行是一款修改定位信息的外挂工具,本文针对该工具的实现原理进行深入分析。


外挂实现原理分析   


外挂的原理大致来说,就是通过进程注入,注入Android的服务进程——system_ server。System_server进程是系统服务的主入口,其他应用程序对系统服务的调用,会通过进程通信的方式把调用传递过来,最终在system_server中实现,并返回结果。因此外挂直接对system_server中的具体实现服务的类进行了替换,接管了定位组件会用到的所有服务,包括wifi、基站、gps等。Dex中会加载一个so文件,用来实现类的替换,就是常见的java hook的方式。


1、注入system_server游戏使用的是常见的注入器,使用了常规的Ptrace注入,注入后会删除自身。使用工具在特定时机可以把注入器dump出来。注入器也使用了一定的对抗手段,对于字符串有做动态解密。


2、hook service注入器最后会加载外挂的主逻辑dex,主逻辑dex有做Java层混淆,包括代码混淆和字符串加密。字符串加密通过直接重写外挂的解密逻辑,经过分析,确认了其中的一些关键逻辑,以及实现方式,并作了相关的注释和改名。


下面列举几个关键点的代码截图:Java hook service


http://gslab.qq.com/data/attachment/portal/201711/27/103053kr0u7zur9ccrj8j7.png
上图可以看出外挂对这些服务都做了篡改。具体的hook实现如下图:


http://gslab.qq.com/data/attachment/portal/201711/27/103054tac66octiqv2gdxt.png

http://gslab.qq.com/data/attachment/portal/201711/27/103054ta5zdp8l8x8pe82v.png

外挂为了实现方便,有一个自实现服务baseService,所有的伪装类都继承自这个基类,这个基类的onTransact函数会在一系列判断会调用子类实现的new_onTransact,如图:


http://gslab.qq.com/data/attachment/portal/201711/27/103054mxt2x91lual3mzil.png

以lac服务为例,简单看一下相关服务实现代码。首先在初始化的时候拿到各个关键transact的服务code,如图:
http://gslab.qq.com/data/attachment/portal/201711/27/103240oy8htehh4kt8x9t4.png


具体的onTransact函数,如图:


http://gslab.qq.com/data/attachment/portal/201711/27/103054mmnptuavu4nvf2p6.png   


以上便是天下任我行工具修改定位功能的实现原理。




*转载请注明来自游戏安全实验室(GSLAB.QQ.COM)

psyzhl 发表于 2017-11-27 15:19

不用类似的软件不知道,一用就会发现,各种不用不在用的国产软件,每隔几十秒就会请求一次位置信息,让我很纳闷,也很心疼电池。
因为我印象中,手机的联网导航最费电。
完全没理由的权限,没理由的行为,真累

黑子哟 发表于 2017-12-9 09:20

longyu4200 发表于 2017-11-27 20:16
免root版本改地位,是怎么实现的

应该是获取暂时root权限吧,和某健差不多

百度专业编程 发表于 2017-11-27 15:18

厉害!学习了!!!!

flyz007 发表于 2017-11-27 15:58

弄这个主要是为了签到方便。

3842731133 发表于 2017-11-27 16:17

学习了 厉害了

A67977544 发表于 2017-11-27 16:48

谢谢。。。。。

anfreezone 发表于 2017-11-27 16:59


厉害!学习了!!!!

gunxsword 发表于 2017-11-27 19:00

看不懂,先收藏,感谢!

longyu4200 发表于 2017-11-27 20:16

免root版本改地位,是怎么实现的

只手过河 发表于 2017-11-27 20:39

学习学习
页: [1] 2 3 4 5
查看完整版本: 【外挂分析】《天下任我行》外挂实现原理分析