android基于java的,而java反编译工具很强悍,所以对正常apk应用程序基本上可以做到100%反编译还原。 因此开发人员如果不准备开源自己的项目就需要知道怎样防止反编译和反编译他人的项目来学习。
2.3版本以上在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以对代码进行混淆,反编译后是很难看懂的。
2.3之前的SDK版本也没关系,把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可。
有些应用反编译后java代码用jd-ui根本都无法打开,连混淆的代码都看不到的,本人尝试多次都做不到,希望知道的告知下怎么处理的。
注意:上面的功能只是把java代码混淆了,xml和资源文件、图片并没有混淆,有些游戏应用图片比较重要需要转换成dat文件 再加上自己的加密解密算法还原。
另外加了混淆功能后还有压缩的功能,混淆后的apk比原来的小(具体比例看你的代码重复量了)
说完防止反编译再来说说怎么反编译吧
先说一下反编译的流程和原理:
1.用apktool 把apk--> 资源包(java代码变成smali文件看不懂的),可以修改资源包里面的文件。
2.apk后缀名改成zip或rar解压,获取 classes.dex 文件,用dex2jar转换成jar包(注:直接解压出来的资源文件是不能直接打开的,要用第一步的反编译工具)。
3.用jd-ui等java反编译工具直接查看java代码。
4.把java代码和第一版的资源包整到一起重新组成一个新的应用。
5.用apktool 重新编译。
6.用签名工具重新签名。
7.重新发布带新的签名的应用。
注:如果不用改java代码,只是换换风格和汉化2.3.4步则不用做。
google code上的开源项目
apktool http://code.google.com/p/android-apktool/
dex2jar http://code.google.com/p/dex2jar/
另外有人做了个工具套装,集成了apktool dex2jar jd-ui,不过我下载了运行不了 不知道是不是相应环境没有配对导致的
hackapk http://code.google.com/p/hackapk/