zoukankan      html  css  js  c++  java
  • 破解服务器Android防破解

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

        

        越来越多的个人和机构都在为第三方停止开放企业级的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软件往往没几行代码,干一件很小的事情,自然需要的软件就多。就像吃西瓜和吃瓜子的来比数目,单位不同啊。

  • 相关阅读:
    SpringBoot的@Import和@ImportResource
    SpringBoot引入其他配置文件
    SpringBoot加载application.properties配置文件的顺序
    Interceptor(拦截器)
    Filter(过滤器)
    ES6数组知识点,巧妙运用数组,对循环说88
    javase基础socket编程之局域网聊天,局域网文件共享
    【金三银四】缓存面试题-web层缓存
    MD5和SHA-1加密算法被我国密码学家王小云破解
    java中的ArrayList 的C语言实现版本。
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3074066.html
Copyright © 2011-2022 走看看