作者:
獵豹移動安全中心
·
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/