最近研究破解服务器,稍微总结一下,以后继续补充:

越来越多的个人和机构都在为第三方停止开放企业级的APP,这种类型的APP,开发者非常关怀自己的APP会不会被破解,从而直接影响自己的收入。

最近对这个话题也比较感兴趣,看到BugRunner于2013年3月份宣布的《基于NDK的Android防破解》(http://blog.csdn.net/bugrunner/article/details/8634585),想了几个方面。

非常认同,基于NDK,比JAVA更难反编译,更难破解,但是他这个计划其实有很多问题:

1、NDK只是作为一个入口点,检查MD5,如果不一致就退出运行。 如果直接调用原先的ACTIVITY作为入口点,明显就没法阻止了。而且这个并不难实现。

每日一道理
闷热的天,蝉儿耐不住寂寞地不停在鸣叫,我孤单一人,寂静的身旁没有一个知音,想疯狂地听摇滚乐,听歇斯底里的歌声,那只为逃避无人的世界里那浓烈的孤单气息。一个人是清冷,两个人便是精彩,于是,莫名的冲动让我格外想念旧日的好友,怀念过去的日子,尽管不够现实的遐想追回不了曾经一切,但却希望思绪可以飞扬于闭上双目后的世界中,印有微笑,印有舞动的身姿,翩翩起舞……

2、NDK之所以难以反编译,很大程度是汇编低级语言的可读性很差,但是如果只是一个入口点这么简单的程序,反编译以后,其实是很轻易修改的。更何况在本计划中,只是停止md5数值的比对。

对于一个商业价值较大的来说,这个增长破解的代价还是太低了。

如果希望增长破解难度,可以从以下几个方面考虑:

1、核心的比对验证算法应该是基于NDK,在JAVA这一侧竟可能多的停止比较比对,甚至是随机继续调用。如果SO文件不存在,是不能运行下去的。

2、这个比对函数,不能是牢固的,否则反编译后定位到一个地方,就很轻易替换所有的地方。可以采取多次比对的思绪,比如设计若干个比对函数,每一个比对算法是不一样,基于时间,基于文件系统某个文件,MD5检修,联网,短信验证等等。不满足任何一个均是失败的。

3、在服务器一侧,必须记录客户端的行为,比如活泼用户数,用户的分布,这个是很有效的检查方法。应用很多APP的统计工具都可以做到,一旦在某个区域,活泼用户数增长,可以判定被盗版了

4、在服务器和客户端之间,须要有必定的联系,结合NDK算法。比如一周内,必须和服务器通讯一次,服务器可以返回给客户端一些简单的命令,也可以高级的命令,比如APP安装时间,上次运行时间,一些业务统计数据,甚至自我销毁数据等功能

因此,两边既然在一起协作,出发点首先不能影响客户端的性能和功能,在检查方法上不能简单依赖技巧,更多是一些业务上的指标更轻易表现是不是被盗版。

文章结束给大家分享下程序员的一些笑话语录: PC软件体积大,是因为一个PC软件功能往往较多,能够满足你一个方面的需求,而一个iphone软件往往没几行代码,干一件很小的事情,自然需要的软件就多。就像吃西瓜和吃瓜子的来比数目,单位不同啊。

更多相关文章

  1. Afaria Android客户端使用afariaseed.xml文件进行注册
  2. GCM架构概览
  3. 关于android socket编程时,“Error:ShouldNotReachHere()”错误的
  4. Android开发进阶(七)-- Android客户端访问PHP服务器的详细过程
  5. Android(安卓)Binder机制完全解析
  6. android与服务器连接保持
  7. 极光推送完整流程测试
  8. 【高通SDM660平台 Android(安卓)10.0】(17) --- ISP算法相关-待
  9. 局域网场景下Android客户端实现同数据库连接通信

随机推荐

  1. Android系统中的广播(Broadcast)机制注册注
  2. 我的android 第16天 - SQLite数据库
  3. Android content provider基础与使用
  4. Android Telephony 框架分析
  5. Android应用程序四个构建模块
  6. 用python第三方库(surface_stats_collect
  7. android中的网络解析xml,json,html框架
  8. Android源码阅读分析:ActivityManagerServ
  9. Android(安卓)Twitter分享,即Twitter授权O
  10. Android修行之路——界面布局