当前位置:编程学习 > wap >>

【原创】总结防止APK被工具反编译、二次打包等

之前在论坛看到一个帖子讲的是如何破解APK。。。
仔细看完 了解到APK真的好脆弱,太容易被反编译。。辛辛苦苦写得代码被别人那么轻松就能得到 总感觉心里有点不舒服。。。
于是乎 开始研究如何如何保护APK不被反编译,防止二次打包呢。。。
通过这段时间在网上查资料与技术大神探讨与指点 研究出了一些 保护APK的方法 。。。

准备工作:
1。要保护APK安全 首先要了解一下 自己的APK到底有多不安全吧。
http://bbs.csdn.net/topics/390598569  这帖子是之前论坛一位大牛发的。。大家可以去了解下APK到底有多不安全。。。
2。反编译工具  就拿最经典最牛逼最常用的 APKTool 来测试。。

反编译 反编译工具 安全 破解 apk --------------------编程问答-------------------- 第一个办法:  伪加密
这个方法是在网上看到的 
源地址是: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就可以了)。。 --------------------编程问答-------------------- 来学习一下 --------------------编程问答-------------------- 代码就不留了,发的链接也有java代码,思路也给了。。
自己按照那个思路写的代码, 随便对一个APK进行 伪加密前和伪加密后的对比图如下:
伪加密前:


伪加密后:



对比图可以看出 伪加密的好处了吧~~~~ --------------------编程问答-------------------- 伪加密在android 4.2系统发布之前是比较出名的,看到不少开发者使用他, 这种方法兼容不到4.2系统了。
这种加密方法可能也会影响上传市场,因为市场需要拆包检验权限  加密后无法被拆包 估计市场会提示无效APK文件什么的吧。。。

第二个办法:  APK压缩文件破坏(楼主自创的哦)
APK在PC上面可以看作一个压缩文件,在Android系统里面它就是一个手机系统软件文件。Android系统对APK的识别是从标志头到标志尾,其他多余数据都会无视。所以说在标志尾添加其他数据对把APK看做压缩文件的PC端来说这个文件被破坏了,所以你要对其进行解压或者查看都会提示文件已损坏,用反编译工具也会提示文件已损坏,但是它却不会影响在Android系统里面的正常运行和安装而且也能兼容到所有系统。
但是这种APK压缩包破坏存在APK伪加密一样的问题,个别市场会不能识别导致不能上传市场。使用压缩文件修复工具也能把它修复好让我们做的保护消失。 --------------------编程问答-------------------- 代码操作APK。。


具体结果 我就不用再截图了。。。 跟伪加密的结果差不多。。 它的好处就是能够兼容到所有的系统。。

先爆2个方法。。  坐等有兴趣的一起讨厌 然后我再继续说起其他的方法。。。。  --------------------编程问答-------------------- 大神 求交流 --------------------编程问答-------------------- 楼主怎么总是在zip上做文章,考虑下花指令才对啊 --------------------编程问答--------------------
引用 7 楼 DrSmart 的回复:
楼主怎么总是在zip上做文章,考虑下花指令才对啊

花指令也是我想说的 保护之一。。
本来准备 分 
1.防止工具反编译 
2.代码高级混淆
3.运行时验证
4.防止内存修改 
4个方法 来说的。。。  结果发现感兴趣的人不多 就没有更新的动力了。。 --------------------编程问答--------------------
引用 7 楼 DrSmart 的回复:
楼主怎么总是在zip上做文章,考虑下花指令才对啊


花指令 算是代码高级混淆的。。。   不过我说的 花指令,主要是防止工具查看源码的, 是运用了花指令的思路。。因为花指令来源是汇编的。。我这只是模仿 那种思路。。 --------------------编程问答-------------------- 有道理,你的想法很不错 --------------------编程问答--------------------
引用 10 楼 DrSmart 的回复:
有道理,你的想法很不错

我在 apkbus做了一个 专家讲堂  关于apk安全的。。 http://www.apkbus.com/android-145245-2-1.html
感兴趣可以去那看看 有任何问题 可以提问的  --------------------编程问答-------------------- 敬仰了!!!! --------------------编程问答-------------------- 期待后续方法 --------------------编程问答--------------------
引用 13 楼 checkway 的回复:
期待后续方法

不准备继续更新了,,现在在http://www.apkbus.com/android-145245-2-1.html 这个地址 开展在线互动 ,讲的就是关于apk保护的。。。 如果有时间你可以来这个网址讨论并学习我所更新的保护方法。。。 --------------------编程问答-------------------- 佩服,很厉害 --------------------编程问答--------------------
引用 14 楼 u012575740 的回复:
Quote: 引用 13 楼 checkway 的回复:

期待后续方法

不准备继续更新了,,现在在http://www.apkbus.com/android-145245-2-1.html 这个地址 开展在线互动 ,讲的就是关于apk保护的。。。 如果有时间你可以来这个网址讨论并学习我所更新的保护方法。。。


已经在那边开了  --------------------编程问答-------------------- 那个站就算了,还是来csdn吧 --------------------编程问答--------------------
引用 17 楼 DrSmart 的回复:
那个站就算了,还是来csdn吧

恩。。受那边邀请。。  以后如果有时间 我可以转载过来的。。。  --------------------编程问答-------------------- 由于受apkbus论坛负责人的邀请,那边开了一个专家讲堂的帖子 给大家讲解apk保护的方法。。由于csdn 发帖的规范,一个人一次性只能连续发3帖,导致想要转载过来也没有办法。。。如果有朋友帮助的话 我可以把帖子的内容 也同时发到这里一份。。我讲解的内容大概如下:
APK保护方法:
1. 防止工具反编译
a) 伪加密
b) APK压缩包故意破坏
c) 素材中的图片故意破坏
2. 代码高级混淆
a) 花指令在源码被窃后增加黑客阅读难度
b) 文件夹混淆(文件.2   正式版本文件夹取名尽量不要太正规)
3. 运行时验证
a)  签名验证的各种方法
4. 防止内存修改
a) 如何防止”八门神奇”通过内存数据
...
如果有朋友帮助的话,帮助转载或者帮忙在连续发3贴后 回复一帖。。 可以联系我。。 我可以立刻把发的帖子都发到这贴一份 --------------------编程问答--------------------
APK保护方法之二:代码高级混淆 - 花指令
花指令是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。【花指令】这个词来源于汇编语言,它的思想是非常不错的。。【花指令】另外个目的就是利用反编译工具漏洞,来使工具无法使用。  接下来 我们就在java代码处制造【花指令】,让反编译工具(jd-gui)无法反编译查询你的java代码。。。
jd-gui的bug其实挺多了。。很多特殊代码块或者字段集 都能够让其崩溃无法反编译出源码。。。
比如:
private static final char[] wJ = "0123456789abcdef".toCharArray();
        public static String imsi = "204046330839890";
        public static String p = "0";
        public static String keyword = "电话";
        public static String tranlateKeyword = "%E7%94%B5%E8%AF%9D";
在每个类里面加入 如上字段。。。。 你会发现反编译的类 通过jd-gui查看 后的结果。。
--------------------编程问答-------------------- 支持啊,apk确实太脆弱了 --------------------编程问答-------------------- 你先把代码混淆一下
然后在打包apk出去。
这样人家技师反编译出来的也仅仅只是abcd这样的类名和abcd这样的方法,
--------------------编程问答-------------------- 除
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,