wintop 发表于 2022-7-16 17:52

记一次android app sqlite 数据库密码获取及导出sqlcipher加密的数据

本帖最后由 wintop 于 2022-7-24 03:19 编辑

软件就不提了,涉及商业信息。本人初级菜鸟,教程可能有些地方说的不对,大佬手下留情!
突破很坎坷,省去了一些因为设备问题的步骤(建议直接上模拟器,不要真机调试)。
环境:
雷电模拟器3.122root+xposed+buildprop Enhancer(用于全局 debuggable 修改,否则软件无法调试)
MT管理器
jeb3 beta
DBBrowserForSQLite_V3.12.2
某APP,下面称MAPP
软件基本情况
用MT管理器查看无加固,签名V1+V2。
AndroidManifest.xml 中的 android:debuggable="false" ,改成true 签名后软件无法正常运行,点关键服务会直接闪退。
说明有反调试。查阅资料,在 .so文件鼓捣了几个小时,未发现有用的地方(IDA 太太菜)。
突破过程
XPOSED 装 buildprop Enhancer 全局修改 debuggable =1
验证方式:进终端,输入su 回车,然后 输入 getprop ,如果 ro.debuggable=1 则开启成功。
然后就是MT分析代码,发现.method public static isDebug(Context)Z
修改函数结果返回值 为 false,然后,调试正常。

接下来就是找sqlite 数据库相关信息,查找到 SQLiteDatabase.openDatabase(v0_2, v1, v3, v2);
下断点,jeb的变量监控比较菜,监控的变量默认都是int数据类型,需要手工修改为string 类型,分析出 v1为数据库密码,但是遗憾的是,用navicte for sqlite 无法打开。
百度了一些sqlite 管理工具也是无果,浪费了整整半天时间,以为断点位置错了。
后来发现资料提示:sqlcipher 版本必须一致才能解密。于是mt中找到 public static final String SQLCIPHER_ANDROID_VERSION = "4.2.0";
皇天不负有心人,终于找到可以打开数据库的软件,DBBrowserForSQLite_V3.12.2(DB Browser for SQLCipher)。

暂时记录这些,因为数据库密码是通过RSA加密回传,且又跟ID一些参数有关,现在处理数据库只能调试获取,希望下一步能分析出算法来,直接打开数据库。

今天更新,回来花了6个小时搞定了加密方式(用了3中加密方式,包含RSA),已经可以通过自动化程序代替手工点击生成数据。

hackerbob 发表于 2022-7-16 18:40

楼主,我建议配上图片,以及分析思路和流程,不然都看不懂你在说什么。。。。。。。。

tencentma 发表于 2022-7-18 15:35

hackerbob 发表于 2022-7-16 18:40
楼主,我建议配上图片,以及分析思路和流程,不然都看不懂你在说什么。。。。。。。。

赞同,步骤在清晰点会更好,看起来也逻辑清晰

as4201 发表于 2022-7-16 18:46

给新人赞一个

测试学学 发表于 2022-7-16 18:52

虽然看不懂但是还是要给你赞一下

EchoChao 发表于 2022-7-17 08:53

建议贴图片

江南云 发表于 2022-7-17 13:36

非常期待大神继续分析出算法来,直接打开数据库,功能更完善。感谢辛苦分享!

fscc无误 发表于 2022-7-17 14:56



感谢分享
感谢分享

lws0318 发表于 2022-7-18 09:40

新人来学习,谢分享

flygmw 发表于 2022-7-18 12:11

感谢分享
新人来学习
页: [1] 2
查看完整版本: 记一次android app sqlite 数据库密码获取及导出sqlcipher加密的数据