目录
1.题目
题目给了一个encrypted.txt文件,内容如下:
Encoded A: 213c234c2322282057730b32492e720b35732b2124553d354c22352224237f1826283d7b0651
Encoded B: 3b3b463829225b3632630b542623767f39674431343b353435412223243b7f162028397a103e
Original A: 5448452042455354204354462043415445474f52592049532043525950544f47524150485921
Original B: 4e4f205448452042455354204f4e452049532042494e415259204558504c4f49544154494f4e
A XOR A: 7574666c61677b7477305f74696d335f703464737d7574666c61677b7477305f74696d335f70
B XOR B: 7574666c61677b7477305f74696d335f703464737d7574666c61677b7477305f74696d335f70
2.分析
注意到题目中为OTP,网络上搜索OTP知道代表ONE TIME PAD问题,即是一次性加密的问题,在这种问题中使用key对密文进行一次二进制的异或进行加密,要求key和原文的16进制长度一致,在文本中我们可以先将Original A和B进行16进制解码,然后就看能否得到一些提示信息,但是最终flag是A XOR A的结果,看来是出题人把flag拼接成了key来进行加密了,这么看来这道题目并不难。
3.解题
对Original A、B进行解码:
a = '5448452042455354204354462043415445474f52592049532043525950544f47524150485921'
b = '4e4f205448452042455354204f4e452049532042494e415259204558504c4f49544154494f4e'
for i in range(0, len(a), 2):
print(chr(int(a[i:i+2], 16)), end = '')
for i in range(0, len(b), 2):
print(chr(int(b[i:i+2], 16)), end = '')
#THE BEST CTF CATEGORY IS CRYPTOGRAPHY!NO THE BEST ONE IS BINARY EXPLOITATION
再对key进行16进制解码:
c = '7574666c61677b7477305f74696d335f703464737d7574666c61677b7477305f74696d335f70'
for i in range(0, len(c), 2):
print(chr(int(c[i:i+2], 16)), end = '')
#utflag{tw0_tim3_p4ds}utflag{tw0_tim3_p
得到的flag即为:
utflag{tw0_tim3_p4ds}
4.参考
无