本帖最后由 rainlee 于 2015-1-27 06:02 编辑
分享给大家,如何防止APK被工具反编译、二次打包等
废话不多说
准备工作:
1。要保护APK安全 首先要了解一下 自己的APK到底有多不安全吧。
【pk运行的运行环境依赖的文件/文件夹 res dex 主配文件 lib 都是简单的加密甚至没有任何加密措施。
apktool工具完美将其破解,再配合其他各种工具 源码暴露
(代码混淆也几乎起不到任何安全作用) 资源文件裸奔 主配文件可任意修改 核心so库暴露随时可能被暴力破解恶意利用等等的问题。。
部分大公司会对其公司的apk进行防二次打包和防apktool打包,
但其代码都是写在java层或者apktool的升级导致其安全保护级别也是非常低的。。】
2。反编译工具 就拿最经典最牛逼最常用的 APKTool 来测试。。
第一个办法: 伪加密
这个方法是在网上看到的
原地址第一个办法: 伪加密
这个方法是在网上看到的
源地址是:http://bbs.pediy.com/showthread.php?p=1195662&mode=threaded
APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。。。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。。。对PC端来讲伪加密的APK没法被解包无法被反编译 但是对android系统来说 它完全不会影响正常的安装运行(对4.2以前的系统)。。。所以说伪加密能够100%防止PC端解包、查看而又不影响软件在手机上面的正常运行。。。
伪加密的原理: 读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1 反伪加密就是把1改成0就可以了)。。
APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。。。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。。。对PC端来讲伪加密的APK没法被解包无法被反编译 但是对android系统来说 它完全不会影响正常的安装运行(对4.2以前的系统)。。。所以说伪加密能够100%防止PC端解包、查看而又不影响软件在手机上面的正常运行。。。
伪加密的原理: 读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1 反伪加密就是把1改成0就可以了)。。
代码就不留了,发的链接也有java代码,思路也给了。。
自己按照那个思路写的代码, 随便对一个APK进行 伪加密前和伪加密后的对比图如下:
伪加密前:
伪加密后:
伪加密在android 4.2系统发布之前是比较出名的,看到不少开发者使用他, 这种方法兼容不到4.2系统了。
这种加密方法可能也会影响上传市场,因为市场需要拆包检验权限 加密后无法被拆包 估计市场会提示无效APK文件什么的吧。。。
第二个办法: APK压缩文件破坏(楼主自创的哦)
APK在PC上面可以看作一个压缩文件,在Android系统里面它就是一个手机系统软件文件。Android系统对APK的识别是从标志头到标志尾,其他多余数据都会无视。所以说在标志尾添加其他数据对把APK看做压缩文件的PC端来说这个文件被破坏了,所以你要对其进行解压或者查看都会提示文件已损坏,用反编译工具也会提示文件已损坏,但是它却不会影响在Android系统里面的正常运行和安装而且也能兼容到所有系统。
但是这种APK压缩包破坏存在APK伪加密一样的问题,个别市场会不能识别导致不能上传市场。使用压缩文件修复工具也能把它修复好让我们做的保护消失。
代码操作APK。。
具体结果 我就不用再截图了。。。 跟伪加密的结果差不多。。 它的好处就是能够兼容到所有的系统。。
先爆2个方法。。 坐等有兴趣的一起讨厌 然后我再继续说起其他的方法。。。。
|