Xposed hook SQLCipher 密码

  • 什么是SQLCipher
  • HOOK加密的原理
    • 介绍
    • 原理
  • 开始使用
    • 下载安装模块
    • 运行ADB命令
    • 启动待解密的APP
  • 在Windows下解密
    • 下载windows sqlcipher
    • 用CMD 打开到BIN文件夹
    • 执行命令
      • 创建加密数据库
      • 打开加密数据库
      • 修改数据库密码
      • 加密已有的数据库
      • 解密数据库(生成无密码的数据库: plaintext.db)
  • 查看与修改
  • 引用来源

什么是SQLCipher

SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的读写效率、资源消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如Android、iOS)。Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作,具体就不详细说明了。

然而,Android平台自带的SQLite有一个致命的缺陷:不支持加密。这就导致存储在SQLite中的数据可以被任何人用任何文本编辑器查看到。如果是普通的数据还好,但是当涉及到一些账号密码,或者聊天内容的时候,我们的应用就会面临严重的安全漏洞隐患。

目前最好且唯一的方案就是SqlCipher对sqlite3整体加密,微信也用的它。开源,且支持很多平台。

HOOK加密的原理

介绍

具有安全意识的开发人员经常使用SQLCipher来加密存储在设备文件系统中的内容。 SQLCipher是SQLite的稍微扩展的版本,它允许透明地使用256位AES加密,因此开发人员不必处理加密内部和其他抽象。

SQLCipher接受输入到PBKDF2算法中的密码,以得出加密密钥,该密钥最终用于加密数据库。如果开发人员由于对用户体验的负面影响而不想提示用户输入密码短语,则可以使用一种算法来导出密码

原理

例如,假设静态密钥为“ password1”,则以下是对openOrCreateDatabase API的有效使用:

SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, “password1”, null);

创建一个简单的应用程序“ MyEncryptedApp”以生成特定于设备的密码后,我们可以使用以下代码创建一个加密的数据库:

String id = new DeviceIdentity(this).generateDeviceIdentifier();SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, id, null);database.execSQL(“create table t1(a, b)”);database.execSQL(“insert into t1(a, b) values(?, ?)”, new Object[]{“one for the money”,“two for the show”});

即设备ID被用作数据库的密码。
这将创建一个加密的数据库,如下所示:

使用此信息,可以编写一个简单的CydiaSubstrate应用程序来挂接JVM中的方法,然后调用指向原始方法的指针,以允许执行继续。

为了实现这一点,我们可以使用MS.hookClassLoadmethod,它将等待我们要挂接的类加载以获得对它的引用。 在这种情况下,openOrCreateDatabase方法位于net.sqlcipher.database.SQLiteDatabase类中,因此我们将其用作MS.hookClassLoad的参数,以指示这是我们关注的类

static void hookCryptoKey() {MS.hookClassLoad(“net.sqlcipher.database.SQLiteDatabase”,new MS.ClassLoadHook() {public voidclassLoaded(Class<?> arg0) {Log.d(“MDSecHook”, “##### Class Loadedn”);

加载回调后,我们随后通过MS.MethodHook实例代理实现,该实例允许我们用自己的代码替换方法的实现:

new MS.MethodHook() {public Object invoked(Object arg0, Object… args)throws Throwable { Log.d(“MDSecHook”, “##### Error: “ + Thread.currentThread().getStackTrace());Log.d(“MDSecHook”, “###### Method hooked, stealing key: “ + args[1]);return old.invoke(arg0, args);}}, old);

CydiaSubstrate并不总是在所有设备上都可以工作,并且总体上似乎不如Xposed框架那样维护,该框架可以实现大致相同的目标。将测试设备从Lollipop降级到Jelly Bean并安装了MDSec Cydia调整后,即使MDSec提供的测试应用程序运行正常,他仍然无法获取要在日志缓冲区中打印的密钥。是什么赋予了?

事实证明,自MDSec创建它们的调整以来,SQLCipher库已进行了一些更改,并且现在有“ openOrCreateDatabase”方法的新的重载变体,这是MDSec尝试挂钩的(您可以在此处看到当前方法)。根据所测试的应用程序使用SQLCipher API的方式,您可能会看到记录在日志中的密钥。

开始使用

下载安装模块

1.下载这个APK,并进行安装,然后激活
GitHub: MyEncryptedApptest

2.之后将设备连接到电脑,打开USB调试,确任电脑端ADB可以连接到要调试的设备

运行ADB命令

adb logcat SqlCipherHook:D *:S

启动待解密的APP

此时命令窗口会将密码显示出来

在Windows下解密

首先要将软件的DB文件从Data用户数据文件夹拷贝到电脑中

下载windows sqlcipher

下载地址:
解密时要用与加密时相同的版本
https://github.com/sqlcipher/sqlcipher/releases

用CMD 打开到BIN文件夹

执行命令

创建加密数据库

$ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> PRAGMA key = 'thisiskey';
sqlite> create table encrypted (id integer, name text);
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);
sqlite> .q

打开加密数据库

$ sqlcipher encrypted.db
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> PRAGMA key = 'thisiskey';
sqlite> .schema
CREATE TABLE encrypted (id integer, name text);

修改数据库密码

sqlite> PRAGMA rekey = 'newkey';

加密已有的数据库

$ sqlcipher banklist.sqlite3
SQLCipher version 3.8.4.3 2014-04-03 16:53:12
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> ATTACH DATABASE 'encrypted.db' AS encrypted KEY 'thisiskey';
sqlite> SELECT sqlcipher_export('encrypted');
sqlite> DETACH DATABASE encrypted;

解密数据库(生成无密码的数据库: plaintext.db)

$ sqlcipher-shell32 encrypted.db
sqlite> PRAGMA key = 'thisiskey';
sqlite> ATTACH DATABASE 'plaintext.db' AS plaintext KEY '';
sqlite> SELECT sqlcipher_export('plaintext');
sqlite> DETACH DATABASE plaintext;

查看与修改

使用 Navicat 软件可以直接打开没有加密的DB文件

引用来源

https://www.mdsec.co.uk/2014/02/hooking-sqlcipher-crypto-keys-with-cydiasubstrate/

http://blog.thecobraden.com/2015/05/hooking-sqlcipher-with-xposed.html

https://blog.csdn.net/jiyafeng/article/details/89634681

https://blog.csdn.net/qq_36699930/article/details/100744874

Android数据库加密与破解(Xposed hook SQLCipher 密码)相关推荐

  1. android sqlcipher github,Android应用开发Android 数据库加密 SQLCipher使用方法

    Android 数据库加密 SQLCipher使用方法 最近在做数据库加密,遇到了些问题,特此记录 greendao 支持数据库加密 网址https://greenrobot.org/greendao ...

  2. android sqlcipher 加密,Android 数据库加密 SQLCipher使用方法

    android sqlcipher使用方法 最近在做数据库加密,遇到了些问题,特此记录 greendao 支持数据库加密 网址https://greenrobot.org/greendao/docum ...

  3. Android 数据库加密

    一 一个简短的引论   SQLite是一个轻量的.跨平台的.开源的数据库引擎.它的读写效率.资源消耗总量.延迟时间和总体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方式(如Android.i ...

  4. android数据库文件是否加密存储,详解Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库以及ContentProvider程序间数据共享,我们清晰的知道Sqlite数据库默认存放位置data/data/pakage/database目录 ...

  5. Android数据库加解密逆向分析(三)——微信数据库密码破解

    接着上一篇文章,在上一篇文章中我们通过对Line数据库加密的逆向分析,了解到了对要写入到数据库中的数据加密,读取时再将读取出的数据解密这种Android上的数据库加密方式.这篇文章来通过介绍对微信数据 ...

  6. 利用SQLChiper对Android SQLite数据库加密

    利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...

  7. android sqlite加密数据库,Android Sqlite数据库加密

    Android使用的是开源的SQLite数据库,数据库本身没有加密,加密思路通常有两个: 1. 对几个关键的字段使用加密算法,再存入数据库 2. 对整个数据库进行加密 SQLite数据库加密工具: 收 ...

  8. xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析

    章节内容 一. Android Hook 系列教程(一) Xposed Hook 原理分析 二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数 三. Androi ...

  9. Android打包混淆----APP加密防破解 + 重新签名

    ① 准备一个打包过的app文件包 . ②  登陆移动APP加密防破解爱加密官网http://www.ijiami.cn,没有账号的需要先注册账号(登陆后才能上传App文件进行加密). ③ 注册完后,登 ...

最新文章

  1. Redis 笔记(11)— 文本协议 RESP(单行、多行字符串、整数、错误、数组、空值、空串格式、telnet 登录 redis)
  2. ios底部栏设计规范_UI设计:iOS 界面规范
  3. 调用Win32 API 之CreateCursor函数失败
  4. css不换行属性_前端 | css display:flex 的六个属性你知道吗
  5. EXCEL在公司管理中的典型应用
  6. @EnableTransactionManagement
  7. OpenGL入门-2-颜色
  8. 【Intellij】Hot Swap Failed class reloaded
  9. 图片云存储(腾讯云 七牛云)
  10. FIL世界全新板块——DeFi震撼来袭
  11. Atitit q2016 qb doc list on home ntpc.docx
  12. FineBI与FineReport对比 1
  13. 单纯形法和单纯形表法
  14. 《死亡搁浅》:在“联结”的世界里,是 “个人”在游戏中
  15. 【智能制造】机器人与智能制造
  16. 学习有限元需了解的知识点
  17. 数学学科的总体架构是什么?
  18. python处理MNIST数据集
  19. java项目管理系统禅道下载,禅道专业版下载|禅道项目管理系统 V8.0 专业版 下载_当下软件园_软件下载...
  20. 常用的sql知识点总结

热门文章

  1. 打造高质效的技术团队 —— 酝酿篇
  2. FPGA数字信号处理(三)串行FIR滤波器Verilog设计
  3. MyEclipse开发WebService教程
  4. X-Bogus、_signature、msToken、_ac_signature、fp逆向分析
  5. BPR项目实施中常用的五大技术和方法 (转载)
  6. 为喜欢的人撰写最深情的生日祝福语
  7. 福昕阅读器 5.4.4.1128 Firefox Plugin npFoxitReaderPlugin.dll Stack Buffer Overflow
  8. MacBook pro 2018款死机或出现故障的重启问题
  9. Android M App 永久隐藏导航栏的Solution
  10. 树状数组与其应用(Python实现)(1)