NSSCTF-简简单单的逻辑
[SWPUCTF 2021 新生赛]简简单单的逻辑
点击查看代码
flag = 'xxxxxxxxxxxxxxxxxx'
list = [47, 138, 127, 57, 117, 188, 51, 143, 17, 84, 42, 135, 76, 105, 28, 169, 25]
result = ''
for i in range(len(list)):
key = (list[i]>>4)+((list[i] & 0xf)<<4)
result += str(hex(ord(flag[i])^key))[2:].zfill(2)
print(result)
# result=bc fb a4 d0 03 8d 48 bd 4b 00 f8 27 96 d3 93 df ec
发现有一个列表和result承接字符串,在for循环中主要分析第二行代码flag与key做异或操作,然后转换为对应的ascii码,在hex变为相应的十六进制。
由于zfill()函数,所以每次for循环得到2个字符,如上图绿色字体
[2:]为python中的切片操作
str.zfill(width)函数:返回指定长度的字符串,原字符串右对齐,前面补0str.zfill(width)函数:返回指定长度的字符串,原字符串右对齐,前面补0
根据题目给的附件逆向得到flag
点击查看代码
result='bcfba4d0038d48bd4b00f82796d393dfec'
flag = ''
list = [47, 138, 127, 57, 117, 188, 51, 143, 17, 84, 42, 135, 76, 105, 28, 169, 25]
for i in range(len(list)):
key = (list[i]>>4)+((list[i] & 0xf)<<4)
flag += chr(int(result[2*i:2*i+2],16)^key)
print(flag)
转自:https://blog.csdn.net/weixin_61154173/article/details/127431268