(63)[CISCN 2022 东北]easycpp
这个题,我们先IDA打开,进行一波正常的流程操作
然后我们看这个伪代码
可能你们刚打开,会被这些代码所震惊。其实不然。
我们一步步分析就知道只有其中的三个步骤在发挥作业
它定义的很多数据都是重复在使用
主要是这三句话,当我去提取Buf2的数据时,我们发现我们根本提取不出来。是空的。当我们执行这个程序它肯定是有数据的,我们可以对它按X去查看数据来源,也可以直接动调获得数据
enc=[0x0A, 0x0B, 0x7D, 0x2F, 0x7F, 0x67, 0x65, 0x30, 0x63, 0x60, 0x37, 0x3F, 0x3C, 0x3F, 0x33, 0x3A, 0x3C, 0x3B, 0x35, 0x3C, 0x3E, 0x6C, 0x64, 0x31, 0x64, 0x6C, 0x3B, 0x68, 0x61, 0x62, 0x65, 0x36, 0x33, 0x60, 0x62, 0x36, 0x1C, 0x7D]
然后我们直接写解密脚本
enc=[0x0A, 0x0B, 0x7D, 0x2F, 0x7F, 0x67, 0x65, 0x30, 0x63, 0x60, 0x37, 0x3F, 0x3C, 0x3F, 0x33, 0x3A, 0x3C, 0x3B, 0x35, 0x3C, 0x3E, 0x6C, 0x64, 0x31, 0x64, 0x6C, 0x3B, 0x68, 0x61, 0x62, 0x65, 0x36, 0x33, 0x60, 0x62, 0x36, 0x1C, 0x7D] for i in range(len(enc)-4,-1,-1): enc[i + 2] = enc[i + 2] ^ enc[i + 3] enc[i + 1] = enc[i + 1] ^ enc[i + 2] enc[i ] = enc[i ] ^ enc[i + 1] print(''.join(map(chr, enc)))
flag{37c1b0258164803691d1d193b00ec56a}