lyj0886 发表于 2019-12-4 23:57

记一次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) % 128 + 128) % 128
code += num

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

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 = code ^ code ,字符串无法进行按位异或运算。


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


最后,code依次减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 = ord(code)


code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code
code = code^code

print()
print()
print()

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

s+=chr(code)
print(s)




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


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

lyj0886 发表于 2019-12-5 16:21

sos218909 发表于 2019-12-5 11:47
给你点个赞,下次代码可以用代码块,不然看着很累

还不知道,论坛代码块怎么发。。我努力探索一下。

Culaccino 发表于 2019-12-5 11:14

code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ',', '\x1b', 'U', '?', 'o', '6', '*', ':','\x01', 'D', ';', '%', '\x13']
for i in range(len(code)-2,-1,-1):
      code=chr(ord(code)^ord(code))
for i in range(len(code)):
      print(chr((ord(code) - i)%128),end="")

sos218909 发表于 2019-12-5 11:47

给你点个赞,下次代码可以用代码块,不然看着很累

fnycwfj 发表于 2019-12-5 13:42

看不懂,研究中

lyj0886 发表于 2019-12-5 16:20

Culaccino 发表于 2019-12-5 11:14
code = ['\x1f', '\x12', '\x1d', '(', '0', '4', '\x01', '\x06', '\x14', '4', ...

因为之前学的是c++,对py不熟。用循环一直得不到正确答案。。。。谢谢啦学会了。

1575108607 发表于 2019-12-5 18:26

加油一起学习

Deuez 发表于 2019-12-5 19:56

skye231 发表于 2019-12-5 20:47

广外校赛哈哈

lyj0886 发表于 2019-12-5 21:59

skye231 发表于 2019-12-5 20:47
广外校赛哈哈

校友吗?见笑了哈哈
页: [1] 2
查看完整版本: 记一次ctf的RE题《pyre》的writeup