当前位置:首页 > 修改聊天记录 > 正文内容

Android数据库加解密逆向分析

网页编辑4个月前 (04-27)修改聊天记录183

一、Android 数据库现状

Android 绝大多数本地数据存在 SQLite(/data/data/ 包名 /databases/xxx.db)。
默认明文存储,root 后可直接导出查看。
因此大部分商业 App 会做数据库加密

二、常见数据库加密方案(逆向必懂)

1)SQLCipher(最主流,90% App 用这个)

  • 底层在 SQLite 的 Pager 层做 AES-256-CBC 全库加密

  • 数据库文件落盘全密文,打开必须传密码

  • 密钥通常:硬编码、动态生成、设备信息派生(IMEI/Android ID)

  • 特征:

    • so 库:libsqlcipher.so

    • 类名:net.sqlcipher.database.*

    • 打开数据库时传入 password

2)自定义全库加密

  • 自己封装 SQLite,读写时加解密

  • 常见:AES、XOR、RC4、3DES

  • 特征:无 SQLCipher 类,有大量加密工具类

3)字段级加密(只加密敏感字段)

  • 数据库明文,手机号 / 身份证 / 密码等字段 AES 加密后存

  • 特征:建表语句正常,字段内容是密文(base64/hex)


三、逆向分析核心目标

不管哪种加密,逆向只需要拿到三样东西:
  1. 加密算法(AES/XOR/RC4/...)

  2. 密钥(key、iv、salt、迭代次数)

  3. 加解密入口函数

拿到后即可直接解密数据库

四、逆向分析完整步骤(实操流程)

步骤 1:拿到加密数据库文件

root 设备或模拟器:
plaintext
adb root
adb pull /data/data/包名/databases/xxx.db
文件一般无法直接用 SQLite 工具打开

步骤 2:反编译 APK,定位加密代码

工具

  • JADX(看 Java 代码)

  • JEB/IDA(看 so 层)

  • Frida(动态调试)

搜索关键词(必搜)

  • SQLCipher → net.sqlcipher.database

  • SQLiteDatabase、openDatabase

  • 加密关键词:AES、Cipher、encrypt、decrypt、key、iv、salt

  • 数据库密码相关:"password"、"secret"、"dbkey"

步骤 3:静态分析(Java 层)

典型 SQLCipher 代码

java
运行
SQLiteDatabase db=SQLiteDatabase.openDatabase(
    "/data/data/xxx/xxx.db",
    "123456",  // 密钥(重点找这个)
    null,
    SQLiteDatabase.OPEN_READWRITE);
逆向目标:拿到这个字符串 / 密钥生成逻辑

密钥常见来源

  • 硬编码字符串(最容易)

  • 从 assets/SharedPreferences 读取

  • 设备信息:IMEI、Android ID、MAC、包名

  • PBKDF2 派生(微信等):密码 + salt + 迭代次数 → 真正密钥

步骤 4:静态分析(so 层,SQLCipher / 自定义加密)

如果 Java 层找不到密钥:
  • 查看 libsqlcipher.so/ 自定义 libdb.so

  • IDA 搜索:

    • sqlite3_open、sqlite3_exec

    • AES、CBC、encrypt、decrypt

    • 密钥常量(16/24/32 字节)

步骤 5:动态调试(Frida 最有效)

Java 层加密直接 hook:
javascript
运行
//  hook SQLCipher 密码Java.perform(function() {
    var db=Java.use("net.sqlcipher.database.SQLiteDatabase");
    db.openDatabase.implementation=function(path, password, a, b) {
        console.log("DB Path: " + path);
        console.log("Password: " + password); // 直接拿到密钥
        return this.openDatabase(path, password, a, b);
    }});
运行:
plaintext
frida -U -n 包名 -l hook.js
直接输出数据库密钥

五、拿到密钥后如何解密(实战)

1)SQLCipher 数据库解密

工具:sqlcipher 命令行 / DB Browser for SQLite(支持 SQLCipher)
bash
运行
sqlcipher encrypted.db
sqlite> PRAGMA key='密钥';sqlite> .output plain.db
sqlite> .dump
sqlite> .exit
得到明文数据库 plain.db。

2)自定义加密数据库

  • 逆向拿到加密函数(AES/XOR)

  • 写 Python 脚本批量解密页面 / 字段


六、常见坑(逆向必知)

  1. 密钥在 so 里:Java 层无密钥,必须 IDA 调试

  2. 动态密钥:每次启动随机生成,需 hook 生成函数

  3. 密钥加固:dex/so 加壳,需先脱壳

  4. 数据库防篡改:HMAC 校验,改密文会校验失败


七、总结(一句话)

Android 数据库加密 90% 是 SQLCipher(AES-256-CBC),逆向核心就是:
找到密钥(静态硬编码 / 动态生成)→ 用 SQLCipher 工具解密 → 拿到明文数据


扫描二维码推送至手机访问。

版权声明:本文由手机数据加工厂发布,如需转载请注明出处。

本文链接:https://www.gaijilu.com/?id=127

“Android数据库加解密逆向分析” 的相关文章

微信电脑端聊天记录迁移到手机步骤

微信电脑端聊天记录迁移到手机步骤

在电脑上将聊天记录迁移到手机步骤打开电脑版微信,并登录您的微信账号。点击微信界面左下角的三条横线图标在向上弹框里面选择“迁移与备份”。      然后在弹窗中选择“迁移”此处不要急于迁移,否则数据太多,选择下面“迁移部分聊天记录”然后就选择对应的某个人那可,再点开始。注...

微信数据库修复在哪里?快速解决微信数据库问题的方法!

微信数据库修复在哪里?快速解决微信数据库问题的方法!

微信是一款非常流行的社交软件,但是在使用过程中,有时会遇到微信数据库出现问题的情况。本文将介绍微信数据库修复的方法,帮助用户快速解决微信数据库问题。工具原料:电脑品牌型号:苹果MacBook Pro操作系统版本:macOS Big Sur 11.2.3软件版本:微信 3.3.0一、备份微信数据库1、...

以win10系统为例关闭病毒威胁及防火墙

以win10系统为例关闭病毒威胁及防火墙

关闭病毒威胁及防火墙,按下列步骤流程操作。第1步。在桌面点下图“开始”按钮第2步。在向上弹窗点“齿轮”按钮,然后进入控制面板第3步。在控制面板中点“更新和安全”按钮第4步。安全和中心点“病毒和威胁防护”按钮第5步。病毒和威胁防护“管理设置”按钮第6步。管理设置关闭“实时保护”按钮第7步。点左侧的防火...

4 种方法永久保存微信聊天记录,永不丢失

4 种方法永久保存微信聊天记录,永远不会丢方法一:用电脑微信备份(最靠谱、最全)登录电脑版微信,找到备份功能,把手机聊天记录完整存到电脑里。文字、图片、语音、视频、文件全都能保存,不会漏掉。备份好之后,再复制一份存到 U 盘或者移动硬盘里。就算换手机、卸载微信、手机坏掉,记录也能随时找回来。方法二:...

苹果iPhone+Mac如何开启WiFi+蓝牙

下面直接给你「一步到位」的极简版,照着点就行(为了隔空投送,**Wi‑Fi 和蓝牙都要开,不需要连同一个 Wi‑Fi 也能投送**)。 --- iPhone 打开 Wi‑Fi + 蓝牙(两种方法) 方法1:控制中心(最快) - 全面屏 iPhone(带刘海):**右上角往下滑**...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。