2020-钓鱼城杯-wp

2020-钓鱼城杯

re

reg

打开程序发现调用方式很奇怪,调试直接运行然后暂停通过stack trace找到输入函数,以宽字符输入然后处理成字符串,接着生成了两串数据,在这里绕了很久,总在找生成逻辑,实际上生成的数和输入没有关系,每次运行都会生成同样的数

1
2
e3dfb24a5553edac13ff65ac7b5f3170 
9d25dde0c137862132ec0c324cfbf046

发现之后接着调试,程序调用了wincrypt的API用来加密,根据传入的数据查到AES加密,整个程序的逻辑为,用生成的两串数作为iv和key,输入作为明文,输出经过base64编码之后显示到终端并写入到文件里,所以直接解密即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex

def add_to_16(text):
if len(text.encode('utf-8')) % 16:
add = 16 - (len(text.encode('utf-8')) % 16)
else:
add = 0
text = text + ('\0' * add)
return text.encode('utf-8')

def decrypt(text):
key = b"\xe3\xdf\xb2\x4a\x55\x53\xed\xac\x13\xff\x65\xac\x7b\x5f\x31\x70"
iv = b"\x9d\x25\xdd\xe0\xc1\x37\x86\x21\x32\xec\x0c\x32\x4c\xfb\xf0\x46"
mode = AES.MODE_CBC
cryptos = AES.new(key, mode, iv)
plain_text = cryptos.decrypt(a2b_hex(text))
return plain_text

if __name__ == '__main__':
d = decrypt(
b"F10014173233C3482DACB7915297AC89E45781087077C39F4F00C832B6C12DA6D2C75E4133CE84FB6440B10FD124A72A")
print("解密:", d)

# b'flag{this_flag_not_beyr_f81_8837fu8}\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c\x0c'
2020-DDCTF 2020-强网杯-wp

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×