【2023春节】解题领红包之六

吾爱论坛2023春节出的题,此道题是Android中级题。

使用jadx查看程序流程:

由于write_img()当分贝符合时才执行,所以先hookCheck_Volume()修改其分贝值。

查看write_img()函数:

私有目录即/sdcard/Android/data/{PackageName}/files/,其实私有目录下的aes.png/assets/中的aes.png是一样的。查看aes.png文件,发现进行了Base64编码。

Java层逻辑已经分析了差不多了,并没有调用到Native层方法,但加载了So文件。查看lib52pj.so的导出函数,有AES加解密函数、Base64加解密函数以及Key,结合aes.png,基本上可以判断aes.png进行了AES加密,然后再进行Base64编码。

接下来就是找密钥。查看JNI_OnLoad()方法,JNI_OnLoad()中执行了ptrace()方法,所以如果我们使用Frida再次ptrace()会失败。

进入methods,找到注册函数get_RealKey(),传入的字符串长度为16,与内存数据加密后与“thisiskey”作比较,如果相等返回false,这里是个障眼法,我一直以为是相等返回true!

那么这个传入的字符串是什么呢?这个应用并没有要求我们输入,所以这个字符串应该是本地存储的。猜测是通过假密钥得到真密钥。查看导出函数表的encrypt()decrypt()函数,它们使用的密钥为|wfkuqokj4548366,这个应该就是假密钥。

vaddq_s8()函数表示一次性对16个数进行加法,刚好假密钥与内存数据都是16个字符。对其进行加密得到真密钥wuaipojie2023114

已知真密钥,再对aes.png进行AES解密。CyberChef也太香了。

1
flag{Happy_New_Year_Wuaipojie2023}