我花了大量的私人時間替專案研究 App 是否混淆成功,混淆結果是否達到需求。雖然我只會做簡單的反組譯跟實際上能達到商業需求的程度相比根本不值得一提,不過我還是想將筆記與大家分享,因此看完此篇而做任何事情與我本人無關,不過還是希望不要做違法的事情。
根據Shrink, obfuscate, and optimize your app文章,啟用 minifyEnabled 可以縮小、優化 App 順便混淆程式碼。
要檢驗 minifyEnabled
啟用,就得反組譯 App。
未啟用(未混淆) | 啟用(混淆) |
---|---|
根據上圖可以發現未啟用的程式碼一覽無遺,而啟用後的程式碼、Package、Path、Class、Method、Field 都被英文字母取代
取得 Apk 有3種方式
手機端系統
取得第三方解析
。ex.apkpure
開發者端打包
取得把 Apk 副檔名改成 Zip 副檔名,並解壓縮取 classes.dex
為什麼需要再次打包成 Jar 檔? 為了閱讀 smali 代碼
根據 Android App 反組譯流程(上) 文章表示
關於 Smali ,在 Android 官網中並無相關介紹,它應該出自 JesusFreke 的開源項目 smali。smali/baksmali 是針對 dalvik 使用的 dex 格式的彙編/反彙編器。它的語法基於 Jasmin's/dedexer,支持 dex 格式的所有功能(註釋,調試信息,行信息等等)。因此我們可以認為 smali 和 Dalvik 字節碼文件是等價的。事實上,Apktool 也正是調用這個工程生成的 jar 包來進行反編譯生成 smali 代碼的。對生成的 smali 代碼進行修改之後再重打包,就可以修改 apk 中的邏輯了。因此,能閱讀 smali 代碼對我們進行 android 逆向十分重要。
d2j-dex2jar classes.dex
網路上看到的資源都是使用 dex2jar-2.0 而不是 dex-tools-2.1-SNAPSHOT耶?
這兩個是一樣的東西,都是 pxb1988 的開源,我會使用 dex-tools-2.1-SNAPSHOT 是因為在使用 dex2jar-2.0 時發生錯誤。
為什麼不能直接解壓縮 Jar 看呢? 因為有加密
使用 JD-GUI 觀賞 Jar
Blog
Android
逆向工程
JD-GUI 現在沒有在維護了, 推薦另一套 JADX 持續更新中, 另外現在 Android Studio 已經內建方便的 decompiler 功能, 只要用滑鼠把 APK 拉到 Android Studio 也看的到 build 好的 classes
感謝回覆,又增長知識了