一些Android程序的反逆向方法

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方法里,提高强度

时间: 2024-11-10 14:40:24

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

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

Sqlite: 1.一款用来实现本地数据存储的轻量级数据管理工具,是众多用来实现数据库管理的工具之一. 2.Android已经将SQLite的代码功能吸收在它的系统中,我们可以直接在Android程序中使用SQLite的语句来创建数据库,并实现数据库的增删查改 SQLite的简单使用方法: 如何获得一个数据库的class模板,并设定数据库里的数据结构: 自己新建一个类,继承SQLiteOpenHelper,并重写构造方法,oncreate(),onUpgrade() 自定义类的代码实现方法和构造

Android程序apk反编译破解方法

简短不割了,我们直接奔主题吧. 把apktool-install-windows-r05-ibot文件里的两个文件剪切到apktool1.5.1目录. 新建一个文件夹把需要破解的apk应用程序放进去. 在此文件夹下打开cmd 输入apktool 显示如下信息方可使用. apktool d 应用程序路径 解压路径 反编译后代码如下. Res是一些图片文件可以修改,程序代码修改在smali 文件里,接下来需要提取classes.dex文件出来,直接用360压缩打开提取出来破解源代码. 接下里打开de

Android 程序的反破解技术

Android软件的逆向步骤: 1.反编译->静态分析(阅读反汇编代码,如果必要还需进行动态调试,找到突破口注入或直接修改反汇编代码)->动态调试->重新编译. 对抗反编译工具: 1.针对开源的反编译工具,找到处理apk文件的关键环节,如资源文件处理.dex文件校验.dex文件代码类解析等. 2.压力测试:收集大量apk文件,在反编译的出错信息中,查找反编译工具的缺陷. 腾讯应用加固检测点: 1.DEX文件保护检测 DEX文件是Android系统中在Dalvik虚拟机上可以直接运行的文件

自用Android程序破解,逆向分析工具集

下载: git clone https://github.com/zencodex/hack-android.git 本人主要在Mac osx使用,所以linux下没经过严格测试,可能会存在小问题.签名脚本是自己写的,临时文件写到了/tmp 目录下,所以linux下要确定存在/tmp. 如遇到问题,可在github上new issue. romtools可配合厨房工具使用,可用于ROM的定制修改,厨房工具下载: git clone https://github.com/zencodex/Andr

[Android Pro] 静态分析Android程序——smali文件解析

cp : https://blog.csdn.net/hp910315/article/details/51823236 cp : http://www.jb51.net/softjc/119036.html 静态分析Android程序的两种方法: 一.阅读反编译生成的Dalvik字节码. 1.使用文本编辑器阅读baksmali反编译生成的smali文件 (1)解压apk包 unzip xxx.apk 1 (2)用baksmali进行对解压出来的dex文件反编译 java -jar baksma

Android逆向实例笔记—破解第一个Android程序_crackme02

本实例来源于<Android软件安全与逆向分析>这本书,作者是看雪的非虫,感谢提供这么好的书和实例. 一.工具 干什么都得一个好工具对吧. 1.apkIDE 反编译呢,我这里使用的是apkIDE(apk改之理),工具的话自己百度吧.个人不喜欢留一些不需要的东西在网盘里,难得整理,百度一大堆.我这里就给一个官网吧,免得有些童鞋找错了地方.现在这下下载网站一不小心,什么全家福都来了.好了,扯得有点远了.我用的就是最新版,我个人就喜欢最新版.(最新版可能有些问题) http://www.popotu

Android应用程序通用自动脱壳方法研究

Author: @爱博才会赢 本文为乌云峰会上<Android应用程序通用自动脱壳方法研究>的扩展延伸版. 0x00 背景及意义 Android应用程序相比传统PC应用程序更容易被逆向,因为被逆向后能够完整的还原出Java代码或者smali中间语言,两者都具有很丰富的高层语义信息,理解起来更为容易,让程序逻辑轻易暴露给技术能力甚至并不需要很高门槛的攻击者面前.因此Android应用程序加固保护服务随之应运而生.从一开始只有甲方公司提供服务到现在大型互联网公司都有自己的加固保护服务,同时与金钱相

[转载]Android应用程序通用自动脱壳方法研究

本文转载自: http://drops.wooyun.org/tips/9214 Author: @爱博才会赢 本文为乌云峰会上<Android应用程序通用自动脱壳方法研究>的扩展延伸版. 0x00 背景及意义 Android应用程序相比传统PC应用程序更容易被逆向,因为被逆向后能够完整的还原出Java代码或者smali中间语言,两者都具有很丰富的高层语义信息,理解起来更为容易,让程序逻辑轻易暴露给技术能力甚至并不需要很高门槛的攻击者面前.因此Android应用程序加固保护服务随之应运而生.从

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

很多人写文章,喜欢把什么行业现状啊,研究现状啊什么的写了一大通,感觉好像在写毕业论文似的,我这不废话,先直接上几个图,感受一下. 第一张图是在把代码注入到地图里面,启动首页的时候弹出个浮窗,下载网络的图片,苍老师你们不会不认识吧? 第二张图是微信运动步数作弊,6不6?ok,那我们从头说起 1.反编译 Android 的反编译,相信大家都应该有所了解,apktool.JEB 等工具我们先看一下 Apk 文件的结构吧,如下图: 1.META-INF:签名文件(这个是如何生成的后面会提到)2.res: