Android APK 反編譯工具介紹

本篇博客主要針對 MacOs勤讽,介紹幾種常用的反編譯工具吉懊。

1. ApkTool

APKTool 是 Google 提供的 APK 編譯工具叼耙,能夠反編譯及回編譯 apk,我們一般用來反編譯資源文件执隧,代碼反編譯之后都是 smali 文件。需要 java 支持户侥。

功能
  • 還原 Apk 中所包含的 resources.arsc镀琉、classes.dex、9.png 和 xml 等資源文件
  • 對 Apk 進行重新(二次)打包
  • 反編譯依賴于 Framework 的 apk 文件
  • 運行調(diào)試 Smali 文件
安裝
  1. 將下載好的 apktool 文件與 apktool.jar 文件準備好
  2. 將 apktool.jar 與 apktool 移動到 /usr/local/bin 目錄下(可以通過在終端中輸出命令 open /usr/local/bin 來打開這個目錄)
  3. 為上述兩個文件增加可執(zhí)行權限蕊唐,即在終端中輸入并執(zhí)行:
1. chmod +x apktool.jar
2. chmod +x apktool
  1. 在終端輸入 apktool 看是否可以運行屋摔,如果可以運行,輸出結果如下圖替梨。(如果不可以钓试,則需要在系統(tǒng)偏好設置中打開安全與隱私中點擊仍要運行apktool.jar)
使用

我們可以利用 ApkTool 反編譯 apk 獲得 AndroidManifest.xml、xml文件和圖片資源副瀑。
在終端執(zhí)行以下操作:

1. cd /你存放apk的目錄或在下面命令中使用xxx.apk文件的絕對路徑
2. apktool d xxx.apk //該命令執(zhí)行后會在同級目錄下生成一個與你編譯的apk同名的目錄

以某版本的 docs.apk 為例:

解析出來的文件目錄結構如下:

APkTool 只能提取資源文件弓熏,對于 .dex 類型的文件是無法查看的,這時候需要用到 dex2jar 了糠睡。


2. dex2jar

dex2jar 是一個能操作 Android 的 dalvik(.dex) 文件格式和 Java 的 (.class) 的工具集合挽鞠。

功能
  • dex-reader/writer : 用于讀寫 Dalvik Executable (.dex) 文件格式. 包含一個簡單的API (與ASM相似)
  • d2j-dex2jar : 執(zhí)行 .dex 到 .class 的文件格式轉換
  • smali/baksmali : 與 smali 工具功能一致,但是對中文更友好
安裝

直接解壓即可狈孔。

使用
  1. 先將 apk 文件進行解壓信认,可使用解壓軟件,也可將文件后綴改為 .rar 然后再通過終端 unzip xxx.rar 命令行解壓均抽。(注意:直接解壓 apk 和使用 ApkTool 反編譯 apk 都能獲得AndroidManifest.xml嫁赏,但直接解壓獲得的 AndroidManifest.xml 是亂碼的,無法直接查看到忽;同時橄教,直接解壓 apk 獲得 res 資源文件是不包含 resources.arsc 部分的清寇,而使用 ApkTool 反編譯出來的 res 是包含的。)
  2. 從上圖中可以看到护蝶,直接解壓后有3個 classes.dex 文件(應用了 MultiDex 所致)华烟,這就是項目的源碼。將這幾個 classes.dex 文件拷貝到解壓的 dex2jar 目錄下持灰,然后執(zhí)行在終端如下命令進行反編譯:
1. cd /你的dex2jar解壓目錄
2. sh d2j-dex2jar.sh classes.dex 
3. sh d2j-dex2jar.sh classes2.dex
4. sh d2j-dex2jar.sh classes3.dex

PS:如果出現(xiàn) permission denied d2j_invoke.sh 的提示盔夜,則需要在終端里執(zhí)行:

sudo chmod +x d2j_invoke.sh // chmod +x 命令為取消權限

然后再重新執(zhí)行:

sh d2j-dex2jar.sh classes.dex
  1. 通過上面的步驟,我們已經(jīng)將 .dex 轉換成 .jar堤魁,接下來就可以使用 JD-GUI 或 jadx 來查看反編譯后的程序源碼了喂链。


3. JD-GUI

一款免費的 Java 反編譯工具,使用 C++ 開發(fā)

功能
  • 該工具可以反編譯單個妥泉、多個 jar 包
  • 擁有獨立圖形界面椭微,只要把文件拖到軟件的那個框框里面,就可以看到源碼了
使用

不需要安裝盲链,直接雙擊運行 jd-gui-1.4.0.jar 打開軟件蝇率,然后將 classes-dex2jar.jar 文件拖拽到 JD-GUI 界面上即可,然后就可以愉快地查看源碼了刽沾。

還可以將反編譯后的文件保存本慕,然后再用 Android Studio 打開。


4. jadx

一款跨平臺的有 GUI 界面的反編譯工具

功能
  • 可以直接將 apk 文件進行反編譯
  • 反編譯輸出 Java 代碼
  • 圖形化的界面侧漓,拖拽式的操作锅尘,強大的搜索功能
  • 導出 Gradle 工程
安裝

方式一:下載并解壓后點擊 bin 目錄下的 jadx-gui 即可打開。
方式二:由于 jadx 本身是 github 上的一個開源項目布蔗,所以可以直接 clone 源代碼藤违,打開終端執(zhí)行以下命令,進行編譯安裝何鸡。

1. git clone https://github.com/skylot/jadx.git
2. cd jadx
3. ./gradlew dist

然后將 build/jadx/bin 加入到環(huán)境變量即可纺弊。

使用

雙擊 bin 目錄下的 jadx-gui 即可打開,使用方式同 JD_GUI 一致骡男,也同樣可以通過 File->Save All 來保存反編譯后的文件再用 Android Studio 打開淆游。
除此之外,jadx 也支持直接用命令行來反編譯文件:

1. jadx -d out classes.dex #直接輸出.java文件到out目錄
2. #or
3. jadx-gui classes.dex #使用gui打開

另外隔盛,可以直接用 jadx-gui 打開apk 文件進行反編譯犹菱。


總結

  • 如果只是想得到 .xml 文件和圖片資源等,則直接使用 ApkTool 來反編譯 apk 吮炕。
  • 如果想查看項目源代碼腊脱,則有以下兩種方式:
  1. 可以先將 apk 直接解壓,再利用 dex2jar 將文件由 .dex 轉換為 .jar龙亲,然后使用 JD-GUI 或 jadx 打開 .jar 文件即可看到源碼陕凹,可選擇保存再用其他 IDE 打開悍抑。
  2. 直接用 jadx 反編譯 apk 。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杜耙,一起剝皮案震驚了整個濱河市搜骡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌佑女,老刑警劉巖记靡,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異团驱,居然都是意外死亡摸吠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門嚎花,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寸痢,“玉大人,你說我怎么就攤上這事紊选〗蜗伲” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵丛楚,是天一觀的道長。 經(jīng)常有香客問我憔辫,道長趣些,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任贰您,我火速辦了婚禮坏平,結果婚禮上,老公的妹妹穿的比我還像新娘锦亦。我一直安慰自己舶替,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布杠园。 她就那樣靜靜地躺著顾瞪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抛蚁。 梳的紋絲不亂的頭發(fā)上陈醒,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音瞧甩,去河邊找鬼钉跷。 笑死,一個胖子當著我的面吹牛肚逸,可吹牛的內(nèi)容都是我干的爷辙。 我是一名探鬼主播彬坏,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼膝晾!你這毒婦竟也來了栓始?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤玷犹,失蹤者是張志新(化名)和其女友劉穎混滔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體歹颓,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡坯屿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巍扛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片领跛。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撤奸,靈堂內(nèi)的尸體忽然破棺而出吠昭,到底是詐尸還是另有隱情,我是刑警寧澤胧瓜,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布矢棚,位于F島的核電站,受9級特大地震影響府喳,放射性物質(zhì)發(fā)生泄漏蒲肋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一钝满、第九天 我趴在偏房一處隱蔽的房頂上張望兜粘。 院中可真熱鬧,春花似錦弯蚜、人聲如沸孔轴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽路鹰。三九已至,卻和暖如春收厨,著一層夾襖步出監(jiān)牢的瞬間悍引,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工帽氓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留趣斤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓黎休,卻偏偏與公主長得像浓领,于是被迫代替她去往敵國和親玉凯。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 早在4年前我曾發(fā)表過一篇關于《Android開發(fā)之反編譯與防止反編譯》的文章联贩,在該文章中我對如何在Windows平...
    CrazyCodeBoy閱讀 4,603評論 3 10
  • 前言 處理反編譯漫仆,首先先要了解apk文件的結構,然后是編譯過程泪幌,最后是反編譯盲厌。反編譯Apk的目的就是Apk拆成我們...
    yzzCool閱讀 5,715評論 0 8
  • apk是安卓工程打包的最終形式,將apk安裝到手機或者模擬器上就可以使用APP祸泪。反編譯apk則是將該安卓工程的源碼...
    隋胖胖LoveFat閱讀 66,644評論 6 56
  • 上次在義烏受到同學s誠心的接待没隘,不說吃的有多好懂扼,關鍵她有那份心,讓我們幾個感動滿滿右蒲,內(nèi)心也是十足的溫暖阀湿。 平時我和...
    紅豬豬閱讀 525評論 0 1
  • 到了春天 我就給你寫信 頭頂上空常有深邃純凈的湛藍 掠過高原的風依舊冰冷 黑頸鶴在天暖后將翩然離別 馬路兩邊的樹干...
    三喵喵閱讀 241評論 0 0