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. CSS 布局Float 【4】

    一些浮动模型的基本知识:浮动模型也是一种可视化格式模型,浮动的框可以左右移动(根据float属性值而定),直到它的外边缘碰到包含框 或者另一个浮动元素的框的边缘.浮动元素不在文档的普通流中,文档的普通 ...

  2. Java学习----方法的重载

    一个类中有多个同名的参数不一样的方法. 作用:可以根据不同的条件调用不同的方法. 注意:java不会因为方法的返回类型或者权限的不同而判断为不同的两个方法. public class Student ...

  3. javaScript高程第三版读书笔记

    看完<dom编程艺术>现在准备读进阶版的js高程了,由于篇幅较长,所以利用刚看完<dom编程艺术>学到的知识写了段JavaScript代码,来折叠各章的内容.并且应用到了< ...

  4. IIS 7.5 部署ASP.Net MVC 网站

    請務必註冊 ASP.NET 4.0:若是 32 位元則是 %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -ir 1.首先确定已经安 ...

  5. html页面button样式

    在过去的Web开发中,通常使用Photoshop来设计按钮的样式.不过随着CSS3技术的发展,你完全可以通过几行代码来定制一个漂亮的按钮,并且还可以呈现渐变.框阴影.文字阴影等效果.此类按钮最大的优势 ...

  6. lua学习-1

    最近打算学习quick cocos2dx,所以首先打算学习一下lua这门语言,Lua 是一个小巧的脚本语言,轻量级,便于扩展. Lua脚本基本的数据类型:nil.boolean.number.stri ...

  7. Python 函数传递list,传递dict 以及*args和**kargs

    函数之间传递list: def show(ll): for i in ll: print(i) show(['chen','hang','wang','yadan']) #============== ...

  8. a标签的 target 使用

    <a target="_blank" href="www.baidu.com" onclick="return test()"> ...

  9. ubuntu matplotlib 安装

    sudo apt-get install python-numpy //必须 sudo apt-get install python-matplotlib //必须

  10. poj 3308 Paratroopers

    http://poj.org/problem?id=3308 #include <cstdio> #include <cstring> #include <algorit ...