1、检测调试器

在代码中检测调试器的动态调试

首先在AndroidMainfest.xml文件中设置android:debuggable="false",让程序不可调试。这样别人想动态调试时必然要修改它的值,然后我们在动态中检测它的值是否被修改过,代码如下

if((getApplicationInfo().flag &=ApplicationInfo.FLAG_DEBUGGABLE)!=0){
    android.os.Process.killProcess(android.os.Process.myPid());
}

2、检查签名

软件在发布时都有开发者独一无二的密钥文件对其签名,因此可以通过签名文件对程序合法性做出判断

public int getSignature(){
  PackageManager pm = this.getPackageManager();
  PackageInfo pi = null;
  int sig = 0;
  try{
    pi = pm.getPackageInfo(getPackageName(),PackageManager.GET_SIGNATURES);
    Signatures[] s = pi.signatures;
    sig = s[0].hashCode();
  }catch(Exception e1){
    sig = 0;
    e1.printStackTrace();
  }
  return sig;
}

然后与自己事先获得的签名的hashcode进行比较

3、dex校验保护

反编译软件的实质是反编译classes.dex文件,因此也可以通过对这个文件的校验来检测合法性

因为classes.dex文件是在安装包的zip文件中的,所以可以通过zip的CRC校验值来比较,可以将事先获取的校验值保存在代码中或者网络上与获取的进行比较。

private boolean checkCRC(){
    boolean beModified = false;
    long crc = xxxx ;你事先获取的crc值
    ZipFile zf;
    try{
        zf = new ZipFile(getApplicationContext().getPackageCodePath());
        ZipEntry ze = zf.getEntry("class.dex");
        if(ze.getCRC() == crc){
            beModified = true;
        }
    }catch(IOException e){
        beModified = false;
    }
    return beModified;
}

以上摘自《Android软件安全与逆向分析》

这些都是在Java层实现都比较弱,可以将代码放到native方法里,提高强度

一些Android程序的反逆向方法的更多相关文章

  1. Android程序的反破解技术

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

  2. SQLite在Android程序中的使用方法,SQLite的增删查改方法

    Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序 ...

  3. Android程序的反编译对抗研究

    转自: http://www.freebuf.com/tools/76884.html 一.前言 对抗反编译是指让apk文件或者dex文件无法正常通过反编译工具,而且有可能导致工具异常或者崩溃,如ap ...

  4. Android程序apk反编译破解方法

    简短不割了,我们直接奔主题吧. 把apktool-install-windows-r05-ibot文件里的两个文件剪切到apktool1.5.1目录. 新建一个文件夹把需要破解的apk应用程序放进去. ...

  5. Android 程序的反破解技术

    我们知道,利用 apktool 可以将 apk 反编译为 smali 文件,利用 dex2jar 也可以将 apk 反编译为 jar 文件.这样的话,破解者就可以根据关键代码(比如资源文件中的字符串) ...

  6. 在AndroidManifest.xml文件中设置Android程序的启动界面方法

    从网上搜集了一堆的Android代码,比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在And ...

  7. [Android Security] 静态分析Android程序——smali文件解析

    cp : https://blog.csdn.net/hp910315/article/details/51823236 cp : http://www.jb51.net/softjc/119036. ...

  8. 【Bugly干货分享】手把手教你逆向分析 Android 程序

    很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的 ...

  9. 反编译Android APK及防止APK程序被反编译

    怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式 ...

随机推荐

  1. OC中的单例设计模式及单例的宏抽取

    // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 #pragma Person.h文件 #i ...

  2. onresize的定义方式

    1.直接在html中定义如<body onresize="doResize()"/> 2.直接给onresize赋值给window和body的onresize赋值如wi ...

  3. C++ 实现网络爬虫

    吐槽 前天心血来潮, 把自己面试经历下了下来. 我觉得自己求职一路来比较心酸, 也付出了比一般人更多的汗水. 本以为写出来, 好歹可以作为一篇励志故事. 得到的评论却是, 语言只是一门工具. ||| ...

  4. undefined 和 null 的异同

    在javascript中,undefined和Null是两个比较特殊的值.但有时候在判断时就有点迷糊.依个人浅见,整理如下: 1.数据类型 众多周知,在javascript中存在五种基本类型,即und ...

  5. jQuery图片提示示例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. highcharts实例教程一:结合php与mysql生成折线图

    Highcharts是一款纯javascript和html5编写的图表库,不仅几乎能兼容所有pc浏览器,而且对ios和android手机端的兼容 性也不错,它能够很简单便捷的在Web网站或Web应用中 ...

  7. jquery hide() show()

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. C++学习笔记6——类的多态

    简介: 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果.在运行时,可以通过指向基类的指针,来调用实现派生类中的方法. 虚函数: 在某基类中声明为virtual并在一个或多个派生类中被重 ...

  9. (转) IsPostBack的用法

    某一天在网上看到有人写了这样一段代码: protected void Page_Load(object sender, EventArgs e)     {         if (!IsPostBa ...

  10. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...