Xposed 為你開啟一扇窗
內容簡介: 本文先介紹了Xposed原理,再通過逆向支付寶,介紹Xposed在android中的使用。帶你在android系統中遨遊。
Xposed 框架是一款可以在不修改 APK 的情況下影響程式執行(修改系統)的框架服務,基於它可以製作出許多功能強大的模組,且在功能不衝突的情況下同時運作,在這個框架下,我們可以載入很多外掛 App ,這些外掛 App 可以直接或間接劫持、篡改、偽造一些資訊。
原理探究
Android 平臺的動態劫持,通過替換 /system/bin/app_process 程式控制 Zygote 程序,使得app_process在啟動過程中會載入 XposedBridge.jar 這個 jar 包,從而完成對 Zygote 程序及其建立的 Dalvik 虛擬機器的劫持。理論上我們的外掛 APP 可以 hook 到系統任意一個 Java 程序zygote、systemserver、systemui。
原理就不講那麼多了,網上有很多分析的文章,比如:
Xposed框架原理深入研究
https://blog.csdn.net/ascii2/article/details/47974217
Dalvik虛擬機器原理及Xposed hook原理
https://cloud.tencent.com/developer/article/1193511
Android Hook框架Xposed原理與原始碼分析
https://blog.csdn.net/wxyyxc1992/article/details/17320911
不得不稍微提一下:Method中,有兩個非常重要的指標:
有興趣的可以去研究一下,這裡不做贅述。
免Root使用
VirtualXposed,英文原話 “A simple app to use Xposed without root, unlock the bootloader or modify system image, etc. “ ,翻譯:“使用 VirtualXposed 可以免 root 、不用解鎖 bootloader 或修改系統映象”。
官方文件: https://vxposed.com/
GitHub: https://github.com/android-hacker/VirtualXposed
Xposed組成部分
Xposed的C++部分
主要是用來替換 /system/bin/app_process 併為 XposedBridge 提供 JNI 方法。
XposedInstaller
Xposed 的安裝包,負責配置 Xposed 工作的環境並且提供對基於 Xposed 框架的 Modules 的管理。
在安裝 XposedInstaller 之後, app_process 與 XposedBridge.jar 放置在了 /data/data/de.robv.android.xposed.installer
XposedTools
XposedTools 就是用來幫助我們編譯 Xposed 和 XposedBridge 的
XposedMods
開發者使用 Xposed 開發的一些 Modules
Xposed使用
AndroidManifest.xml
assets/xposed_init 此檔案內容新增Xposed入口類路徑
app/lib/ 此路徑下,整合 XposedBridgeAPI-89.jar ,
build.gradle 中新增
compileOnly files('lib/XposedBridgeAPI-89.jar')
然後,我們就可以在 Xposed Installer 中看到我們自己定義的模組了。
注意:在執行 Xposed 之前,需要把 Install Run 去掉哦。每次修改執行 HOOK 相關之處的程式碼,都需要重啟手機!
演示
我是如何分析的?
開啟App,比如這個頁面,為了不增加收入,就把碼給擋住了,;-)
這樣我們在用 Accessibility 拿到當前頁面的 ClassName ,比如這樣:
這樣就給我們反編譯出來的程式碼找到了分析入口。對就從這個類下手。 className====類路徑+類名。 className 在 Xposed 框架使用時,用來拿到 class 。
接下來我們使用 Apktools 開啟需要學習的 App,慢慢讀起來,學習到很多優秀之處。
解壓反編譯包的資源
找到二維碼頁面的 Activity :
找到相關元件 Field :
在分析的過程中,發現了一個點,對於我們熟悉 App 的個別模組的邏輯由很大幫助,一個日誌驗證類,客官請看:
所以我們平時在列印 log 時一定要注意咯。另外,在分析 App 時,看到混淆的程式碼,方法、變數等名稱都已經變化了,這就要求當使用 Hook 時需要根據不同版本適配。
如何使用Xposed?
下面我們就從三個方面演示一下
Hook Android系統方法
這樣就輕輕鬆鬆hook住系統方法,任何App在呼叫時返回我們修改的內容。手機上很多系統方法修改後,一個物理手機就變成多個虛擬手機了。
Hook第三方App(最最有名的支付工具:支付寶)
這樣就很容易的拿到我們自己設定支付寶金額與備註的收款碼了。比如 qrCodeUrl 就是長這樣:"https://qr.alipay.com/sldgjsdlgjio23o8hned9nd?t=1546998123456"
Hook日誌類(風險)
這是重點強調風險:列印日誌的逆向風險。隨便打一下 log ,我們的 app 邏輯就很容易被捋出來。
社群文化
論壇: https://api.xposed.info
Xposed API: https://xposed.appkg.com/
Github: https://github.com/rovo89/Xposed.git
xda-developers(下載資源最好在這裡哦):
https://forum.xda-developers.com/showthread.php?t=3034811
總結
工程原始碼Github:
https://github.com/donald99/XposedShare
Xposed太酷了。值得我們深入學習研究。
其實 Xposed 並沒有想象中那麼複雜,原理和相關的 API 都很簡單,難的是 逆向分析的過程 ,實現 Hook :反編譯後分析亂亂的程式碼,打日誌除錯輸出堆疊資訊,抓包等等,需要我們去分析很多未知的東西,不斷猜測,不斷嘗試,折騰一番可能毫無進展,不過不要灰心,有耐心總會找到靈光一現的那一刻。另外研究之後,在開發我們的APP時,對安全威脅方面就會有意識避讓。
真正牛逼的不是使用的人,而是他(rovo89)。
以上僅供學習研究,用於其他後果自負。
--END--
識別二維碼,關注我們