作者:
猎豹移动安全中心
·
2015/07/13 19:12
author:猎豹安全中心
0x00 前言
在HackingTeam泄漏的文件,我们发现了有针对主流聊天软件中的语言进行监控的代码,其中包括国内常用的微信。下面就以微信为例,来分析一下HackingTeam是如何实现语言监控的。
语音监控的相关代码在core-android-audiocapture-master
文件夹下,通览全部源码之后,我们发现,语音监控的实现,主要是通过ptrace实现代码注入,将一个动态库注入到微信的进程中实现的。由于Android系统对权限的控制,要实现该目的,必须要拥有管理员权限才可以。也就是说,恶意软件需要先获取root权限,之后才能进一步实现语音监控。
0x01 实现
下面进入主题,说说是如何实现语音监控的。
core-android-audiocapture-master\dbi_release
文件夹里面是程序主要代码,包括的文件如下

其中,hijack文件夹下包含了一份进程注入的代码,该代码的主要功能就是通过ptrace将一个动态链接库(*.so文件)注入到指定的进程里面,并执行。实际上关于进程注入的代码,之前已经有过很多个版本了,关于细节就不再赘述。相信在不久之后,基于HackingTeam泄漏版进行改写的hijack将会大量的出现。
当动态链接库文件被注入到微信进程之后,会直接调用初始化函数,该函数即为libt.c中的my_init函数。
在my_init函数开始部分,首先对系统版本进行了判断,并根据不同的版本采取不同的措施。

为了更容易理解,我们选取android 4.0的环境,看看my_init都做了写什么事情。

可以看到很多HOOK_coverage_XX
形式的变量,这实际上是函数调用的宏定义。相关的定义在hijack_func\hooker.h
文件中

根据上图可以知道,HOOK_coverage_XX实际上是调用了help_no_hash函数。那么我们先来总结一下help_no_hash函数都做了些什么,该函数在libt.c文件中定义。
首先,help_no_hash调用find_name来获取指定函数地址。find_name的实现在util.c文件中,过程就是通过指定的pid读取/proc/