一个Android应用要被破解,要经历:反编译->分析代码->重新编译打包的过程,反破解的思路也是从在这三个步骤上做文章:

1, 寻找反编译工具的缺陷,通过阅读其源码或者对其进行压力测试找到其不支持或者运行会出错的Dalvik指令,然后在自己的代码中加入会执行这个指令的代码,让反编译工具运行的时候奔溃掉;

2, 代码混淆技术,这个是Android原生提供的,一行proguard.config=...就可以了,反编译后的代码面目全非,完全看不懂。默认的配置会混淆所有,但这样有时候会导致你自己的程序找不到类、方法之类的,所以应该在配置文件中排除这些类、方法;

3, 编写NDK代码,原因是逆向Native代码比逆向Java代码要困难很多。但同时,实现同样的功能,编写NDK比编写Java的难度和工作量要大,所以会增加开发成本;

4,阻止调试器和模拟器,思路就是打包的时候设置android.debuggable=false让程序不可调试,破解的时候必然要再次修改此值为true以进行调试。所以可以在程序中随机加入检测这个值的代码,如果发现被修改为true,立即终止程序。阻止模拟器也是一样的原理,发现连接了模拟器就终止程序;

5, 检查签名和校验classes.dex文件。思路就是在程序中检查apk的签名和检查classes.dex的hash值,如果跟自己打包的不一样就采取措施。但我觉得这个方法有前提,就是apk没被成功反编译并且分析出来,不然代码完全被解读了,完全可以去掉检查和校验的代码。

Android应用反破解的思路的更多相关文章

  1. 解决Android加固多进程ptrace反调试的思路整理

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53613481 一.Android多进程反调试的原理代码 当ptrace附加目标进程 ...

  2. Android混淆、反编译以及反破解的简单回顾

    =========================================================================虽然反编译很简单,也没下面说的那么复杂,不过还是转了过 ...

  3. Android程序的反破解技术

    Android 程序的破解一般步骤如下:反编译.静态分析.动态调试.重编译.我们可以从这几个步骤着手反破解 反编译 我们可以查找反编译器的漏洞,从而使反编译器无法正确解析APK文件 静态分析 对jav ...

  4. Android apk反编译基础(apktoos)图文教程

    本文主要介绍了Android apk反编译基础,使用的工具是apktoos,我们将用图文的方式说明apktoos工具的使用方式,你可以参考这个方法反编译其它APK试试看了 很久有写过一个广工图书馆主页 ...

  5. (转)Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

  6. 【Android】Android程序保护与破解浅析

    此文源自组内成员分享的PPT,其他成员的文档由于没有得到授权,暂不公开. 本文命令如果没有特殊注明,均为windows 7环境. 本文只涉及大概的知识点,不涉及具体的细节,需要注意. 反编译 apkt ...

  7. Xamarin android如何反编译apk文件

    Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大.等一下我们来翻翻译这个Xamarin Android ...

  8. android 事件反拦截

    有一种方法可以阻止父层的View截获touch事件,就是调用 getParent().requestDisallowInterceptTouchEvent(true);方法.一旦底层View收到tou ...

  9. Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

随机推荐

  1. jQuery学习笔记——弹出对话框

    引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前.否则,在编写的代码中将不能引用到jQuery框架 <script ty ...

  2. JavaScript学习笔记——运算符和表达式

    javascript运算符 一.运算符和操作数的组合就称为表达式. 二.javascript运算符 (一) 算术运算符 + - * / % var++ ++var var-- --var A. + ( ...

  3. HTML学习笔记——box

    1> HTML写法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http: ...

  4. throw er; // Unhandled 'error' event

    events.js:72 throw er; // Unhandled 'error' event ^Error: listen EADDRINUSE at errnoException (net.j ...

  5. JAVA Applet

  6. docker和shipyard使用问题

    http://blog.csdn.net/cuisongliu/article/details/49178461 Docker启动如果随服务一起启动? docker run -ti -d --rest ...

  7. Lua 之 userdata

    Lua 之 userdata 在Lua中可以通过自定义类型(user data)与C语言代码更高效.更灵活的交互,从而扩展Lua能够表达的类型. full userdata full userdata ...

  8. 【转】随机函数 rand() srand() 以及seed的原理

    from:http://blog.csdn.net/feige2008/article/details/6943885   标准库<cstdlib>(被包含于<iostream> ...

  9. thinkphp单入口和多入口的访问方法

    完全是参考thinkphp的官网资料 现在, 基本上都是 用 单入口 的方式来做的! thinkphp可创建多入口和单入口两种模式,本文主要讲解创建方法和两者的区别. TP版本:3.1.3 前端:Ho ...

  10. Linux服务器管理: 系统管理:进程文件信息lsof

    lsof命令 列出进程打开或使用的文件信息 [root@loclahost/]#lsof [选项] 选项: -c 字符串: 只列出以字符串开头的进程打开的文件 -u 用户名: 只列出某个用户的进程打开 ...