天天看點

阿裡系産品Xposed Hook檢測機制原理分析

導語:

在逆向分析android App過程中,我們時常用的用的Java層hook架構就是Xposed Hook架構了。一些應用程式廠商為了保護自家android App不被Xposed Hook架構給hook。于是想盡各種方法檢測自己産品是否被Xposed Hook給Hook。筆者最近逆向分析阿裡系的産品,發現阿裡系的産品能夠檢測自否給Xposed Hook了。本文就帶領給位一起看看官阿裡系産品是如何做的這一點的,本文就選擇阿裡的支付寶作為我們分析對象。

檢測現象:

  1. 編寫一個簡單的支付寶的Xposed hook 子產品, 子產品代碼如下:
阿裡系産品Xposed Hook檢測機制原理分析

2.安裝XPosed hook mo子產品,重新開機裝置,打開支付寶,就會看到如下一個對話框:非法操作的,你的手機不安全。這說明支付寶檢測自己被Hook了。

阿裡系産品Xposed Hook檢測機制原理分析

分析過程:

0.分析工具和分析對象

樣本:Alipay_wap_main_10.0.18

工具:AndroidKiller, JEB2.2.7

源碼:XPosed 架構源碼

  1. 為了快速找到代碼Xposed的檢測代碼位置,我們就不從對話框作為分析入口啦,我們直接使用androidKiller打開檔案Alipay_wap_main_10.0.18.apk, 然後在工程中搜尋xposed相關的關鍵字,例如:xposed
阿裡系産品Xposed Hook檢測機制原理分析

根據搜尋結果,我們找到看了兩個security相關的類。我們使用JEB工具對這兩個類進行分析,我們暫且分析CheckInject類。

阿裡系産品Xposed Hook檢測機制原理分析

我們看到這裡獲得通過反射獲得一個類de.robv.android.xposed.XposedHelpers 的一個對象,于是我們可以确認發現代碼就這裡。

  1. 由于Smali代碼是經過混淆的代碼,不便于讀者閱讀,于是筆者将代碼整理如下:
阿裡系産品Xposed Hook檢測機制原理分析

通過反射擷取de.robv.android.xposed.XposedHelpers類的一個對象obXposedHelper,然後調用CheckKeywordInFiled 檢測obXposedHelper成員fieldCache,methodCache,constructorCache是否有支付寶包的關鍵字,CheckInject.CheckKeywordInFiled, 這個函數代碼 。筆者也這個函數整理如下:

阿裡系産品Xposed Hook檢測機制原理分析

fieldCache, methodCache,constructorCache然是XposedHelpers的靜态成員,類型是HashMap<String, Field>

阿裡系産品Xposed Hook檢測機制原理分析

通過反射周遊這些HashMap 緩存字段, 如字段項的key中包含支付寶的關鍵字"alipy" “taobao”,等資訊, 者認為是檢測有Xposed 注入

4.我們來繼續分析Xposed hook架構是如何将hook資訊存儲到fieldCache,methodCache,constructorCache這些緩存字段當中的(我們需要下載下傳XPosed 源碼分析,github有下載下傳)。我們最通常調用findAndHookMethod 函數hook一個函數, 是以我們分析這個函數,函數代碼如下:

阿裡系産品Xposed Hook檢測機制原理分析

這個函數我們暫時還無法看到存儲相關的代碼,這個主要實作依賴函數findMethodExact, 于是我們繼續分析

阿裡系産品Xposed Hook檢測機制原理分析

我們發現 methodCache.put(fullMethodName, e); 将方法名和方法Method 存儲在方法緩存中嗎。

5.CheckInject類類中除了有XPosed 檢測, 還有SO注入檢測機制的代碼和手機檢測是否Root的代碼。筆者也将這些代碼整理分享給各位看官:

● Root檢測代碼如下

阿裡系産品Xposed Hook檢測機制原理分析

檢測依據是:擷取default.prop 中檔案ro.secure的值1 且 /system/bin/ 或者/system/xbin 有su程式可認定程式被root了

● So注入檢測

由于實作比較簡單,就不貼代碼,直接闡述原理吧。SO注入檢測原理:讀取目前程序的maps檔案, 周遊每一行, 是否程序中使用so名中包含關鍵"hack|inject|hook|call" 的資訊,“hack|inject|hook|call” 字元資訊使用Base64加密, 如下:

阿裡系産品Xposed Hook檢測機制原理分析

分析結論和安全建議:

結論:

1.支付寶的Xposed hook 檢測原理: Xposed Hook 架構将Hook資訊存儲在fieldCache, methodCache,constructorCache 中, 利用java 反射機制擷取這些資訊,檢測Hook資訊中是否含有支付寶App中敏感的方法,字段,構造方法。

2.支付寶的SO檢測原理: 檢測程序中使用so名中包含關鍵"hack|inject|hook|call" 的資訊。

3.支付寶的Root檢測: 是否含有su程式和ro.secure是否為1

安全建議:

像這些 “de.robv.android.xposed.XposedHelpers”,“fieldCache”,“methodCache”,“constructorCache” 想這些敏感字元串資訊可以進行一些簡單加密。防止使用者直接根據關鍵字搜尋找到關鍵函數。

轉載來源:https://bbs.pediy.com/thread-218848.htm

繼續閱讀