【CTF】记一次ctf的RE题《pyre》的writeup

一开始拿到一个pyc文件,尝试打开却老是闪退。
于是上网搜索pyc,查到要转化成py文件才能打开

http://tools.bugscaner.com/decompyle/
在上面这个网站反编译后,得到的代码是:

print
'Welcome to Re World!'
print
'Your input1 is your flag~'

l = len(input1)
code = []
for i in range(l):
num =((input1[i] + i) % 128 + 128) % 128
code += num

for i in range(l - 1):
code[i] = code[i] ^ code[i + 1]

print
code

code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':',
'\x01', 'D', ';', '%', '\x13']

一开始,第一次碰到,看的很懵。后来根据’Your input1 is your flag~’ 以及这段代码的思路想了一下,这道题应该是要我们把已经得到的code 逆着代码思路倒推出
input1,也就是要的flag。

得到思路后,就开始动手。
首先要转化code里的字符串,因为看到code[i] = code[i] ^ code[i + 1] ,字符串无法进行按位异或运算。

再者, 将code中数据从尾到头,按位异或回来,顺序不能变,因为只有code[22]始终没变。

最后,code[i]依次减i就能得到flag—GWHT{Just_Re_1s_Ha66y!}

其实,说到底就是逆运算。挺简单,但由于是第一次接触ctf,又是自己拿到的第一个flag,所以还是值得纪念的。。嘻嘻

接下来,是我的傻乎乎的代码:

code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':',
'\x01', 'D', ';', '%', '\x13']

s = ''
i = 0

for i in range(len(code)):
code[i] = ord(code[i])


code[21] = code[21]^code[22]
code[20] = code[20]^code[21]
code[19] = code[19]^code[20]
code[18] = code[18]^code[19]
code[17] = code[17]^code[18]
code[16] = code[16]^code[17]
code[15] = code[15]^code[16]
code[14] = code[14]^code[15]
code[13] = code[13]^code[14]
code[12] = code[12]^code[13]
code[11] = code[11]^code[12]
code[10] = code[10]^code[11]
code[9] = code[9]^code[10]
code[8] = code[8]^code[9]
code[7] = code[7]^code[8]
code[6] = code[6]^code[7]
code[5] = code[5]^code[6]
code[4] = code[4]^code[5]
code[3] = code[3]^code[4]
code[2] = code[2]^code[3]
code[1] = code[1]^code[2]
code[0] = code[0]^code[1]

print()
print()
print()

i = 0
c = 0
for i in range(0,23):
code[i] = (code[i] - i)%128

s+=chr(code[i])
print(s)

总结:
1.ord()以及cha()的使用
2.按位异或 ^ 的使用
3.复习了下好久没用到的 %

最后大佬不喜勿喷,本人萌新小菜鸡一枚。。。开心就好!!

你可能感兴趣的:(其他)