JADX是一款用過都說好的安卓反編譯工具,它功能強(qiáng)大,它可以處理大部分反編譯的需求,滿足相關(guān)人員日常反編譯需求。這里為大家?guī)淼氖亲钚?.0版本的單文件版,單開就能用。小編在這里分享給有需要的朋友!
使用JADX
前面提到,直接雙擊 jadx-gui 就可以直接運(yùn)行。運(yùn)行之后,會啟動一個 terminal ,在這里你可以看到你所有操作的輸出,錯誤日志也會輸出在這里。
打開之后,你可以選擇一個 apk、dex、jar、zip、class、aar 文件,可以看到 jadx 支持的格式還是挺多的,基本上編譯成 Java 虛擬機(jī)能識別的字節(jié)碼,它都可以進(jìn)行反編譯。除了選擇一個文件,還可以直接將 apk 文件,拖拽進(jìn)去,這一點非常好用。
我隨便找了一個手邊的 Apk ,丟進(jìn)去,看看反編譯后的效果。
這里面就是反編譯后的代碼了,對于 apk 而言,一些 xml 的資源,也一并被反編譯還原回來了,非常的方便。
JADX優(yōu)點
JADX使用起來非常的方便,而提供的gui程序,也很好用。下面開始介紹JADX-gui程序的一些好用的技巧。
3.1強(qiáng)大的搜索功能
JADX提供的搜索功能,非常強(qiáng)大,而且搜索速度也不慢。
你可以點擊Navigation->TextSearch或者Navigation->ClassSearch激活它,更方便的還是快捷鍵,我本機(jī)的快捷鍵是control+shift+f,這個就因人而異了。
JADX的搜索,支持四種維度,Class、Method、Field、Code,我們可以根據(jù)我們搜索的內(nèi)容進(jìn)行勾選,范圍最大的就是Code,基本上就是文本匹配搜索。這里反編譯的Apk集成了支付寶支付,所以能搜到alipay的內(nèi)容。
3.2直接搜索到引用的代碼
有時候找到關(guān)鍵代碼了,還想看看在哪些地方調(diào)用或者引用了它。
JADX也提供了這方面的支持,找到我們需要查看的類或者方法,選中點擊右鍵,選擇FindUsage。
之后,它就會幫你搜索出,在這個項目中,哪些地方引用了它。
點擊就可以直接跳轉(zhuǎn)過去,非常的方便。
3.3deobfuscation
一般Apk在發(fā)布出去之前,都是會被混淆的,這基本上國內(nèi)App的標(biāo)配。這樣一個類,最終會被混淆成a.b.c,方法也會變成a.b.c.a(),這樣其實非常不利于我們閱讀。我們很難看到一個a.java的文件,就確定它是哪一個,還需要根據(jù)包名來區(qū)分。
而deobfusation功能,可以為它們其一個特殊的名字,這樣它在這個項目中,名字就唯一了,方便我們識別和搜索。
這個功能可以在Tools->deobfusation中激活。
接下來來看看它的效果。
開啟deobfusation之后的效果如下:
可以看到,a變成了p003a。不知道這樣看你覺得有方便一些嗎?
3.4一鍵導(dǎo)出Gradle工程
雖然,JADX-gui可以直接閱讀代碼,還是很方便的。但是畢竟沒有我們常見的編輯器來的方便。而正好JADX還支持將反編譯后的項目,直接導(dǎo)出成一個Gradle編譯的工程。
可以通過File->Saveasgradleproject來激活這個功能。
最終輸出的目錄,是可以直接通過AndroidStudio打開的。
不過雖然AS可以直接打開它,但是大多數(shù)情況下你是編譯不起來的。但是這樣的功能,主要是為了借助AS強(qiáng)大的IDE功能,例如方法跳轉(zhuǎn)、引用搜索等等,讓我們閱讀起來更方便。
軟件特色
1、操作方便快捷,一步到位
2、有較為完善的gui界面,帶有較多實用功能
3、反編譯代碼可讀性高
4、支持全局搜索class、method、field、code
常見問題
jadx卡死錯誤修復(fù)方法
有時候會出現(xiàn)卡死的狀態(tài),這是因為內(nèi)存不夠。官方提供了以下兩種解決方案。
一、減少處理線程數(shù)(-j選項)
二、增加最大java堆大。
命令行(linux的例子):JAVA_OPTS="-Xmx4G" jadx -j 1 some、apk
編輯'jadx'腳本(Windows上的jadx、bat)并設(shè)置更大的堆大。 DEFAULT_JVM_OPTS="-Xmx2500M"