Objection快速逆向、自动分析和主动调用

xiaoeryu Lv5

本章用一个简单的仿微信数据库的案例来过一遍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 进行许可。
评论
此页目录
Objection快速逆向、自动分析和主动调用