HWS 2023 山东大学专场 决赛wp
写在前面:
通过这次比赛,认识到了自己和高手的不足,知识面还需要拓展
1.Re ezapk
因为自己本身不是做逆向的,所以没什么经验,赛后复盘的时候解决了这道题
首先使用apktool
将给出的apk文件进行解包,解包到ez这个文件夹
查看ez文件夹
本题加密的主要逻辑部分在lib的.so文件中
lib下有x86和arm架构的lib.so文件,都拖进IDA里试一下,发现第二个arm-v7的IDA反编译的可读性更高
这里是加密的主要逻辑,可以看出flag长度为38,而且对前37的字符进行了操作,具体操作是用前一个字符和后一个字符进行异或,把异或后的结果存到v7中,然后进入了enc函数进行了某些操作后,变成了3JnGvLkUn-01RGNQUw4616Ko31X2bD3JwQUTnh>T2?JA8PkjIY
这个字符串,猜测base编码
跟进enc函数,发现一个类似编码表的东西
统计一下表的长度,发现有85个,感觉有可能是base85
cyberchef base85+To Hex得到:
去掉后面两个0x00,然后写脚本前37位前一个和后一个进行xor:
a=[0x0a,0x0d,0x06,0x1c,0x43,0x09,0x50,0x55,0x00,0x0c,0x5e,0x57,0x52,0x05,0x00,0x04,0x03,0x57,0x03,0x50,0x04,0x52,0x06,0x06,0x0a,0x0e,0x07,0x54,0x5c,0x0b,0x0a,0x01,0x09,0x03,0x53,0x53,0x4f,0x7d]
for i in range(37):
a[36-i]=a[37-i]^a[36-i]
for j in range(38):
print(chr(a[j]),end='')
最后得到了flag: