五、Android安全機制之反編譯(你也可以擁有iPhone X)
Android應用的反編譯需要了解smali,熟練使用常用的反編譯工具。比如apktool,Jd-jui,dex2jar,Android逆向助手,AXMLPrinter2,jadx,Xposed,IDA,APK改之理,AndroidKiller以及一些adb、aapt指令和windows批處理等。
關於反編譯的流程和工具的使用方式,下面以一個反編譯例項來進行闡述。首先明確我們的目標就是逆向手機QQ,需要達到兩個目的:
1,修改QQ空間說說尾巴的手機型號,比如修改為iPhoneX,先上效果圖
2,阻止QQ訊息的撤回。
實現這兩個功能只需要三步即可:
破解簽名→修改本機資訊→找到並刪除撤回邏輯程式碼
1、破解簽名:
首先下載此工具,然後根據操作說明,配置好JAVA_HOME和aapt工具目錄,把手機QQ的Apk命名為src.apk放入資料夾,雙擊kstools.bat即可執行破解。
步驟都很明確,這裡就不贅述了,執行完後生成signed.apk,直接安裝發現並沒有破解成功,提示Appid is invalid!
直接開啟把剛剛安裝的apk裡面class.dex解壓出來用jadx開啟:
發現hook程式碼是成功添加了的,然後檢視是否有新增在application的attachBaseContext
顯然並沒有新增hook呼叫程式碼,這也是此工具的一個bug,那麼接下來我們手動新增,為了方便,我這裡寫了兩個批處理Dex2Smali.bat和DexDecompile.bat:
Dex2Smali是把dex轉為smail,當前資料夾放入class.dex,雙擊生成包含smail的classes資料夾:
接著找到從classes資料夾找到QFixApplication.smali,接下來只要修改此檔案即可
為了更便捷的修改,這裡直接將此檔案複製到AndroidStudio裡,同時把那兩個hook檔案程式碼也複製過來,保持相同的包名,然後在相同包名下新建一個QFixApplication.java繼承Application,重寫attchBaseContext方法,在方法裡寫入hook程式碼的呼叫,為什麼要相同包名呢?因為生成的smali的方法呼叫是攜帶包名資訊的,如果不一樣則會重打包失敗。弄好了如下圖所示:
接著通過外掛執行Smali轉換,外掛請自行去下載安裝
轉換完成後直接找到attchBaseContext方法,複製下面紅框那句,這句其實就是呼叫hook方法轉換為smali程式碼的形式。
接下來開啟QFixApplication.smali,找到attchBaseContext方法新增上面這句程式碼
把修改好的QFixApplication.smali檔案覆蓋原檔案,完成後直接執行DexDecompile.bat,這個批處理檔案作用是將smali轉成dex,然後替換src.apk裡的dex檔案,重簽名,adb安裝和開啟應用。通過這一系列的步驟之後,簽名就已經被破解,並可以直接安裝開啟,此時的QFixApplication.java的attchBaseContext程式碼如下:
2、修改本機資訊:
至此,簽名已破解完畢,接下來修改本機資訊,安卓中獲取手機資訊是通過Build類來獲取,所以只要修改Build類裡對應的值,則可以修改本機的一些資訊,比如,硬體廠商,手機型號等資訊。在ServiceManagerWraper新增如下程式碼,轉為smali並替換即可。
3、找到並刪除撤回邏輯程式碼:
當訊息被撤回,聊天視窗會顯示xxx撤回了一條訊息,那麼我們以“撤回了一條訊息”這個字串為入口,找到最終的邏輯程式碼,為方便查詢,這裡用了改之理工具開啟。
直接搜尋“撤回了一條訊息”,在strings.xml裡搜尋到對應的結果,顯然資源名被混淆了。
搜尋[email protected],找到對應的id
接著再搜尋id“0x7f0b2b32”
程式碼裡有兩個類用到,分別是TroopHandler和BaseMessageManager,因為訊息撤回可以在多個場景(私聊,群聊,討論組聊)下使用,應該有統一的某處處理,猜想應該是在BaseMessageManager類裡處理。BaseMessageManager類用到此id的在一個 public void b(ArrayList arrayList) 方法裡。直接暴力一點把BaseMessageManager.smali裡這個方法裡所有程式碼去除,然後替換重打包。發現訊息已經無法被撤回了,也證明了我們的猜想是正確的。
適當的猜想有助於我們在反編譯過程中快速找到正確的突破點。上面搜尋關鍵資訊用到了改之理,它是一款反編譯編輯器,反編譯後的smali程式碼可以直接編輯完重打包安裝,但僅限於體積較小、未加固、未防apktool的apk,所以侷限性很大,這裡只用到了它的搜尋功能。
鄭重宣告:本編內容只限於學習研究範圍,請勿用於商業謀利及任何非法的目的,否則帶來一切法律責任都由操作者承擔,與本文作者無關。