apk的classes.dex的校检

原创 2015年07月07日 16:51:41


为了防止别人很同意就破解自己的应用,在代码添加classes.dex的校检,不通过则不能继续运行,这样增加点破解的难度。
有三种方式,一种是通过获取整个app的sha1哈希值,第二种是获取classes.dex的crc32的值,第三种是获取classes.dex的sha1的值


思路来源:http://my.oschina.net/u/2323218/blog/406860


下面是参考了以上写了个工具类


public class DexVerifyUtil {


    private static final String TAG = DexVerifyUtil.class.getSimpleName();


    public static String getApkSHA1(Context context) {
        String dexPath = context.getPackageCodePath();
        String sha = null;
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
            byte[] bytes = new byte[1024];
            int count;
            FileInputStream fis = new FileInputStream(new File(dexPath));
            while ((count = fis.read(bytes)) > 0) {
                messageDigest.update(bytes, 0, count);
            }


            BigInteger bigInteger = new BigInteger(1, messageDigest.digest());
            sha = bigInteger.toString(16);
            fis.close();


        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(TAG, "apk sha1:" + sha);
        return sha;
    }


    public static String getDexFileCrc(Context context) {
        String dexPath = context.getPackageCodePath();
        String crc = null;
        try {
            ZipFile zipFile = new ZipFile(dexPath);
            ZipEntry zipEntry = zipFile.getEntry("classes.dex");
            if (zipEntry != null) {
                long crc1 = zipEntry.getCrc();
                crc = Long.toHexString(crc1);
            }


        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(TAG, "dex crc;" + crc);
        return crc;
    }


    public static String getDexSHA1(Context context) {
        String sha1 = null;
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-1");
            String dexPath = context.getPackageCodePath();
            ZipFile zf = new ZipFile(dexPath);
            ZipEntry zipEntry = zf.getEntry("classes.dex");
            if (zipEntry != null) {
                InputStream is = zf.getInputStream(zipEntry);
                byte[] bytes = new byte[1024];
                int byteCount;
                while ((byteCount = is.read(bytes)) > 0) {
                    digest.update(bytes, 0, byteCount);
                }
                BigInteger bigInteger = new BigInteger(1, digest.digest());
                sha1 = bigInteger.toString(16);
                is.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.i(TAG, "dex sha1:" + sha1);
        return sha1;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。

热更新Tinker研究(九):Dex文件的patch

热更新Tinker研究-Dex文件的patch 本文主要讲解dex文件的patch过程,从tinker的DexPatchFile格式分析,对doFullPatch()作为重点讲解。...
  • huweigoodboy
  • huweigoodboy
  • 2017年04月20日 14:29
  • 1494

APK自我保护 - DEX/APK/证书校验

转载自: http://gnaixx.cc/2016/04/19/android-protect-dex_apk_cert_check/ 0x00 DEX校验 classes.dex 是 An...
  • Working_Harder
  • Working_Harder
  • 2016年11月22日 13:54
  • 1220

批量提取出apk文件中的classes.dex文件

应用场景 如果需要批量分析apk以及每个apk文件中的classes.dex 文件。怎么提取出它们?将apk改后缀名变为.zip文件,之后在解压,提取出每个apk文件中的classes.dex文件,这...
  • Grace_0642
  • Grace_0642
  • 2015年01月04日 02:45
  • 3730

安卓逆向学习笔记(1) - 反编译classes.dex获取apk的java源代码

在上一篇文章中,我记录了apk的文件结构,其中有一个classes.dex文件。classes.dex是apk的核心文件,其运行在安卓Dalvik虚拟机上。通过查看apk的编译生成过程,我们可以得知:...
  • pengyan0812
  • pengyan0812
  • 2015年01月15日 14:35
  • 12388

Android 把修改后的classes.dex 重新放入 apk中

1.解压apk 把.apk后缀名修改成zip,解压提取出classes.dex 2.修改classes.dex 通过 IDA PRO 或 C32ASM 等工具修改文件中的值 3.利用工具等对修改后的c...
  • jyfjyt
  • jyfjyt
  • 2017年11月14日 15:18
  • 224

Android APK软件修改教程,由odex文件生成classes.dex

文章转载自:http://bbs.gfan.com/android-1361976-1-1.html 在我们使用Android手机的时候,某些应用或游戏只是偶尔会用到,所以又不愿意删掉,但是放在R...
  • quanbove
  • quanbove
  • 2013年11月25日 12:03
  • 1717

批量提取出apk文件中的classes.dex文件

应用场景 如果需要批量分析apk以及每个apk文件中的classes.dex 文件。怎么提取出它们?将apk改后缀名变为.zip文件,之后在解压,提取出每个apk文件中的classes.dex文件,这...
  • Grace_0642
  • Grace_0642
  • 2015年01月04日 02:45
  • 3730

安卓逆向学习笔记(1) - 反编译classes.dex获取apk的java源代码

原文地址:http://blog.csdn.net/pengyan0812/article/details/42741101 在上一篇文章安卓逆向学习笔记(0)中,我记录...
  • THMAIL
  • THMAIL
  • 2017年07月03日 09:33
  • 296

使用dex2jar反编译APK中的classes.dex

先说下写这篇博文的初衷。 为了应用的代码不直接被他人窥视,我们一般都会在代码的时候进行代码混淆,这样子可以将原来的包名、类名、参数名等给替换成无意义的字母。而我们怎么知道代码混淆起效果了呢,自己把应...
  • Long_Fei_Jia_You
  • Long_Fei_Jia_You
  • 2016年03月21日 10:26
  • 2396

classes.dex

  • 2014年03月27日 15:46
  • 828KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:apk的classes.dex的校检
举报原因:
原因补充:

(最多只允许输入30个字)