Android反編譯代碼和防止反編譯
一、反編譯apk文件
安裝ApkTool工具,該工具可以解碼得到資源文件,但不能得到Java源文件。
安裝環(huán)境:需要安裝JRE1.6
1> 到http://code.google.com/p/android-apktool/
下載apktool1.3.2.tar.bz2 和apktool-install-windows-2.2_r01-3.tar.bz2 文件。
解壓兩個(gè)文件,然后把解壓后的文件放在一起,如:c:\apktool
2> 在系統(tǒng)變量PATH中添加進(jìn)aapt.exe,如:;c:\apktool\aapt.exe
3> 在DOS窗口下進(jìn)入apktool.jar所在目錄。
執(zhí)行DOS命令:apktool d -s c:\soft\xxx.apk c:\soft\source。
命令格式:apktool d [opts] <file.apk> [dir] 中的d代表解碼,[opts]代表選項(xiàng),-s選項(xiàng)代表不解碼源文件。
2、Apktool工具只能反編譯成smali的中間代碼文件,這里需要借助另外一個(gè)開(kāi)源工具Dex2Jar,
該工具可以把dex文件轉(zhuǎn)換成jar文件。這個(gè)工具不能直接翻譯成java文件,但是可以把dex文件轉(zhuǎn)換成jar文件
下載地址:http://code.google.com/p/dex2jar/
1> 把APK安裝包中的classes.dex解壓到某個(gè)目錄下,如:c:\soft
2> 在DOS窗口下進(jìn)入dex2jar.bat所在目錄,執(zhí)行DOS命令:dex2jar.bat c:\soft\source\classes.dex c:\soft\source,命令生成classes.dex.dex2jar.jar文件。
3、安裝jd-gui工具,該工具可以把jar文件反編譯成Java源文件
下載地址:http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip。
運(yùn)行該軟件,直接打開(kāi)classes.dex.dex2jar.jar文件即可看到j(luò)ava源代碼。
總結(jié):
apktool1.4.1.tar.bz2 反編譯工具的jar包
apktool-install-windows-r04-brut1.tar.bz2 windows下調(diào)用執(zhí)行jar 的exe文件
1、 解壓這兩個(gè)文件,將apktool1.4.1中的apktool.jar拷貝到apktool-install-windows-r04-brut1目錄下,此時(shí)文件有:
紅色的為待反編譯的apk文件
cmd切換到該目錄,執(zhí)行:
> apktool d -s queryNumber.apk ./source 在當(dāng)前目錄生成source目錄,下面放著資源文件
2、解壓dex2jar-0.0.7.11-SNAPSHOT.zip將classes.dex拷貝該目錄,執(zhí)行:
> dex2jar class.dex
生成classes_dex2jar.jar文件
里面全是.class文件
3、打開(kāi)jd-gui.exe,將classes_dex2jar.jar拖拽到j(luò)d-gui界面
此時(shí)可以看到所有的源文件:
如何防止反編譯。。。。
由于apk是Android虛擬機(jī)加載的,它有一定的規(guī)范,加密apk后Dalvik無(wú)法識(shí)別apk了。
完全避免是不可能的,總有人能夠破解你的代碼。但是有幾種方式來(lái)提高被反編譯取代碼的難度。
1 關(guān)鍵代碼使用jni調(diào)用本地代碼,用c或者c++編寫(xiě),因此相對(duì)比較難于反編譯
2 混淆java代碼。混淆是不改變代碼邏輯的情況下,增加無(wú)用代碼,或者重命名,使反編譯后的源代碼難于看懂。
網(wǎng)上開(kāi)源的java代碼混淆工具較多,一般是用ant的方式來(lái)編譯的
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
相關(guān)文章
UiOS開(kāi)發(fā)中ITextView回收或關(guān)閉鍵盤(pán)使用方法總結(jié)
iOS開(kāi)發(fā)中,發(fā)現(xiàn)UITextView沒(méi)有像UITextField中textFieldShouldReturn:這樣的方法,那么要實(shí)現(xiàn)UITextView關(guān)閉鍵盤(pán),必須使用其他的方法,下面是可以使用的幾種方法,需要的朋友參考下吧2016-11-11android獲取當(dāng)前接入點(diǎn)信息判斷是ctwap還是ctnet實(shí)例代碼
這篇文章主要介紹了android獲取當(dāng)前接入點(diǎn)信息判斷是ctwap還是ctnet的方法,大家參考使用吧2013-11-11手把手教你用ViewPager自定義實(shí)現(xiàn)Banner輪播
這篇文章主要手把手教你用ViewPager自定義實(shí)現(xiàn)Banner輪播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09詳解Retrofit2.0 公共參數(shù)(固定參數(shù))
這篇文章主要介紹了Retrofit2.0 公共參數(shù)(固定參數(shù)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04Android 7.0 監(jiān)聽(tīng)網(wǎng)絡(luò)變化的示例代碼
這篇文章主要介紹了Android 7.0 監(jiān)聽(tīng)網(wǎng)絡(luò)變化的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03Android 動(dòng)態(tài)改變布局實(shí)例詳解
這篇文章主要介紹了Android 動(dòng)態(tài)改變布局實(shí)例詳解的相關(guān)資料,這里舉例說(shuō)明如何實(shí)現(xiàn)動(dòng)態(tài)改變布局的例子,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11Flutter?StreamBuilder實(shí)現(xiàn)局部刷新實(shí)例詳解
這篇文章主要為大家介紹了Flutter?StreamBuilder實(shí)現(xiàn)局部刷新實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08