Android逆向-app3

本文介绍了如何打开和解析安卓系统备份文件AB格式,通过使用特定工具和Java代码进行文件解压及数据库解密。博主通过反编译源码,找出加密数据库的解密过程,并分享了使用SQLiteStudio查看数据库内容的方法,最终揭示了解密密码的获取步骤。
摘要由CSDN通过智能技术生成

app3

​ 这道题比较综合,不是纯粹的算法题。

​ 拿到题目,看到后缀是ab ,直接修改后缀apk或zip ,尝试打开失败。百度搜索一下怎么打开这个后缀文件。

在这里插入图片描述

​ 需要特定的工具打开,在找找相关的资料浅谈安卓系统备份文件ab格式解析,找到关于ab文件的介绍和打开工具。如果不想了解可以直接下载abe

​ 命令:

java -jar abe.jar unpack 399649a0e89b46309dd5ae78ff96917a.ab 399649a0e89b46309dd5ae78ff96917a.tar

​ 解开后大致浏览一下目录,a目录下是apk文件,db目录下是个数据库文件,还有Encryto.db 那么这里很大可能就是要查看加密的db文件,
在这里插入图片描述

​ 使用jadx-gui 反编译源码,查看逻辑。

​ 类 a: 创建一个table,看到第三个字段存在flag字样,那么印证了刚刚的猜想。

​ 类 AnotherActivity : 这个是安装apk后第一个界面,没有什么用。

​ 类 MainActivity : 可以获取加密的数据库类型和版本 ,a() 方法向数据库中插入了一条数据。

在这里插入图片描述

​ 百度了下getWritableDatabase这个方法,这里需要一个DBConstants.DB_PWD,那么目标就明确了,解出传入的值就可以得到解密密码。
在这里插入图片描述

import java.security.MessageDigest;
import java.util.Base64;

public class 攻防世界_mobile_easyapk {
    public static void main(String[] args) {
        a();

    }

    public static void a() {
        // a2 是用户名Strange 和密码123456 分别前4位 然后做拼接。
        String a2 = "Stra1234"; // 这里我解出后直接把结果给a2 了。

        System.out.println(a2);

        String b2 = (a(a2 + b(a2, "123456")).substring(0, 7));
        System.out.println(b2);
    }

    public static String a(String str) {
        str = str + "yaphetshan";
        int i = 0;
        char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] bytes = str.getBytes();
            MessageDigest instance = MessageDigest.getInstance("SHA-1");
            return getString(i, cArr, bytes, instance);
        } catch (Exception e) {
            return null;
        }
    }

    private static String getString(int i, char[] cArr, byte[] bytes, MessageDigest instance) {
        instance.update(bytes);
        byte[] digest = instance.digest();
        int length = digest.length;
        char[] cArr2 = new char[(length * 2)];
        int i2 = 0;
        while (i < length) {
            byte b = digest[i];
            int i3 = i2 + 1;
            cArr2[i2] = cArr[(b >>> 4) & 15];
            i2 = i3 + 1;
            cArr2[i3] = cArr[b & 15];
            i++;
        }
        return new String(cArr2);
    }


    public static String b(String str, String str2) {
        int i = 0;
        char[] cArr = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            byte[] bytes = str.getBytes();
            MessageDigest instance = MessageDigest.getInstance("MD5");
            return getString(i, cArr, bytes, instance);
        } catch (Exception e) {
            return null;
        }
    }
}

​ 搜索一下打开db文件的工具,我使用的是SQLiteStudio ,

在这里插入图片描述

​ 然后找到F_l_a_g 字段,取出来做一次base64解密即可获得flag


想要获取第一资讯,欢迎大家关注我的公众号,一起交流
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值