吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4184|回复: 10
收起左侧

[CTF] 记一次ctf的RE题《pyre》的writeup

  [复制链接]
lyj0886 发表于 2019-12-4 23:57

一开始拿到一个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[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 = code ^ code[i + 1] ,字符串无法进行按位异或运算。


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


最后,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[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 = (code - i)%128


s+=chr(code)

print(s)




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


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

免费评分

参与人数 4吾爱币 +10 热心值 +4 收起 理由
Hmily + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
skye231 + 1 + 1 我很赞同!
down_drop + 1 + 1 我很赞同!
FleTime + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

还不知道,论坛代码块怎么发。。我努力探索一下。
Culaccino 发表于 2019-12-5 11:14
[Python] 纯文本查看 复制代码
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[i]=chr(ord(code[i])^ord(code[i+1]))
for i in range(len(code)):
        print(chr((ord(code[i]) - 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
[mw_shl_code=python,true]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

校友吗?见笑了哈哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 02:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表