问题源:2019XCTFMOBILE问题3:安装软件包为11.ab,需要密码验证才能登录。知识点:Fridaobjection,SQLCipher加密和解密,Android备份和还原。解决问题的过程:根据对Android备份和还原的了解,知道ab文件是一个备份文件,可以使用abe工具解压缩并获取以下文件。取出base.apk,进行JADX分析,根据Android数据库SQLCipher的加密和解密知识,加密的数据库密码由getWritableDatabase函数参数确定。接下来,我们使用X86仿真器安装apk和frida-servr-android-X86,然后使用FridaObjection打印出getWritableDatabase函数的输入参数以获得数据库密码。首先,静态分析发现getWritableDatabase是在net.sqlcipher.database.SQLiteOpenHelper类中定义的。使用异议来确认getWritableDatabase原型。然后,我们钩住getWritableDatabase函数以打印返回值,调用堆栈和参数信息。根据源代码分析,在MainActivity类的a函数中调用getWritableDatabase,在OnCreate中调用a函数。打开apk后,实际上已经执行了getWritableDatabase函数。因此,我们使用在堆上调用实例方法的方法。请注意,此处我们尝试添加参数-d或--startup-command =“ androidhookingwatch ...”开始提出异议时,不可能钩接到MainActivity类的a函数。首先,查看MainActvity类中所有方法的列表,您可以看到一个函数。其次,检查MainActvity实例的句柄值。第三,触发实例方法a,如下所示,您可以看到数据库密码为“ ae56f99”。获取数据库密码后,您可以使用该工具查看数据库信息。根据代码,您知道SQLCipher版本是3.4.0。因此,在下图中选择SQLCipher3,并获得标志值,如下所示。如下图所示,很明显这是base64加密的数据。直接进行base64解码,因此将其标记为Tctf {H3ll0_Do_Y0u_Lov3_Tenc3nt!}!