【外挂分析】《天下任我行》外挂实现原理分析
本帖最后由 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) 不用类似的软件不知道,一用就会发现,各种不用不在用的国产软件,每隔几十秒就会请求一次位置信息,让我很纳闷,也很心疼电池。
因为我印象中,手机的联网导航最费电。
完全没理由的权限,没理由的行为,真累 longyu4200 发表于 2017-11-27 20:16
免root版本改地位,是怎么实现的
应该是获取暂时root权限吧,和某健差不多 厉害!学习了!!!! 弄这个主要是为了签到方便。 学习了 厉害了 谢谢。。。。。
厉害!学习了!!!! 看不懂,先收藏,感谢! 免root版本改地位,是怎么实现的 学习学习