NPUCTF2020-你好sao啊

代码意思很明确,让我们输入一个33bytes的字符串,进行加密后,跟已知字符串相比较,如果相等就成功,否则失败。

因为windows上数据存储是小端存储,所以已知字符串的顺序需要手动调整,当然也可以动态调试之后直接从内存中复制过来。

1
2
3
4
5
6
7
unsigned char ida_chars[] =
{
0x9E, 0x9B, 0x9C, 0xB5, 0xFE, 0x70, 0xD3, 0x0F, 0xB2, 0xD1,
0x4F, 0x9C, 0x02, 0x7F, 0xAB, 0xDE, 0x59, 0x65, 0x63, 0xE7,
0x40, 0x9D, 0xCD, 0xFA, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00
};

接下来是分析加密函数:

大概可以猜测到这是一个base64解密函数,但是对照表发生了改变,进入到find_posc()函数中可以知道对照表:

1
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234{}789+/=

总的来说,就是一个变表base64解密,我们只要进行加密即可得到 flag。

1
2
3
4
5
result = [0x9E, 0x9B, 0x9C, 0xB5, 0xFE, 0x70, 0xD3, 0x0F, 0xB2, 0xD1, 0x4F, 0x9C, 0x02, 0x7F, 0xAB, 0xDE, 0x59, 0x65, 0x63, 0xE7,  0x40, 0x9D, 0xCD, 0xFA, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00]
table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234{}789+/="

for i in result:
print(chr(i),end="")

打印出来的字符串拿去解密(这个工具不能以16进制作为输入)


NPUCTF2020-你好sao啊
http://example.com/2023/09/04/CTF/NPUCTF2020-你好sao啊/
作者
gla2xy
发布于
2023年9月4日
许可协议