(51)[GWCTF 2019]pyre

[GWCTF 2019]pyre

NSS:251

这个题的基础解法,我们得到pyc文件。

然后我们通过指令 uncompyle6 -o 123.PY XXX.PYC

然后我们得到123.py这个文件。我们打开看一下

image-20250306164543803

我们知道了这些个加密,就很容易就可以写出来了,这都是基本的加密

image-20250306164605927

以上我用的爆破写法,但是网上人家都用的模运算怎么说嘞,他们那个肯定更方便

这个数学算法我不太会,我也遇见好多次了。所以这个东西我还是很推荐用人家的。

GWHT{Just_Re_1s_Ha66y!>

注意:用爆破这个方法之后我们得到的最后一位是一个>我们把这个改一下

模运算方法呢,是这样写的

image-20250306164952430

哎,不是为什么还是这个答案,可能我上面的code最后一位不对着。

<think>好的,我现在需要帮助用户解决GWCTF 2019中的Pyre题目。首先,用户想要详细的步骤,包括安装工具、使用教程以及解题思路。我需要回忆一下这个题目的相关信息和之前看过的引用内容。 根据用户提供的引用,题目涉及.pyc文件的反编译。引用[1]和[2]提到了使用在线反汇编工具或者uncompyle6库来将.pyc文件转换为.py源码。引用[3]提到了代码中的一段逻辑,可能涉及到输入的验证和flag的生成。 首先,用户需要安装uncompyle6。步骤应该是通过pip安装,然后用命令反编译.pyc文件。然后得到源码后,需要分析其中的逻辑,特别是input1的处理部分,比如input1[i] +1 > 128的情况,然后进行逆向计算。 可能需要用户下载题目附件,比如attachment.pyc,然后用uncompyle6转换成.py文件。然后查看源码中的加密逻辑,找到如何从输入得到flag的算法,然后逆向运算,比如逆向每个字符的计算,可能需要考虑模运算和ASCII值的调整。 在解题步骤中,需要详细说明如何安装工具,转换文件,分析代码,找到关键逻辑,然后编写逆向脚本。此外,需要确保用户能按照步骤操作,比如检查Python环境,正确安装库,处理可能的错误。 可能遇到的问题包括uncompyle6安装失败,或者反编译后的代码有误,这时候可能需要尝试其他工具或者手动调整代码。另外,在逆向算法时,需要注意字符的取值范围,尤其是模128的部分,避免计算错误。 最后,要总结步骤,确保用户能一步步跟随,从安装工具到逆向分析,最终得到flag。</think>### GWCTF 2019 Pyre 题目解题步骤 #### 1. 安装反编译工具 首先需要安装 `uncompyle6` 库,用于将 `.pyc` 文件反编译为可读的 `.py` 源码: ```bash pip install uncompyle6 ``` #### 2. 反编译题目附件 假设题目提供的附件为 `attachment.pyc`,执行以下命令反编译: ```bash uncompyle6 -o attachment.py attachment.pyc ``` 反编译后生成 `attachment.py`,可查看源码逻辑[^2]。 --- #### 3. 分析源码逻辑 根据引用[3],源码中存在关键逻辑: ```python if input1[i] + 1 > 128: num[i] = (input1[i] + 128 - i) % 128 else: num[i] = (input1[i] - i) % 128 ``` 目标是通过逆向此逻辑从 `num` 数组(即题目给出的加密结果)推导出原始输入 `input1`。 --- #### 4. 逆向算法推导 假设加密结果为已知数组 `encrypted_num`,逆向步骤如下: 1. **遍历每个字符索引 `i`** 2. **计算原始字符 `input1[i]` 的可能值**: - 由于取模运算,需考虑两种情况: - 若 `(encrypted_num[i] + i) < 128`,则 `input1[i] = (encrypted_num[i] + i) % 128` - 否则 `input1[i] = (encrypted_num[i] + i) % 128 - 128` --- #### 5. 编写逆向脚本 假设题目给出加密后的数组为 `[0x4F, 0x5A, 0x45, ...]`(需替换为实际值),示例脚本如下: ```python encrypted = [0x4F, 0x5A, 0x45, ...] # 替换为实际加密数据 flag = [] for i in range(len(encrypted)): val = (encrypted[i] + i) % 128 if val < encrypted[i]: val += 128 flag.append(chr(val)) print(''.join(flag)) ``` --- #### 6. 获取Flag 运行脚本后,输出的字符串即为题目要求的Flag。 --- ### 工具使用注意事项 1. 若 `uncompyle6` 报错,可尝试更新版本或使用在线反编译工具[^1]。 2. 逆向时需注意字符的ASCII范围(0-127),确保计算结果合法。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值