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

Android数据库加解密逆向分析

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

一、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://gaijilu.com/?id=127

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

苹果手机设置VPN教程

苹果手机设置VPN教程

苹果手机打设置→通用 →VPN与设备管理 →VPN→ 添加VPN配置需要改动与填写的地方如下,网址最:类型: L2TP描述: 789服务器: wxsql.giize.com账户: 789密码: 789密钥: 789其他不用填写,保持默认(参照下图),...

为什么你的手机总卡顿?关闭这10个隐藏设置,让你的手机流畅如新

为什么你的手机总卡顿?关闭这10个隐藏设置,让你的手机流畅如新

“家人们,你们有没有这样的体验,半年不到,手机就卡成狗,刷视频,聊微信,一直转圈圈,不管怎么点屏幕都没有任何反应!”最近后台一堆粉丝吐槽:“科普君,新手机像牛奶般丝滑,半年后卡成拖拉机,难道非得换(机)?”别急!今天直接上硬核操作——关闭10个隐藏设置,老机瞬间原地复活!1.关闭 系统自动更新-坑爹...

微信记录彻底备份教程,换手机一键迁移

全程不用复杂操作,老人也能看懂,每一步都对应截图位置。一、手机直接互传(换手机首选,免费最快)适合:旧手机换新手机、当场迁移所有聊天1新旧手机都连上同一个 WiFi,登录同一个微信号2打开微信 → 点【我】→【设置】3找到【通用】→【聊天记录迁移与备份】4选择【迁移聊天记录到另一台设备】5旧手机勾选...

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

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

有哪些软件可以实现手机和电脑之间的高效数据管理?

有哪些软件可以实现手机和电脑之间的高效数据管理?

下面按「苹果生态 / 安卓+Windows / 全平台通用」三类,给你整理**真正能落地、高效不乱的手机↔电脑数据管理软件**,每款讲清楚:**能干啥、适合谁、优缺点**。 --- ## 一、iPhone + Mac(苹果生态最优) ### 1. 系统自带:隔空投送 + 访达(免费,首...

发表评论

访客

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