打开题目,找到主函数
image.png
分析函数,可以得出output.txt中的值就是flag经过循环后打印出的值,则我们可以根据循环算法推出flag。
1、按位与运算符(&)
例如:3&5 即 0000 0011& 0000 0101 = 0000 0001,因此 3&5 的值得1。
2、左移运算符(<<)
定义:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。
设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
3、右移运算符(>>)
定义:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
例如:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。
操作数每右移一位,相当于该数除以2。、右移运算符(>>)
解题脚本:
a = [198,232,816,200,1536,300,6144,984,51200,570,92160,1200,565248,756,1474560,800,6291456,1782,65536000]
c = ''
for i in range(1,20):
if i & 1:
c += chr(a[i-1] >> i)
else:
c += chr(a[i-1] // i)
print(c)
image.png