HWS 2023 山东大学专场 决赛wp

发布时间 2023-11-27 15:34:13作者: Smera1d0

写在前面:
通过这次比赛,认识到了自己和高手的不足,知识面还需要拓展

1.Re ezapk

因为自己本身不是做逆向的,所以没什么经验,赛后复盘的时候解决了这道题

首先使用apktool将给出的apk文件进行解包,解包到ez这个文件夹
image.png

查看ez文件夹
image.png

本题加密的主要逻辑部分在lib的.so文件中
image.png

lib下有x86和arm架构的lib.so文件,都拖进IDA里试一下,发现第二个arm-v7的IDA反编译的可读性更高
image.png

这里是加密的主要逻辑,可以看出flag长度为38,而且对前37的字符进行了操作,具体操作是用前一个字符和后一个字符进行异或,把异或后的结果存到v7中,然后进入了enc函数进行了某些操作后,变成了3JnGvLkUn-01RGNQUw4616Ko31X2bD3JwQUTnh>T2?JA8PkjIY这个字符串,猜测base编码

跟进enc函数,发现一个类似编码表的东西
image.png

image.png

统计一下表的长度,发现有85个,感觉有可能是base85

cyberchef base85+To Hex得到:
image.png

去掉后面两个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:
image.png