Android反編譯apk文件查看源代碼

安裝常用工具

brew install apktool
brew install dex2jar
brew cask install jd-gui

注:這里有個(gè)隱藏的坑兔毒,通過brew安裝的dex2jar可能不是最新版本的,會(huì)導(dǎo)致如下錯(cuò)誤姨俩,這是dex2jar已知的一個(gè)錯(cuò)誤匆赃,詳細(xì)見這里

dex2jar classes.dex -> ./classes-dex2jar.jar
Detail Error Information in File ./classes-error.zip
Please report this file to http://code.google.com/p/dex2jar/issues/entry

解決這個(gè)的辦法是下載最新版的dex2jar https://github.com/pxb1988/dex2jar

工具介紹

apktool:查看二進(jìn)制文件

apk 雖然實(shí)際上是個(gè) zip 可以直接 unzip,但里邊的 xml 都是 Binaray XML 形式蒜胖,需要再次轉(zhuǎn)化成 xml 才能查看消别。apktool 可以將 apk 內(nèi)的資源全部提取出來抛蚤,同時(shí) xml 也轉(zhuǎn)化好可直接查看內(nèi)容。apktool 也可以用于在修改資源后重新打包 apk寻狂。用法如下:

// 提取資源
apktool d <apk_name>
// 提取資源并指定輸出目錄
apktool d <apk_name> -o <foleder_name>
// 重新打包apk
apktool b <folder_name>
//重新打包apk并指定輸出apk名字
apktool b <folder_name> -o <new_apk_name>

但這里apktool反編譯出來只能得到apk的smali文件岁经,即匯編語言版本,并不能得到源代碼


apktool解析后
直接解壓縮后

重新給apk簽名

通常的需求是蛇券,將已有的apk文件通過apktool進(jìn)行提取資源后獲取到smali文件缀壤,修改相應(yīng)內(nèi)容后,將修改后文件再次通過apktool打包成 new_apk纠亚,但若原始apk為debug的塘慕,此時(shí)新打包的 new_apk 沒有簽名,因此需要重新給 new_apk 簽名后才能進(jìn)行安裝:

jarsigner -verbose -keystore ~/.android/debug.keystore -signedjar <signed_apk_name> <new_apk_name> androiddebugkey

其中

Eclipse或Android Studio在Debug時(shí),對(duì)App簽名都會(huì)使用一個(gè)默認(rèn)的密鑰庫:
默認(rèn)在 ~/.android/debug.keystore
密鑰庫名: debug.keystore
密鑰別名: androiddebugkey
密鑰庫密碼: android

dex2jar:將dex文件轉(zhuǎn)換成Jar包

// 將 dex 文件轉(zhuǎn)成 jar 文件
d2j-dex2jar <dex_name> -o <jar_name>
//將apk文件轉(zhuǎn)成jar文件
sh d2j-dex2jar.sh -f <apk_name>

兩種方式打包出來的jar文件是一樣的

jd-gui 將Jar包文件反編譯成java源文件

jd-gui下載解壓后蒂胞,直接打開文件夾里面的JD-GUI图呢,即可打開圖形化界面。將我們上一個(gè)步驟生成的classes-dex2jar.jar直接拖動(dòng)進(jìn)入界面中骗随,就可以看到反編譯之后的源碼結(jié)構(gòu)了蛤织。

注:jd-gui 可視化反編譯查看 .jar 文件。這里存在一個(gè)坑鸿染,jd-gui只能適配java8指蚜,否則無法正常打開運(yùn)行,我就是不小心安裝了java10涨椒,掙扎了好久默默的換了java版本摊鸡,命令如下:

//卸載java10
brew cask uninstall java
//安裝java8
brew tap caskroom/versions
brew cask install java8

APK Analyzer

Android Studio 自帶的 APK Analyzer 可直接查看APK內(nèi)的 圖片,xml內(nèi)容丢烘,dex結(jié)構(gòu)柱宦,文件尺寸等,還可以比較兩個(gè)apk的差異播瞳。雖然不能導(dǎo)出資源有點(diǎn)可惜掸刊,但已經(jīng)很強(qiáng)大方便了。用法:將 apk 拖入 AndroidStudio 就好了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載赢乓,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者忧侧。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牌芋,隨后出現(xiàn)的幾起案子蚓炬,更是在濱河造成了極大的恐慌,老刑警劉巖躺屁,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肯夏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)驯击,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門烁兰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人徊都,你說我怎么就攤上這事沪斟。” “怎么了暇矫?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵主之,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我李根,道長(zhǎng)槽奕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任朱巨,我火速辦了婚禮史翘,結(jié)果婚禮上枉长,老公的妹妹穿的比我還像新娘冀续。我一直安慰自己,他們只是感情好必峰,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布洪唐。 她就那樣靜靜地躺著,像睡著了一般吼蚁。 火紅的嫁衣襯著肌膚如雪凭需。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天肝匆,我揣著相機(jī)與錄音粒蜈,去河邊找鬼。 笑死旗国,一個(gè)胖子當(dāng)著我的面吹牛枯怖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播能曾,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼度硝,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了寿冕?” 一聲冷哼從身側(cè)響起蕊程,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驼唱,沒想到半個(gè)月后藻茂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年辨赐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岗钩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡肖油,死狀恐怖兼吓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情森枪,我是刑警寧澤视搏,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站县袱,受9級(jí)特大地震影響浑娜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜式散,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一筋遭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暴拄,春花似錦漓滔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至撕蔼,卻和暖如春豁鲤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲸沮。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工琳骡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人讼溺。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓楣号,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親肾胯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子竖席,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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