iT邦幫忙

1

Android 逆向工程 - 不確定 App 是否有混淆,所以反組譯看看 ( 4步驟 )

  • 分享至 

  • xImage
  •  

免責聲明

我花了大量的私人時間替專案研究 App 是否混淆成功,混淆結果是否達到需求。雖然我只會做簡單的反組譯跟實際上能達到商業需求的程度相比根本不值得一提,不過我還是想將筆記與大家分享,因此看完此篇而做任何事情與我本人無關,不過還是希望不要做違法的事情。

前情提要

根據Shrink, obfuscate, and optimize your app文章,啟用 minifyEnabled 可以縮小、優化 App 順便混淆程式碼。

如何驗證成功啟用 minifyEnabled

要檢驗 minifyEnabled 啟用,就得反組譯 App。

啟用與未啟用對照圖

未啟用(未混淆) 啟用(混淆)

根據上圖可以發現未啟用的程式碼一覽無遺,而啟用後的程式碼、Package、Path、Class、Method、Field 都被英文字母取代

反組譯 4 步驟

第一步 - 取得 Apk

取得 Apk 有3種方式

  • 手機端系統 取得
  • 把 App 在 Google Play 商店的網址丟給第三方解析。ex.apkpure
  • 開發者端打包取得
    而開發者端打包格式有兩種:
    • Apk
    • AAB(不討論)

第二步 - 取得 classes.dex

把 Apk 副檔名改成 Zip 副檔名,並解壓縮取 classes.dex


第三步 - 打包成 Jar 檔

為什麼需要再次打包成 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 逆向十分重要。

使用 dex-tools-2.1-SNAPSHOT 工具打包

  • 3-1 將 classes.dex 放入 dex-tools-2.1-SNAPSHOT 工具所在位置的資料夾當中
  • 3-2 開啟 cmd,在 dex-tools-2.1-SNAPSHOT 工具所在路徑打入 cmd 按下 Enter
  • 3-3 下指令打包
    d2j-dex2jar classes.dex
  • 3-4 獲取到 Jar 檔

網路上看到的資源都是使用 dex2jar-2.0 而不是 dex-tools-2.1-SNAPSHOT耶?
這兩個是一樣的東西,都是 pxb1988 的開源,我會使用 dex-tools-2.1-SNAPSHOT 是因為在使用 dex2jar-2.0 時發生錯誤。


第四步 - 使用 JD-GUI 觀賞 Jar 裡面的程式碼

為什麼不能直接解壓縮 Jar 看呢? 因為有加密

使用 JD-GUI 觀賞 Jar

特別感謝

Arxing Lin
Xindian Wu
Chih Lung Chen

文獻參考

tags: Blog Android 逆向工程

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

2
Cyril
iT邦新手 5 級 ‧ 2022-02-14 00:43:36

JD-GUI 現在沒有在維護了, 推薦另一套 JADX 持續更新中, 另外現在 Android Studio 已經內建方便的 decompiler 功能, 只要用滑鼠把 APK 拉到 Android Studio 也看的到 build 好的 classes

感謝回覆,又增長知識了

我要留言

立即登入留言