android基于java的,而java反編譯工具很強(qiáng)悍,所以對(duì)正常apk應(yīng)用程序基本上可以做到100%反編譯還原。 因此開(kāi)發(fā)人員如果不準(zhǔn)備開(kāi)源自己的項(xiàng)目就需要知道怎樣防止反編譯和反編譯他人的項(xiàng)目來(lái)學(xué)習(xí)。
2.3版本以上在eclipse自動(dòng)生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以對(duì)代碼進(jìn)行混淆,反編譯后是很難看懂的。
2.3之前的SDK版本也沒(méi)關(guān)系,把上面的proguard.cfg文件復(fù)制一份放到項(xiàng)目中,然后進(jìn)行相同的操作即可。
有些應(yīng)用反編譯后java代碼用jd-ui根本都無(wú)法打開(kāi),連混淆的代碼都看不到的,本人嘗試多次都做不到,希望知道的告知下怎么處理的。
注意:上面的功能只是把java代碼混淆了,xml和資源文件、圖片并沒(méi)有混淆,有些游戲應(yīng)用圖片比較重要需要轉(zhuǎn)換成dat文件 再加上自己的加密解密算法還原。
另外加了混淆功能后還有壓縮的功能,混淆后的apk比原來(lái)的小(具體比例看你的代碼重復(fù)量了)
說(shuō)完防止反編譯再來(lái)說(shuō)說(shuō)怎么反編譯吧
先說(shuō)一下反編譯的流程和原理:
1.用apktool 把a(bǔ)pk--> 資源包(java代碼變成smali文件看不懂的),可以修改資源包里面的文件。
2.apk后綴名改成zip或rar解壓,獲取 classes.dex 文件,用dex2jar轉(zhuǎn)換成jar包(注:直接解壓出來(lái)的資源文件是不能直接打開(kāi)的,要用第一步的反編譯工具)。
3.用jd-ui等java反編譯工具直接查看java代碼。
4.把java代碼和第一版的資源包整到一起重新組成一個(gè)新的應(yīng)用。
5.用apktool 重新編譯。
6.用簽名工具重新簽名。
7.重新發(fā)布帶新的簽名的應(yīng)用。
注:如果不用改java代碼,只是換換風(fēng)格和漢化2.3.4步則不用做。
google code上的開(kāi)源項(xiàng)目
apktool http://code.google.com/p/android-apktool/
dex2jar http://code.google.com/p/dex2jar/
另外有人做了個(gè)工具套裝,集成了apktool dex2jar jd-ui,不過(guò)我下載了運(yùn)行不了 不知道是不是相應(yīng)環(huán)境沒(méi)有配對(duì)導(dǎo)致的
hackapk http://code.google.com/p/hackapk/