逆向基础题:安装包是11.ab,要求密码验证登陆

描述

题目来源:2019XCTF MOBILE 第三题 题目:安装包是11.ab,要求密码验证登陆。 知识点:Frida objection,SQLCipher加解密,Android备份和还原。   解题过程: 根据Android备份和还原知识,知道ab文件为backup文件,可以利用abe工具解压,得到如下文件。

取出base.apk,拉入JADX分析,根据Android数据库SQLCipher加解密知识,加密的数据库密码是getWritableDatabase函数参数决定的。

Flag

Flag

下面我们利用X86模拟器安装apk和frida-servr-android-X86,然后利用Frida Objection打印出getWritableDatabase函数的入参来获取数据库密码。   首先静态分析,发现getWritableDatabase定义在net.sqlcipher.database.SQLiteOpenHelper类中,利用objection确认下getWritableDatabase原型。

Flag

然后我们hook这个getWritableDatabase函数,打印返回值、调用栈和参数信息。

Flag

根据源码分析getWritableDatabase是在MainActivity类的a函数中调用的,而a函数在OnCreate中被调用,我们打开apk后,getWritableDatabase函数其实已经执行完毕了。所以我们采用堆上调用实例方法的方式。这里注意我们尝试在启动objection时添加参数-d或--startup-command=“android hooking watch…”是没法hook到MainActivity类的a函数的。   第一,查看MainActvity类中所以方法列表,可以看到a函数。

Flag

第二,查看MainActvity实例的handle值。

Flag

第三,触发实例方法a,如下所示,可以看到数据库密码是“ae56f99”。

Flag

拿到数据库密码后可以用工具查看数据库信息,根据代码知道SQLCipher版本是3.4.0。

Flag

所以下图中选择SQLCipher 3,如下所示

这样得到flag值,如下光亮处所示,很明显这是base64加密数据。  

直接进行base64解码,这样我们就得到了flag为Tctf{H3ll0_Do_Y0u_Lov3_Tenc3nt!}

责任编辑:xj

原文标题:逆向基础题十一:获取Flag

文章出处:【微信公众号:Linux逆向】欢迎添加关注!文章转载请注明出处。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分