這裏介紹下關於 Android 的逆向準備:算法
Xposed 框架開發基礎知識
框架
1.定義目標工具
2.反編譯加密
3.分析代碼插件
這裏使用的反編譯工具是 Jadx,它能夠將 APK 直接反編譯成 Java 代碼,而且具備 GUI 界面方便操做調試
經過包名和一些代碼分析,肯定是被 360 加固後,接下來須要嘗試脫殼。對象
脫殼使用的是 FDex2,這是一款基於 Xposed 框架的 Hook 插件,對 360 加固比較有效。它的原理是 Hook ClassLoader,而後經過反射調用 getDex 方法獲取 Dex 對象並導出,這裏的 Dex 就是 APP 真正執行的部分。固然並非全部加固均可以被 Hook 到,更多脫殼手段還須要進階研究。接口
FDex2 使用方式很簡單,在 Xposed 框架裏激活後,選擇目標 APP,而後從新打開 APP 後,被捕獲的 Dex 文件會被保存下來開發
Dex 是什麼?簡單地說,在 APK 構建過程當中,Java 代碼編譯後產生的 class 文件,須要再轉化成 Dex 文件,才能被 Android 虛擬機運行。get
所以咱們獲得的 Dex 文件,就能夠再次反編譯成 Java 代碼,咱們仍是使用 Jadx,它一樣支持 Dex 格式。
因爲 Dex 有體積限制,會被分包,如上圖咱們導出了不止一個文件,能夠依次加載它們,經過搜索目標 API 的關鍵詞,來找到目標代碼塊
代碼通常都會被反混淆,變量和方法名都是 a b c d 這樣,而後搜索一個方法名,會發現有一萬個同名的變量。還好 Jadx 內置了反混淆,開啓後變量和方法被重命名爲惟一編號,這樣搜索時就不會有重名的狀況了。
以後咱們經過 Jadx 將代碼導出成 Gradle 項目,藉助 IDEA 的強大功能開始進行代碼分析。
因爲大部分方法都是被重命名的,致使可讀性嚴重降低,沒法推測每一個方法究竟是什麼功能
咱們只要遵循一些技巧,就能夠大幅減小工做量。因爲分析過程比較繁瑣,這裏就不結合具體代碼了,只作一些理論總結:
當你找到了加密方法,那麼能夠複製出來獨立執行,而後本身構建參數傳入加密,經過模擬請求,看接口是否正常返回。
須要注意,若是不能正常請求,並不必定是你找錯了地方,也有可能代碼自己有誤,反編譯的代碼是有概率會出現這種狀況的,致使你執行的和 APK 執行的結果不一樣。遇到這種狀況,只能經過其餘手段來修正代碼,如閱讀 Smali 代碼、經過 Hook 等手段。
完成代碼分析後,恭喜你已經成功完成一次逆向,接下來就能夠實現一些功能,好比模擬登陸請求。建議直接使用 Java 代碼,由於大部分加密用的是 Java 內置的 RSA / AES 加密算法,其餘語言的第三方庫實現並不充分。