Android 反編譯指南

我們下載到的 App 安裝包是 Apk 文件(Android Application Package) 胆绊。通過 Apk 文件辑舷,我們也可以得到這個應(yīng)用的代碼和資源文件何缓,對應(yīng)用進(jìn)行修改还栓。

那么我們?nèi)绾潍@取這些文件呢剩盒?這就需要 Android 反編譯技術(shù)辽聊。

01 所需要的軟件

  • Apktool
    反編譯 xml 文件和 dex 文件跟匆,并可以將編譯后的項(xiàng)目重新打包成 apk玛臂。
    官方下載地址: Apktool
    官方的速度有時候不穩(wěn)定封孙,也可以從我的網(wǎng)盤中下載: 鏈接 密碼:xkao

  • dex2jar
    將 classes.dex 轉(zhuǎn)換為「.jar」文件)
    官方下載地址: dex2jar
    我的網(wǎng)盤: 鏈接 密碼:xkao

  • jd-gui
    查看「.jar」文件
    官方下載地址: jd-gui
    我的網(wǎng)盤: 鏈接 密碼:xkao

02 Apktool

我們可以通過 Apktool 可以將 apk 文件進(jìn)行反編譯,但是直接把 apk 的擴(kuò)展名改成「.zip」也可以對其進(jìn)行解壓并得到一些資源文件橱鹏。

直接解壓和使用 Apktool 的區(qū)別
  • META-INF 里保存 App 的簽名信息
  • classes.dex
    .dex 是 Dalvik 虛擬機(jī)上的可執(zhí)行文件挑围,需要使用 dex2jar 將其轉(zhuǎn)換為 jar 文件
  • AndroidManifest.xml
    Android 清單文件贮勃,向 Android 系統(tǒng)提供應(yīng)用的必要信息寂嘉。
  • assets
    存放一些資源文件字體泉孩,聲音等寓搬。
  • lib
    存放第三方庫
  • original
    存放未經(jīng)過反編譯的等 AndroidManifest.xml 文件
  • res
    存放資源文件句喷,例如圖片,顏色兄春,字符等赶舆。
  • smali
    smali 里存放的是 java 編譯成的 smali 代碼芜茵,smali 相當(dāng)于 Android 虛擬機(jī)上運(yùn)行的語言九串。

直接解壓可以得到一些資源文件蒸辆,但是 AndroidManifest.xml 和其他的 xml 文件都是亂碼析既,通過 Apktool 進(jìn)行反編譯,可以最大限度的還原這些文件的內(nèi)容拂玻。

02 - 1 安裝 Apktool

Windows :

  • 這里 或者我的 網(wǎng)盤鏈接 里下載好 script 腳本文件檐蚜,修改名稱「apktool.bat」(如果從我的網(wǎng)盤下載闯第,無須修改名稱)
  • 這里 或者我的 網(wǎng)盤鏈接 下載 apktool咳短,然后修改名稱為「apktool.jar」

  • 「apktool.jar」「apktool.bat」移動到 windows 目錄(一般在 C://windwos 下)

  • 在命令行中輸入

$ apktool

如果出現(xiàn)

則說明安裝成功咙好,若沒有出現(xiàn)勾效,則需要把「apktool.jar」层宫、「apktool.bat」的路徑添加到系統(tǒng)的環(huán)境變量中其监。

Mac OS:

  • 這里 或者我的 網(wǎng)盤鏈接 里下載好 script 腳本文件棠赛,修改名稱「apktool」(如果從我的網(wǎng)盤下載睛约,無須修改名稱) 。

  • 這里 或者我的 網(wǎng)盤鏈接 下載 apktool贸伐,然后修改名稱為「apktool.jar」捉邢。

  • 「apktool」「apktool.jar」移動到 /usr/local/bin目錄下

  • 在命令行中 cd 到 /usr/local/bin中然后分別輸入下面兩條命令

$ chmod a+x d2j_invoke.sh
$ chmod a+x d2j-dex2jar.sh
  • 在命令行中輸入
$ apktool

出現(xiàn)

則安裝成功

02 - 2 反編譯 Apk

  • cd 到 apk 的目錄下
  • 輸入
$ apktool d test.apk

運(yùn)行完成后宠进,得到一個包含資源文件和代碼的文件:

注意:
此時 dex 文件直接反編譯成了 smali 文件,而我們需要的是 .dex 文件吝镣。

此時再運(yùn)行:

$ apktool d -s -f test.apk

-d 反編譯 apk 文件
-s 不反編譯 dex 文件,而是將其保留
-f 如果目標(biāo)文件夾存在闸溃,則刪除后重新反編譯

此時得到這樣的文件夾:

02 - 3 打包辉川、簽名新的 Apk

為了演示如何將修改過后的 Apk 文件重新打包簽名员串,我寫了一個簡單的 Demo:把 Demo 的背景換了之后寸齐,進(jìn)行打包抄谐、簽名蛹含。

這是初始應(yīng)用程序的運(yùn)行效果:

  • 使用 Apktool 反編譯
  • 打開生成的目錄進(jìn)行修改
    修改 bg.jpg 為另一張準(zhǔn)備好的圖片(注意前后命名一致)浦箱。
  • 重新打包
$ apktool b b_test -o newtest.apk

-b 是指 build
b_test 是剛才反編譯出的文件所在的目錄
-o 用于指定新的文件名稱咽安,這里指定為「newtest.apk」

  • 得到新的 apk 文件

注意:
此時的 apk 文件是不能安裝的妆棒,還需要對其進(jìn)行簽名糕珊。

  • 對新的 Apk 進(jìn)行簽名:
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore testjks -storepass password newtest.apk aliasName

簽名文件是我自己生成的红选,沒有辦法使用 Apk 原來的簽名進(jìn)行簽名纠脾。

現(xiàn)在將 Apk 安裝一下試試看:

可以看到苟蹈,背景資源已經(jīng)成功替換成我們設(shè)置的第二張圖片了慧脱。

03 dex2jar

下載、解壓好 dex2jar

  • 將上一步得到的 classes.dex 文件(有時候還有 classes2.dex菱鸥,說明方法數(shù)過多氮采,把它當(dāng)成 classes.dex 處理就好了)復(fù)制到 dex2jar 解壓好的目錄中鹊漠。

  • 在命令行中運(yùn)行:

$ sh d2j-dex2jar.sh classes.dex

如果提示:

d2j-dex2jar.sh: line 36: ./d2j_invoke.sh: Permission denied

執(zhí)行

$ sudo chmod +x d2j_invoke.sh

后再次執(zhí)行

$ sh d2j-dex2jar.sh classes.dex

運(yùn)行成功躯概,在當(dāng)前目錄下生成了 classes-dex2jar.jar 文件畔师。

04 jd-gui

安裝好 jd-gui 之后,用其將 classes-dex2jar.jar 打開姿锭,就可以看到反編譯出來的 java 代碼了呻此!

這里的代碼沒有經(jīng)過混淆趾诗,所以命名容易識別恃泪,如果是從應(yīng)用市場下載下來的 apk 文件贝乎,反編譯出來的代碼大部分是混淆過后的代碼。

出于對開發(fā)者的尊重和為了保持應(yīng)用的穩(wěn)定却舀,希望大家不要隨意修改別人的應(yīng)用程序挽拔,請僅從技術(shù)層面上妥善利用這一技術(shù)但校!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末术裸,一起剝皮案震驚了整個濱河市袭艺,隨后出現(xiàn)的幾起案子猾编,更是在濱河造成了極大的恐慌宣鄙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇羡,死亡現(xiàn)場離奇詭異设江,居然都是意外死亡叉存,警方通過查閱死者的電腦和手機(jī)度帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瞳秽,“玉大人练俐,你說我怎么就攤上這事⊙嘧叮” “怎么了归形?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵连霉,是天一觀的道長。 經(jīng)常有香客問我讨彼,道長哈误,這世上最難降的妖魔是什么蜜自? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮卢佣,結(jié)果婚禮上重荠,老公的妹妹穿的比我還像新娘。我一直安慰自己虚茶,他們只是感情好戈鲁,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著嘹叫,像睡著了一般婆殿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罩扇,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天婆芦,我揣著相機(jī)與錄音癌压,去河邊找鬼滩届。 笑死浓体,一個胖子當(dāng)著我的面吹牛娄猫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悬蔽,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼禾乘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鳄虱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扩借,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年唬涧,在試婚紗的時候發(fā)現(xiàn)自己被綠了虚缎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陌僵。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡偎谁,死狀恐怖闰渔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情营曼,我是刑警寧澤狂塘,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布硝训,位于F島的核電站,受9級特大地震影響邀窃,放射性物質(zhì)發(fā)生泄漏舵抹。R本人自食惡果不足惜扇救,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一沧烈、第九天 我趴在偏房一處隱蔽的房頂上張望徽千。 院中可真熱鬧牍汹,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽请琳。三九已至竖慧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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