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

Android数据库加解密逆向分析

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

一、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数据库加解密逆向分析” 的相关文章

手机微信如何简单修复聊天记录

手机微信如何简单修复聊天记录

我们在使用微信的过程中有时候会出现聊天记录不能显示的情况,今天小编就教大家如何利用微信自带的功能修复聊天记录,一起来看看吧。1登录手机微信并点击右下角的【我的】按钮。2点击按钮【设置】并打开。3在设置里找到【帮助与反馈】并打开按钮。4点击打开右上角的扳手按钮。...

解密微信数据库文件解析

解密微信数据库文件解析

图解说明:微信大量数据存储在本地比如:联系人(包含好友地区、电话、通过那种方式添加)、聊天内容(图片、文字、语音、视频、位置、名片、其他app分享链接)、聊天室、收藏信息、朋友圈内容(包含好友详情、点赞、评论);摇一摇、附近人、最近联系人、好友请求、图片存放路径;微信内置的表情包;如联系人:聊天信息...

手机数据工厂对强权、制度、民主的理解

手机数据工厂对强权、制度、民主的理解

你制订一个法律,只要求我遵守,这叫强权你制订一个法律,我们一起遵守,这叫制度你和我一起制订个法律,然后我们一起遵守这叫民主...

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

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

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

手机隐私防泄露指南,普通人必看

普通人手机隐私防泄露完整指南覆盖日常使用、权限、软件、支付、社交、拍照、定位七大核心场景,简单好操作,普通人照着设置就能大幅降低隐私泄露、被偷拍、被诈骗风险。一、基础权限:关掉所有没必要的授权关闭 APP 过度权限相册、麦克风、摄像头、定位、通讯录、存储、后台弹窗,非必要全部设为「仅使用时允许」或「...

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

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

发表评论

访客

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