说说如何防范android应用(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层的初始化,则程序无法正常启动,这点不保证的话,破解还是很容易……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值