安卓逆向工程常用工具

1.dex反編譯成jar工具

1.1 enjarify

點擊下載:enjarify.zip

Enjarify 是一個將Dalvik字節碼轉化為等價的Java字節碼,然后可以用一系列的Java分析工具去分析Android應用。之前我們一直使用Dex2jar來完成這個工作,不過Dex2jar已經算是一個非常老的工具咯。Dex2jar在絕大部分情況下都挺不錯的,但是如果碰到了些模糊的特性或者特殊案例就會出錯或者默默地吐出一些錯誤的結果。相比之下,Enjarify在設計的時候就考慮到了盡可能多的情況,特別是對于那些Dex2jar不起作用的情況下。另外,Enjarify能夠有效地處理Unicode編碼的類名、常量,隱式類型轉換、正常處理流程中的移除處理啊等等。

Usage and installation

Enjarify是一個普通的Python 3的應用程序,你可以直接Git Clone然后運行。下載好了之后直接進到對應的目錄下:

python3 -O -m enjarify.main yourapp.apk

Linux

有時候為了方便調用,可以將該腳本做一層封裝,盡可能的使用Pypy,這貨會比CPython速度快一點。另外,如果你希望能夠像調用命令一樣直接調用Enjarify,你可以將它作為鏈接放到你的環境變量中,譬如:

ln -s "$PWD/enjarify.sh" ~/bin/enjarify

Windows

我們提供了一個可執行的腳本enjarify.bat,同樣地把這個腳本放到環境變量中就可以了。

Usage

可以直接用以下命令調用:

enjarify yourapp.apk

最簡單的用法就是可以將一個apk文件或者一個dex文件作為命令行的輸入,如果你使用的是一個多dex的apk,那么Enjarify會自動將這些dex打包到一個單一的jar文件中。而如果你選定了一個dex文件,那么只有這個dex文件會被解析。

enjarify classes2.dex

默認的輸出是會在當前目錄下創建一個[inputname]-enjarify.jar文件。可以通過-o參數來指定輸出文件的名稱:

enjarify yourapp.apk -o yourapp.jar

默認情況下,Enjarify不會覆蓋已經存在的文件,不過可以使用-f或者--force參數來強制指定覆蓋。

Limitations

Enjarify 目前還不能狗完整解析一些可選的信息,譬如源文件的屬性、行數以及注解。Enjarify已經盡可能地去解析所有的類,不過因為Android或者Java的限制,有些隱藏類并不能很好地解析,不過往往只有在有很多人為混淆的情況下才會出現。

Performance tips

PyPy可是比CPython快很多,可以在這里http://pypy.org/.下載,注意要使用PyPy3,而不是普通的PyPy。Linux下默認會使用pypy3,Windows下面則需要你自己去編輯了。另外,Enjarify默認會使用一些優化算法使得整個反編譯之后的代碼的可讀性增加,比如移除未使用的變量等。如果你不需要這些,可以使用--fast參數來加快速度。

1.2 dex2jar

點擊下載:dex2jar

從apk中抽取classex.dex文件

雖說dex2jar可以直接從apk抽取出jar文件,但是會經常遇到一些問題,所以常用的方法是將.apk文件,重命名為.zip,解壓縮后,找到classes.dex文件

運行dex2jar生成.jar文件

在Mac系統,打開終端,定位到dex2jar所在的目錄,執行以下命令:

./dex2jar.sh absolute_path_classes.dex

在win系統,打開命令行,定位到dex2jar所在的目錄,執行以下命令:

.\dex2jar.bat?absolute_path_classes.dex

生成文件:classes_dex2jar.jar

2.apk反編譯工具

2.1 apktool

點擊下載:apktool.jar

2.2 classyshark

點擊下載:ClassyShark

2.2.1.官方下載地址

2.2.2.運行命令

java -jar ClassyShark.jar

彈出如下界面:


ClassyShark界面

2.2.3.打開淘寶apk,如圖:


淘寶apk結構

分析上圖,左邊目錄欄中主要顯示了三部分內容,manifest文件,classes.dex文件集(為什么說是文件集,因為當apk開發采用Mutidex時會產生多個dex文件,不知淘寶為何沒有采用Mutidex)和so引用集。

2.2.4.查看淘寶manifest文件,如下圖:

淘寶manifest文件

在決定采用那種第三方支持,例如推送時,我們常常會參考別的一些成熟公司,上圖紅框中可以明顯看出是小米推送的相關權限聲明,從這可以了解淘寶也是引入了小米推送的。

2.2.5.查看class文件的源碼


AllsparkLoader類源碼

上圖可以看出ClassyShark工具將類的相關方法和變量聲明進行了結構調整,分為三部分顯示fields,constructors,methods。結構會更清晰,但是也不難發現源碼基本都是省略號(看來只能看類基本的組成而已- -)。另外有個小技巧,雙擊對應的變量對象可以快速跳轉至該對象class文件。

2.2.6.圖形化查看整個apk的構成(這也是我最喜歡的功能)

將右邊的目錄欄tab切換成Methods count,如下圖:


apk的構成餅圖

有時候我們可能只想了解別人的架構,相關組成部分的占比權重,上圖能很清晰的表現出來。如果我們想了解占比最高的taobao api部分的組成時,只需在圖上點擊相應部分。


我們看到了其中有阿里最近開源出來的react庫weex(聲稱比rn好用)。當然如果你想更詳細的查看就在右邊目錄中挨個找,圖形只是一個總體瀏覽。

2.2.7.使用總結

總的來說ClassyShark的使用非常便捷,只需一個命令行,然后打開對應的apk即可,而且顯示的內容非常有條理,非常適合在對別人apk整體架構借鑒時使用。

3.jd-jui

點擊下載:jd-jui

4.多功能工具

4.1 Android-Crack-Tool For Mac

mac10-11:

點擊下載:Android-Crack-Tool For Mac

mac9-10:

點擊下載:Android-Crack-Tool For Mac

4.2 Android逆向助手

點擊下載:Android逆向助手

4.3 jadx

點擊下載:jadx

4.3.1.安裝

依次運行以下命令:

git clone https://github.com/skylot/jadx.git

cd jadx

./gradlew dist

主要是拉下來jadx的git主工程,然后跑對應的gradle task。之后會生成運行腳本,大概就是多出了這個目錄

4.3.2.運行

cd build/jadx/

bin/jadx -d out lib/jadx-core-*.jar

#or

bin/jadx-gui lib/jadx-core-*.jar

以上命令是git給出的運行示例,主要就是反編譯jadx源碼的一個jar包。

由于之前文章對比classyShark 和apktool時用的是淘寶apk,那么這里繼續用淘寶apk,便于三者的橫向比較。

bin/jadx-gui taobao.apk

當然如果你不喜歡使用命令行外加找文件路徑,你可以直接雙擊下圖腳本文件即可


jadx-gui腳本文件

會彈出以下界面,對應選中你想反編譯的.dex, .apk, .jar or .class即可(可以看到支持的格式還是很豐富的,贊)。


選中taobao.apk

選中淘寶apk,并且反編譯完成后,結果如下:


反編譯taobao.apk結果

可以看到結果中即反編譯了資源文件和源碼,這個效果對比,apktool+dex2jar+jd-gui這三個工具集來說操作簡便了太多。

4.3.3結果橫向對比(classyshark,apktool+dex2jar+jd-gui)

主要就是來對比下反編譯后源碼的可讀性。同樣選用com.taobao.allspark包下的AllsparkLoader來進行對比,用jadx反編譯后的結果為:


AllsparkLoader反編譯結果

我們可以看到可讀性非常高,要是去掉混淆的影響,已經很接近源碼了!!!(細心的讀者可以發現該gui還包含了一部分編譯器的功能,很實用)

4.3.4另外幾個很贊的功能介紹


1).支持全局class查詢


2).支持全局text查詢


3).支持導出gradle工程(你可以用as直接看反編譯的工程了)


那么我們最終看看在as中打開導出工程后的結果:


很贊對不對

4.3.5總結

看了以上之后,我們就來說下jadx對比classyshark和(apktool+dex2jar+jd-gui工具集)的優劣勢吧。

優點:

1.操作方便快捷,一步到位

2.有較為完善的gui界面,帶有較多實用功能

3.反編譯代碼可讀性高

缺點:

1.沒有classyshark類似的方法總數統計以及圖形化分布界面

2.對比apktool直接反編譯出來的資源文件有相應的缺失(這個有心的童鞋可以自己嘗試下,這里就不給截圖了)

總體來說jadx還是你反編譯工具的最佳選擇,當然有些時候可能還是需要你去配合使用,畢竟現在看來三者還是各有優劣的。

資源匯總下載:匯總下載

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容