Objection快速逆向、自动分析和主动调用
本章用一个简单的仿微信数据库的案例来过一遍Objection的一些操作,怎么快速分析和主动调用。
设备:nexus5
系统版本:Android 6.0
分析文件是一个.ab
文件,.ab后缀的文件是Android系统备份文件的一个格式
解包
GitHub上有解包工具 可以先对其进行解包
┌──(kali㉿kali)-[~/Documents/lesson3]
└─$ java -jar abe.jar unpack 1.ab 1.tar
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
0% 1% 2% 3% 4% 5% 6% 7% 8% 9% 10% 11% 12% 13% 14% 15% 16% 17% 18% 19% 20% 21% 22% 23% 24% 25% 26% 27% 28% 29% 30% 31% 32% 33% 34% 35% 36% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99% 100%
9097216 bytes written to 1.tar.
解包之后解压tar文件,然后查看内容
┌──(kali㉿kali)-[~/Documents/lesson3] └─$ tar xvf 1.tar apps/com.example.yaphetshan.tencentwelcome/a/base.apk apps/com.example.yaphetshan.tencentwelcome/db/Demo.db apps/com.example.yaphetshan.tencentwelcome/Encryto.db apps/com.example.yaphetshan.tencentwelcome/_manifest ┌──(kali㉿kali)-[~/Documents/lesson3/apps/com.example.yaphetshan.tencentwelcome] └─$ tree . ├── a │ └── base.apk ├── db │ └── Demo.db ├── Encryto.db └── _manifest
接下来分析base.apk安装包,将其安装在手机上,这个app用模拟器调试也行,因为它没有native层的代码。
静态分析
这里使用jadx打开base.apk
先静态看一下
通过查看MainActivity可以知道它主要完成了以下操作:
设置界面布局
处理按钮点击事件
写入SQLite数据库,并使用sqlcipher对数据进行加密
有些时候jadx静态反编译的结果不一定准确,碰到有问题的也可以使用Objection动态确认一下
接下来分析一下怎么拿到密码打开数据库
- 这里根据它的加密流程,我们可以考虑通过hook它的加密参数来拿到加密的密码
通过之前的静态分析可以知道写入数据库的过程是在a()
中实现的,通过在a()
方法中调用getWritableDatabase
来设置密码
如此我们可以考虑hookgetWritableDatabase
监听它传入的参数来拿到密码
使用objection分析
先拿到主包的句柄
objection -N -h 192.168.1.8 -p 9999 -g com.example.yaphetshan.tencentwelcome explore
android heap search instances com.example.yaphetshan.tencentwelcome.MainAct
ivity # 获取MainActivity的handle
- 知道
MainActivity
的句柄了之后就可以调用a()
了
然后来获取一下getWritableDatabase
的包名和路径来添加监听
执行命令获取包名路径
android hooking list class_methods net.sqlcipher.database.SQLiteOpenHelper
监听参数获取密码
android hooking watch class_method net.sqlcipher.database.SQLiteOpenHelper.
getWritableDatabase --dump-args # 监听参数
android heap execute 0x10052e a # 手动调用a()
用拿到的密钥去打开Encryto数据库:数据库的位置可以在我们前面解压的目录下看到
使用DB Browser for SQLite 可以打开sqlcipher加密的数据库文件
这个flag值看起来像是base64,拿去解码看看
- 这就是最终的flag了
Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}
- 标题: Objection快速逆向、自动分析和主动调用
- 作者: xiaoeryu
- 创建于 : 2023-11-14 21:34:32
- 更新于 : 2023-11-14 21:57:42
- 链接: https://github.com/xiaoeryu/2023/11/14/Objection快速逆向、自动分析和主动调用/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论