APK反編譯工具的使用

前言

處理反編譯魄揉,首先先要了解apk文件的結(jié)構(gòu)棉饶,然后是編譯過程,最后是反編譯放前。
反編譯Apk的目的就是Apk拆成我們可以閱讀的文件干奢。通過反編譯痊焊,我們一般想要得到里面的AndroidManifest.xml文件、res文件和java代碼忿峻。

任務

了解apk文件的結(jié)構(gòu)薄啥,怎樣編譯,最后要會簡單的反編譯一些Apk.

了解apk文件

首先來簡單的說明下Apk文件本質(zhì)上其實是一個zip包逛尚。直接拿解壓工具解壓就可以看到其中包含了什么垄惧。
為了方便看apk的目錄,我們引入我們的第一個工具Android Studio,沒錯就是我們的官方編譯工具绰寞。

Android Studio 自帶的 APK Analyzer 可直接查看APK內(nèi)的 圖片到逊,xml內(nèi)容,dex結(jié)構(gòu)滤钱,文件尺寸等觉壶,還可以比較兩個apk的差異。
雖然不能導出資源有點可惜件缸,但已經(jīng)很強大方便了铜靶。
用法:將 apk 拖入 AndroidStudio 的窗口就好了。
參考:安卓官方文檔

下面是自己拖入的一個APK:

上圖很詳細的說明了各個文件的作用他炊。

Android 打包流程(編譯過程)

在了解了 apk 文件的結(jié)構(gòu)后争剿,我們開始分析 Android 的打包流程。

通常有2種打包方式:

  • Android Studio圖形界面 點擊run按鈕
  • 命令行方式 gradlew assembleDebug, gradlew assembleRelease

方式1使用自動生成的debug keystore簽名痊末;方式2如果是Release包使用release keystore簽名蚕苇,如果是Debug包則使用debug keystore簽名。

下面展示最基本的打包流程:

上圖是Android官方提供的打包簡略流程圖凿叠。清晰地展示了一個Android Project經(jīng)過編譯和打包后生成apk文件涩笤,然后再經(jīng)過簽名,就可以安裝到設備上。

下面我們分析一下詳細流程辆它,最好的還是看圖:

我們先分析新版本:
典型 Android 應用模塊的構(gòu)建流程通常依循下列步驟:(下面是官方文檔)

  1. 編譯器將您的源代碼轉(zhuǎn)換成 DEX(Dalvik Executable) 文件(其中包括運行在 Android 設備上的字節(jié)碼),將所有其他內(nèi)容轉(zhuǎn)換成已編譯資源履恩。

  2. APK 打包器將 DEX 文件和已編譯資源合并成單個 APK锰茉。不過,必須先簽署 APK切心,才能將應用安裝并部署到 Android 設備上飒筑。

  3. APK 打包器使用調(diào)試或發(fā)布密鑰庫簽署您的 APK:

    a. 如果您構(gòu)建的是調(diào)試版本的應用(即專用于測試和分析的應用),打包器會使用調(diào)試密鑰庫簽署您的應用绽昏。Android Studio 自動使用調(diào)試密鑰庫配置新項目协屡。

    b. 如果您構(gòu)建的是打算向外發(fā)布的發(fā)布版本應用,打包器會使用發(fā)布密鑰庫簽署您的應用全谤。要創(chuàng)建發(fā)布密鑰庫肤晓,請閱讀在 Android Studio 中簽署您的應用。

  4. 在生成最終 APK 之前认然,打包器會使用 zipalign 工具對應用進行優(yōu)化补憾,減少其在設備上運行時的內(nèi)存占用。

構(gòu)建流程結(jié)束時卷员,您將獲得可用來進行部署盈匾、測試的調(diào)試 APK,或者可用來發(fā)布給外部用戶的發(fā)布 APK毕骡。

下面是分塊的總結(jié):::

  1. 資源
    Android 打包流程的第一步削饵,是處理資源文件。
    在這個步驟中未巫,起主要作用的是 aapt窿撬。
    剛剛提及的 AndroidManifest.xml, res 文件夾,resource.arsc 文件的生成都與其有關(guān)橱赠,簡單來說尤仍,aapt 解析項目代碼中的 AndroidManifest.xml,收集項目中 res 文件夾的資源文件及 xml 文件狭姨,對其做壓縮以及編譯的處理宰啦。在此過程中,分配了資源 id 并生成了 R.java 文件 以及 arsc 文件饼拍。
  2. 代碼
    上一步得到了 R.java 文件后赡模,將其與項目代碼一起編譯得到 .class文件,然后打包為 jar 包师抄。這個過程中漓柑,還會有混淆代碼這一步驟。之后,再通過 dx 工具辆布,將生成的 jar 包與第三方庫的 jar 包一起編譯為 dex 文件瞬矩。這個過程中,如果是 5.0 以前的系統(tǒng)且超過了 65535 方法數(shù)的限制锋玲,需要人為的分 dex景用,5.0 以后則由 dx 工具包辦。
    到這一步惭蹂,實際上 apk 所需要的主要內(nèi)容已經(jīng)大致齊全了伞插。只需要把上面生成的 AndroidManifest.xml,classes.dex盾碗,res文件夾媚污,resource.arsc 打包進 apk,并且將項目工程中的 assets 以及 lib 目錄一并放入廷雅,就有了一個未經(jīng)簽名的 Android 安裝包了耗美。
  3. 簽名
    接下來還缺簡單但是卻關(guān)鍵的最后一步,那便是 apk 包的簽名榜轿,這一步在之前對 META-INF 的介紹中幽歼,實際已有提及。只需要按步驟生成 MANIFEST.MF, CERT.RSA谬盐,CERT.SF 并放入META-INF 文件夾即可甸私。

在網(wǎng)上找到一個更詳細的流程圖:鏈接

APK反編譯工具

1.利用ApkTool,獲取AndroidManifest和res等資源文件

工具地址: https://ibotpeaches.github.io/Apktool/
進入官網(wǎng)有詳細的使用過程:https://ibotpeaches.github.io/Apktool/install/
具體如下圖:

我來寫一下我自己的詳細步驟:
1.在D盤新建一個文件夾命名為apktool飞傀,進入此文件夾皇型。
2.新建一個空的apktool.bat文件,點擊上圖第一步的wrapper script跳轉(zhuǎn)到新的網(wǎng)頁砸烦,復制網(wǎng)頁的所有內(nèi)容弃鸦,打開apktool.bat文件,把剛才復制的內(nèi)容粘貼到里面幢痘,保存唬格。
3.點擊上圖第二步的find newest here下載最新的jar包,下載到本地后改名為apktool.jar颜说,移動到D://ApkTool下面购岗。
4.把要反編譯的文件比如no.apk放入到D://ApkTool目錄下,打開命令行门粪,切換到D://ApkTool目錄下喊积,運行java -jar apktool.jar d no.apk
5.執(zhí)行完上面的文件就可以得到一個no文件夾。打開文件夾就能看到AndroidManifest和res等資源文件玄妈。

以上就是ApkTool的使用,最后的結(jié)果如下:

2.dex2jar反編譯dex文件乾吻,jd-gui 可視化反編譯配合使用

2.1 dex2jar反編譯dex文件髓梅,得到java源代碼

dex2jar 可將 .dex 轉(zhuǎn)換成 .jar
參考: https://github.com/pxb1988/dex2jar
下載:https://bitbucket.org/pxb1988/dex2jar/downloads/
詳細的使用步驟:
1.下載dex2jar-2.0.zip的壓縮包(寫這篇文章時名字是dex2jar-2.0),新建文件D://apkdex绎签,然后把dex2jar-2.0.zip放入到apkdex文件中枯饿,解壓得到dex2jar-2.0文件夾.
2.把要反編譯的文件比如no.apk改名為no.zip,把里面的classes.dex取出來復制到dex2jar-2.0文件夾下面。
3.打開命令行诡必,切換到D://apkdex//dex2jar-2.0目錄下鸭你,運行d2j-dex2jar classes.dex -o classes.jar.在文件夾下面就會形成classes.jar文件。
4.如果有多個.dex文件擒权,就多次執(zhí)行d2j-dex2jar xxx.dex -o xxx.jar得到相應的文件。

那么得到的jar文件怎樣看呢阁谆?碳抄?就需要下面的步驟了。

2.2 jd-gui 可視化反編譯查看 .jar 文件

官網(wǎng):http://jd.benow.ca/
下載:http://jd.benow.ca/#jd-gui-download
具體的使用:
下載完成后直接打開场绿,把生成的classes-dex2jar.jar 文件直接拖到里面就可以觀看了.如下圖

3.jadx反編譯Akp剖效,得到.java源代碼

工具地址 :
github: https://github.com/skylot/jadx/releases
sourceforge: http://sourceforge.net/projects/jadx/files/

兩個優(yōu)點:

1.可以直接反編譯出.java文件
2.查看源碼時直接顯示資源名稱,而不是像jd-gui里顯示的資源ID

安裝: 下載完成后進行解壓到自己指定的目錄焰盗。
使用: 進入bin目錄下執(zhí)行jadx-gui.bat璧尸,jadx也有GUI,進入后選中然將要反編譯的apk即可熬拒,運行效果如下爷光。

4.android-classyshark全自動的反編譯工具

下載:https://github.com/google/android-classyshark/releases
使用:直接打開,拖拽apk進入就可以澎粟。運行效果如下:

上面應該夠用的了吧V颉!
如果有新的編譯工具活烙,請在下面留言徐裸。。啸盏。謝謝重贺。。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末回懦,一起剝皮案震驚了整個濱河市气笙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粉怕,老刑警劉巖健民,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贫贝,居然都是意外死亡秉犹,警方通過查閱死者的電腦和手機蛉谜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崇堵,“玉大人型诚,你說我怎么就攤上這事≡Ю停” “怎么了狰贯?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長赏廓。 經(jīng)常有香客問我涵紊,道長,這世上最難降的妖魔是什么幔摸? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任摸柄,我火速辦了婚禮,結(jié)果婚禮上既忆,老公的妹妹穿的比我還像新娘驱负。我一直安慰自己,他們只是感情好患雇,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布跃脊。 她就那樣靜靜地躺著,像睡著了一般苛吱。 火紅的嫁衣襯著肌膚如雪酪术。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天翠储,我揣著相機與錄音拼缝,去河邊找鬼。 笑死彰亥,一個胖子當著我的面吹牛咧七,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播任斋,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼继阻,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了废酷?” 一聲冷哼從身側(cè)響起瘟檩,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澈蟆,沒想到半個月后墨辛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡趴俘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年睹簇,在試婚紗的時候發(fā)現(xiàn)自己被綠了奏赘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡太惠,死狀恐怖磨淌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凿渊,我是刑警寧澤梁只,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站埃脏,受9級特大地震影響搪锣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彩掐,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一淤翔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佩谷,春花似錦、人聲如沸监嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裁奇。三九已至桐猬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間刽肠,已是汗流浹背溃肪。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留音五,地道東北人惫撰。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像躺涝,于是被迫代替她去往敵國和親厨钻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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