周杰伦 12/4/2024, 8:00:29 AM
文章分类 Android安全 阅读数 : 59 阅读时长 : 8分钟
【Android安全-某手游外挂驱动分析】此文章归类为:Android安全。
某天,我的一位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通信隐蔽,游戏难以察觉。本文记录了我的逆向过程,如有错误请各位大佬指正。我将会分享驱动样本。
更多【Android安全-某手游外挂驱动分析】相关视频教程:www.yxfzedu.com