首页 > 技术专题 > Plugins > 游戏外挂简介教程
2016
12-22

游戏外挂简介教程

简单看下,可以学习下别人的方法!

一 外挂简介
1) 针对游戏:热门的Android游戏
2) 外挂版本:xx助手Android2.0.3beta版。
3) 外挂功能:实现外挂模块的加载及挂钩。
4) 外挂类型:通用的注入功能实现。.
更多安卓IOS制作教程:http://www.siluyouxi.com/game/px/kaifa/
二 功能分析
1. 安装包解析
使用apktool工具反编译出xx助手apk的内容,其中在assets目录中发现有名为“injectso”的可执行文件,根据文件名称,猜测此为xx助手向其它进程注入so库的功能库。
2. injectso注入功能库解析
使用IDA打开injectso文件,找到main函数的代码,使用F5查看C代码:

可以看到,进入main函数后,先检查参数数量是否为5,然后输出日志到/mnt/sdcard/xxlog.log文件中。我们先启动xx助手,然后再打开此日志文件,发现内容为:
可以看到,调用此模块功能的后4个参数为:10229、/data/data/com.xxAssistant/lib/libxxghost.so、loadResAndPlugin、/data/app/com.xxAssistant-2.apk。即1个ID、1个模块全路径、函数符号和1个Apk包路径。
再往下看代码:
这里把10229转换成整型,在模块全路径中搜索'/',即找出模块的名称,再调用sub_9288(10229,"libxxghost.so")得到一个值v20,根据72行的日志可以得出,这就是获取一个进程中的模块基址,也就得出10229就是一个进程号。那么,10229是一个普通进程吗?
通过在手机终端的命令行下输入ps | grep 10229,得出的结果是zygote进程。
再看下zygote的进程空间,输入cat /proc/10229/maps | grep data(需要root权限):
发现确实有libxxghost.so模块,即xx助手确实往zygote进程注入了自己的模块。
继续往下看代码:
首先判断模块基址是否找到,防止重复注入;sub_BEF4、sub_C21C、sub_C444是检查Android的SeLinux功能是否启用,如果启用,则关闭,等注入模块后再打开。注入模块的功能代码即在sub_94AC函数中,原理即基于ptrace函数簇。
3. ptrace函数簇介绍
ptrace is a system call found in several Unix and Unix-like operating systems. By using ptrace (the name is an abbreviation of "process trace") one process can control another, enabling the controller to inspect and manipulate the internal state of its target. ptrace is used by debuggers and other code-analysis tools, mostly as aids to software development.——摘自维基百科。
翻译过来就是,ptrace函数簇是类unix系统自带的系统调用,提供控制调试其它进程的功能。而linux也是类unix系统的一员,所以也包含ptrace系统调用。linux上的很多调试工具如gdb、strace等都是通过ptrace函数簇实现的。
源自:
游戏外挂制作教程:Android游戏Ptrace注入
http://www.cgwwo.com/thread-27217-1-1.html
http://www.cocoachina.com/bbs/read.php?tid=323664

最后编辑:
作者:小企鹅
坚持+积累+学习
捐 赠如果您觉得这篇文章有用处,请支持作者!鼓励作者写出更好更多的文章!

留下一个回复