说说如何防范android应用(APK)被破解的思路
2012-08-10 14:49
344 查看
前面写了一篇文章说《技术探析Android安全有多弱,从鳄鱼爱洗澡致300万用户中毒说开去~》种说到apk的破解是非常简单的,文章最后我也说到:
很多人也问,如何防范,如何杜绝?按照俺们技术的思路给出的答案是:基本无解!但是可以使用代码混淆提高下被反编译的难度。
目前为止唯一可以依靠的就是:底线!!
很多人表示非常不淡定,继续问如何防范,那么再仔细说一种思路:
第一种方法:代码混淆
前面已经说过了,为了加大反编译后代码分析的难度,对代码进行混淆。但是其缺点是,治标不治本,同样可以修改,只是复杂一点而已(甚至据说还有反混淆工具,没用过,不多做评论)。具体可以参考 ProGuard:http://proguard.sourceforge.net/
第二种办法:将核心代码用JNI写进so库中
由于so库的反编译和破解的难度都被加大,所以这种方式防止反编译效果不错;但是其缺点是,对于Java层的代码没有保护作用,同样可以被篡改。
第三种办法:在线签名比较
在程序启动或者初始化的时候,联网将运行的程序的签名与服务器上的官方标准签名进行比较,从而达到让反编译后的程序无法正常运行的效果;其缺点是,如果此部分联网检验的代码被篡改跳过,则整套机制全部失效。
这三种办法都有各自的缺点,所以单单靠某一项要实现完美的软件保护都是不可能的。不过,我们可以采用联合几种办法的方式,来增强软件保护的力度。曾经有人反编译过Android版的卡巴斯基,看到其保护思路似乎是这样的:
1. 代码混淆,那是必须的,不过不指望它能有很好的效果
2. 在程序初始化时,就直接通过JNI的so库初始化程序;
3. 程序激活部分也是通过JNI联网下载文件,然后在JNI层读文件并做相应激活与否的判断的
卡巴斯基是将大部分功能模块都放在JNI层来实现的,如果我们的程序都这样处理,耗费的精力必然很大。所以,我们只是借鉴它的思路而已。具体操作思路如下:
1. 代码混淆,不要偷懒啦,ProGuard很好用的;
2. 在启动时,通过JNI的so库初始化程序;
3. 初始化时JNI层联网验证签名,验证失败则直接在JNI层退出程序;
但是,需要注意的是需要保证如果绕过JNI层的初始化,则程序无法正常启动,这点不保证的话,破解还是很容易……
相关文章推荐
- 说说如何防范android应用(APK)被破解的思路
- 说说如何防范android应用(APK)被破解的思路
- android大杂烩--一个应用如何读取另一个apk中的资源
- Android APK破解、反编译、打包签名基本思路与方法
- Android安全讲座第七层 [一] 破解加过壳的APK应用
- 【Android】AndroidStudio(Eclipse)如何使用天天模拟器进行调试apk应用。
- 如何从Google Play下载Android应用的APK安装文件?
- 如何判断 两个不同包名的 Android 应用的 Apk 签名是否一致
- html5 如何打包成apk,将H5封装成android应用APK文件的几种方法
- Android apk如何加固防止被破解(防止逆向编译)
- 分享 如何做到基于NDK的Android应用防破解!
- Android apk如何加固防止被破解(防止逆向编译)
- android应用如何启动另外一个apk应用
- android应用如何启动另外一个apk应用
- Android获取应用信息判断网络连接返回桌面及卸载apk结束进程等的实现思路
- How to get Android Phone ServiceState - APK应用如何获得Android Phone的ServiceState,两种方法
- android应用如何启动另外一个apk应用
- apk分享: Android应用更换皮肤功能的实现思路教程。
- 如何判断 Android 应用的 Apk 签名是否一致?
- 如何做到基于NDK的Android应用防破解!