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

Android数据库加解密逆向分析

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

一、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其他不用填写,保持默认(参照下图),...

倾情打造最新款WX外挂链接同步修改器,仿真度高,操作便捷

微信同步修改,改单专用链接,微信改双向链接,同步修改器,仿真度高,操作便捷,支持测试。测试添加薇:gaijilu-com,或者直接联系本站右下角“在线客服”也可以。...

手机这样设置轻松省好几个G

手机这样设置轻松省好几个G

好多朋友都说手机流量总是不够用,没到月末早就没了,今天就手把手教你开启省流量模式,让你每月能省好几个G,如何设置?具体路径(👀图文字)如下第一步打开手机设置第二步点移动网络第三步点流量管理第四步点智能省流量第五步系统默认智能省流量是关闭的(灰色)我们把它打开(蓝色)这样就设置好了简单几步就搞定赶快去...

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

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

手机与电脑如何传递数据

手机+电脑 极简传文件速查表(直接照做,保存备忘录) 一、通用懒人(所有手机+电脑,小文件) 微信/QQ文件传输助手 1. 手机、电脑登录同一账号 2. 互相发送图片、文档、截图 3. 缺点:视频、图片会压缩,大文件慢 二、有线极速(原图/大视频/无压缩,推荐) 安卓 + 电...

有哪些方法可以延长手机的使用寿命?

延长手机寿命 完整极简指南(普通人照着做,多用 3–5 年)分为:电池、散热、存储、系统、使用习惯、隐私硬件保护,全是实用干货,无废话。一、电池寿命(手机最易老化的部件)拒绝满电长期插电电量保持:20%~80% 最佳,不要天天 100% 过夜充。杜绝边玩游戏 / 刷视频 边充电严重发热,极速损耗电池...

发表评论

访客

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