首页
社区
课程
招聘
[原创]某手游外挂驱动分析
发表于: 2024-12-4 03:11 3621

[原创]某手游外挂驱动分析

2024-12-4 03:11
3621

某天,我的一位qq好友给我给我看了某手游外挂驱动功能的介绍: ! 图片描述他就想让我也弄一个,看了他那驱动外挂的介绍,我也很是好奇,想知道他究竟是如何实现用户层和内核层的隐蔽通信。毕竟当时我也是在研究安卓的内核。于是我获取的了驱动的样本,进行分析。本次研究主要是研究主要是研究该驱动用户与内核层的隐蔽通信,这是该驱动的一个亮点。
分析思路:
将样本拖入ida后,映入眼帘的全是符号,没有经过混淆: 上图的伪代码,是停留在init_module上,也就是驱动的入口处,先大致看一下入口处到底做了啥:首先是通过注册kprobe来获取kallsym_lookup_name的地址,进而可以在内核搜索各种符号的地址。再次通过kprobe获取touch的地址,这个touch应该是和触控有关的。然后继续获取kern_path和put_path这两个函数 下图是init_module的后部分:
图片描述通过这个张图也发现了,同样获取了uprobe_register的地址。之后他用kern_path打开了一个so的(暂且就这么说吧,可能描述得不够准确),注册了一个uprobe,由于ida的问题,并没有显示调用uprobe_regsiter时候的参数,后边我会通过查看汇编来确定传入的参数是啥。暂且分析到这吧,我的重点是分析他的通信。这里说这么多,是为了分析通信做铺垫。

接着我们转到dispath_ioctl这里边: 通过函数名字可以看出,这明显就是用户层和内核层进行通信的函数。我们交叉引用一下,看看谁调用了他: 发现他是以一个全局变量的形式存在,我猜测,dispatch_ioctl应该是存储在一个结构体当中,我们只要获取他所在结构体的位置,然后看看谁引用了这个结构体就能定位到他注册通信函数的位置。至于为什么我能知道他应该是个结构体,举个例子,要建立注册proc通信,我们要把例如dispatch_ioctl这样的函数存放在一个结构体当中,然后在把结构体当做参数传入进而注册通信。通过往上翻找,找到了一个名叫my_fops的导出符号,如下图: ,通过交叉引用,他会在一个叫handler_pre的函数里边使用: ,这个my_fops会被当做参数传入anon_inode_getfd当中去,这个函数,据我所查资料是创建一个匿名文件,返回值是一个句柄,通过这个句柄,通过这个句柄应用层就可以与内核层进行通信。我看到后面就发现,返回值v3赋值给了cf,由于我截图的问题,截图没截全,后边这个inline_cpoy_to_user是把cf里边的值传回应用层,这个cf应该也是一个结构体。接下来,我们看下这个handler_pre被谁引用,结果发现他是一被一个全局变量引用,这应该也是被一个结构体所引用: ,这个结构体的名字应该叫uc,于是我们交叉引用一下看看谁用到了它: ,很明显uc被当做参数传入x2中,x9又是my_uprobe_register函数的地址,后面我看到blr x9这个指令调用了my_uprobe_register,也就是个应用层注册了一个uprobe,也就是给应用层下了个钩子,而当钩子触发的时候,handler_pre也会被钓用,进而完成应用层与内核层通信的注册。这个注册uporbe简单地说一下吧,看看前边init_module我们会发现,这个uprobe注册是发生在init_module这个函数里的: ,前边我们说过他用kern_path打开了一个so,这个so叫liboxmem.so,而这个so其实就是被uprobe下钩子的目标,大家可以在网上查找uprobe_register在内核里边的给应用层注册一个uporbe钩子的方法,我们可以利用他给用户层的程序下一个钩子,进而达到监控应用层的目的。

总结一下他注册通信的流程:
经过分析,我们发现他先是给应用层的一个叫liboxmem.so的动态链接库下一个uprobe的钩子,当钩子被触发的时候,应用程序会陷入内核,之后会调用handler_pre的内核函数,handler_pre里边会创建一个匿名文件,然后将这个匿名文件的句柄传回应用层,应用层进而可以通过这个句柄和内核进行通信。至于这个驱动的其他功能,就没什么好赘述了。其中有隐藏内核模块的功能,这个功能可以在内核实现隐藏内核模块,这个功能没啥好逆向的,github一大把,可以让lsmod无法查看到这个内核模块。也有触控相关的实现。这个就大家自行研究吧。本文主要是研究这个驱动的一个亮点,应用层和内核层的隐蔽通信,通过创建匿名文件的方式确实可以比dev,proc通信隐蔽,游戏难以察觉。
本文记录了我的逆向过程,如有错误请各位大佬指正。我将会分享驱动样本。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2024-12-4 09:59 被mb_maiyudos编辑 ,原因:
上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 4777
活跃值: (4459)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
Android发展了这久的攻防对抗,也是慢慢发展到了内核了啊。 那些游戏公司出手游的我感觉就是割韭菜,果然那些超出认知的范围的钱赚不到,无法理解为什么会有人去玩手机游戏。现在诺基亚手机里的游戏估计都还有人在玩吧
2024-12-8 00:59
1
雪    币: 68
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3

鹅厂目前打击这一类的内核外挂 1.加密自身进程物理内存敏感数据  如:人物坐标  2.利用已经root的设备系统目录提权文件将某个进程提升为root环境检测第三方驱动模块相关文件 包括其他面具 apatch ksu这些模块 检测触摸库的调用次数 以及屏幕非正规的触摸点 已知的游戏有:某突围 某三角 某荣耀 某和平 某cfm   android也走了pc端的道路 iOS依然还是老样子 要么注入 要么跨进程 最后就是一些封包端口.

最后于 3天前 被牛马丶出生编辑 ,原因:
3天前
0
雪    币: 117
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
牛马丶出生 鹅厂目前打击这一类的内核外挂 1.加密自身进程物理内存敏感数据  如:人物坐标  2.利用已经root的设备系 ...
应该如何对抗呢,有没有最隐蔽root方案
2天前
0
雪    币: 68
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
博士9999 应该如何对抗呢,有没有最隐蔽root方案
root隐藏再好也没有用 su文件永远不会消失.
2天前
0
游客
登录 | 注册 方可回帖
返回
//