题目来源:2019XCTF MOBILE 第三题 题目:安装包是11.ab,要求密码验证登陆。 知识点:Frida objection,SQLCipher加解密,Android备份和还原。 解题过程: 根据Android备份和还原知识,知道ab文件为backup文件,可以利用abe工具解压,得到如下文件。
取出base.apk,拉入JADX分析,根据Android数据库SQLCipher加解密知识,加密的数据库密码是getWritableDatabase函数参数决定的。
下面我们利用X86模拟器安装apk和frida-servr-android-X86,然后利用Frida Objection打印出getWritableDatabase函数的入参来获取数据库密码。 首先静态分析,发现getWritableDatabase定义在net.sqlcipher.database.SQLiteOpenHelper类中,利用objection确认下getWritableDatabase原型。
然后我们hook这个getWritableDatabase函数,打印返回值、调用栈和参数信息。
根据源码分析getWritableDatabase是在MainActivity类的a函数中调用的,而a函数在OnCreate中被调用,我们打开apk后,getWritableDatabase函数其实已经执行完毕了。所以我们采用堆上调用实例方法的方式。这里注意我们尝试在启动objection时添加参数-d或--startup-command=“android hooking watch…”是没法hook到MainActivity类的a函数的。 第一,查看MainActvity类中所以方法列表,可以看到a函数。
第二,查看MainActvity实例的handle值。
第三,触发实例方法a,如下所示,可以看到数据库密码是“ae56f99”。
拿到数据库密码后可以用工具查看数据库信息,根据代码知道SQLCipher版本是3.4.0。
所以下图中选择SQLCipher 3,如下所示
这样得到flag值,如下光亮处所示,很明显这是base64加密数据。
直接进行base64解码,这样我们就得到了flag为Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}
责任编辑:xj
原文标题:逆向基础题十一:获取Flag
文章出处:【微信公众号:Linux逆向】欢迎添加关注!文章转载请注明出处。
-
Flag
+关注
关注
0文章
11浏览量
8120 -
安装包
+关注
关注
1文章
15浏览量
3441 -
apk
+关注
关注
0文章
23浏览量
4871
原文标题:逆向基础题十一:获取Flag
文章出处:【微信号:Reverse16,微信公众号:Q哥学逆向】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论