1.下載反編譯工具
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比垣曲網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式垣曲網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋垣曲地區(qū)。費(fèi)用合理售后完善,十余年實體公司更值得信賴。
需要下載四個工具:dex2jar、JD-GUI、apktool、apktool-install-windows-r05-ibot
dex2jar:將apk中的classes.dex轉(zhuǎn)化成Jar文件。
JD-GUI:反編譯工具,可以直接查看Jar包的源代碼。
apktool:反編譯工具,通過反編譯APK中XML文件,直接可以查看。
apktool-install-windows-r05-ibot:輔助windows批處理工具。
2.解壓縮APK包
apk文件也是一種常見的zip,常用的壓縮軟件就可輕松地解壓apk文件。用壓縮軟件將apk文件中的文件解壓到一個文件夾中,得到APK中的資源包括XML文件和classes.dex文件,classes.dex就是java文件編譯再通過dx工具打包而成的。
3.反編譯dex文件
解壓apk文件后,你會發(fā)現(xiàn)res目錄的圖片沒有加密,但java源碼編譯成了一個classes.dex文件,無法用普通的反編譯class文件的方法來處理,dex2jar可以將dex文件轉(zhuǎn)換成普通的jar包。
解壓下載的dex2jar,把解壓后的文件夾放到系統(tǒng)盤跟目錄中并把這個目錄加到系統(tǒng)path變量中,就可以直接用:dex2jar.bat或dex2jar.sh轉(zhuǎn)換dex文件了。
DOS行命令如下:dex2jar.bat xx\classes.dex(xx是classes.dex文件所在的路徑)。
將在同目錄得到普通jar包:classes_dex2jar.jar,就可以用處理普通jar包的方法來反編譯這個jar包得到原文件。
4.反編譯jar包
得到j(luò)ar包后,下載自已喜歡的反編譯工具,推薦使用JD-GUI,有比較簡單的圖形界面,可以反編譯單個class文件,也可以反編譯jar包,比較方便。
打開壓縮文件JD-GUI,運(yùn)行jd-gui.exe,打開上面生成的jar包,即可看到源代碼了。
5.反編譯xml文件
打開解壓的res\layout目錄,有很多xml文件,如果你想看下作者是如何設(shè)計界面的,你會很失望,因為你看到的是一大堆亂碼!這個時候我們需要用到的是apktool。
具體操作方法:將下載的apktool和apktool-install-windows-r05-ibot兩個包解壓到同一個文件夾下,這個文件夾有三個文件:aapt.exe,apktool.bat,apktool.jar。把這個文件夾也放到系統(tǒng)盤的根目錄中并把這個目錄加到path變量中。以HelloWord.apk為例:
在DOS命令行中輸入:apktool d xx\HelloWord.apk HelloWord得到HelloWord文件夾,此文件夾中的xml文件就是編譯好的可以正常查看的文件。
這樣就得到了可以得到編譯的源碼和XML資源。
注意:文件的路徑中最好不要出現(xiàn)中文!
直接解壓縮apk文件就行。。
把a(bǔ)pk文件改成rar后綴,解壓縮就能看到dex文件了啊
簡單說就是優(yōu)化后的android版.exe。每個apk安裝包里都有。相對于PC上的java虛擬機(jī)能運(yùn)行.class;android上的Davlik虛擬機(jī)能運(yùn)行.dex。
作用
讓dalvik能夠運(yùn)行。
dex好處
可以直接用DexClassLoader類加載,動態(tài)加載。于是只要在dex上加殼,在程序運(yùn)行時脫殼,就可以規(guī)避靜態(tài)反編譯的風(fēng)險。
擴(kuò)展資料
使用dex文件的原因
在Android系統(tǒng)中,一個App的所有代碼都在一個Dex文件里面。Dex是一個類似Jar的包,存儲了很多Java編譯字節(jié)碼的歸檔文件。
因為Android系統(tǒng)使用Dalvik虛擬機(jī),所以需要把使用Java Compiler編譯之后的class文件轉(zhuǎn)換成Dalvik能夠執(zhí)行的class文件。
jdk
5.0默認(rèn)就會到當(dāng)前工作目錄,以及jdk的lib目錄中尋找java程序。所以如果java程序是在這兩個目錄中,則不必設(shè)置classpath變量也可以找得到,將來如果java程序不是放置在這兩個目錄時,則可以按上述設(shè)置classpath。
需要javac源文件,需要在.java文件的當(dāng)前目錄
win7在.java文件當(dāng)前窗口中
按住shift右鍵選擇--在此處打開命令窗口
然后執(zhí)行javac
*.java
即可
dex文件是Android平臺上可執(zhí)行文件的類型。
對于Android DEX文件進(jìn)行優(yōu)化,需要注意的一點(diǎn)是DEX文件的結(jié)構(gòu)是緊湊的,但是我們還是要想方設(shè)法的進(jìn)行提高程序的運(yùn)行速度,我們就仍然需要對DEX文件進(jìn)行進(jìn)一步優(yōu)化。
調(diào)整所有字段的字節(jié)序(LITTLE_ENDIAN)和對齊結(jié)構(gòu)中的每一個域 驗證DEX文件中的所有類 對一些特定的類進(jìn)行優(yōu)化,對方法里的操作碼進(jìn)行優(yōu)化 。優(yōu)化后的文件大小會有所增加,應(yīng)該是原Android DEX文件的1-4倍。 優(yōu)化發(fā)生的時機(jī)有兩個:對于預(yù)置應(yīng)用,可以在系統(tǒng)編譯后,生成優(yōu)化文件,以O(shè)DEX結(jié)尾。
這樣在發(fā)布時除APK文件(不包含DEX)以外,還有一個相應(yīng)的Android DEX文件;對于非預(yù)置應(yīng)用,包含在APK文件里的DEX文件會在運(yùn)行時被優(yōu)化,優(yōu)化后的文件將被保存在緩存中。
每一個Android應(yīng)用都運(yùn)行在一個Dalvik虛擬機(jī)實例里,而每一個虛擬機(jī)實例都是一個獨(dú)立的進(jìn)程空間。虛擬機(jī)的線程機(jī)制,內(nèi)存分配和管理,Mutex等等都是依賴底層操作系統(tǒng)而實現(xiàn)的。
樓主,使用DX工具,試一下這個方法: dx --dex --output path/new_dex_file.dex path/classes 如果報錯,移步到這里: 這是將smali轉(zhuǎn)換成java的方式: http:/...