Hgame第二周(Pro的python教室(二))

本文介绍了一种PYC文件的解密方法,通过反编译得到原始的Python代码,并详细解析了加密逻辑。读者将了解到如何使用奇偶位加密和特定字符对比的技术,以及如何编写对应的解密脚本来破解这一挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

拿到题目是PYC文件,在网上进行反编译的得到py代码

# uncompyle6 version 3.2.4
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)]
# Embedded file name: secend.py
# Compiled at: 2019-02-01 21:18:58
print "Welcome to Processor's Python Classroom Part 2!\n"
print "Now let's start the origin of Python!\n"
print 'Plz Input Your Flag:\n'
enc = raw_input()
len = len(enc)
enc1 = []
enc2 = ''
aaa = 'ioOavquaDb}x2ha4[~ifqZaujQ#'
for i in range(len):
    if i % 2 == 0:
        enc1.append(chr(ord(enc[i]) + 1))
    else:
        enc1.append(chr(ord(enc[i]) + 2))

s1 = []
for x in range(3):
    for i in range(len):
        if (i + x) % 3 == 0:
            s1.append(enc1[i])

enc2 = enc2.join(s1)
if enc2 in aaa:
    print "You 're Right!"
else:
    print "You're Wrong!"
    exit(0)

 思路已经很清晰,

enc为input,for循环进行奇偶不同的加密 ,奇数位+2 偶数位+1 ,之后再进行如果整除3提取出来加到末尾(例如0123456,加密过后就是0362514)   最后与aaa里的字符进行对比.

写出exp

# -*- coding: UTF-8 -*-
aaa ="ioOavquaDb}x2ha4[~ifqZaujQ#"
aa = []
for i in aaa:
        aa.append(i)
a = []
for i in range(3):
        for x in range(27):
                if(i+x)%3==0:
                        a.append(x)
for i in range(len(aa)):
        aa[a[i]] = aaa[i]
flag = ""
for y in aa:
        flag += y
flags = ""
for i in range(27):
    if i % 2 == 0:
        flags+=(chr(ord(flag[i]) - 1))
    else:
            flags+=(chr(ord(flag[i]) - 2))
 
print (flags)

#out :hgame{Now_Y0u_got_th3_PYC!}

### HGAME 2024 Misc 类别题目信息 #### 解密并转换Flag 在HGAME 2024 WEEK1 的misc类别中,有一个挑战涉及解密获得的明文,并将其全部转换为大写字母。最终的结果被包裹在`hgame{}`内作为标志(flag)[^2]。 ```python def convert_to_uppercase_flag(encrypted_text): decrypted_text = encrypted_text.upper() flag_format = f"hgame{{{decrypted_text}}}" return flag_format example_encrypted_text = "disappearintheseaofbutterfly" print(convert_to_uppercase_flag(example_encrypted_text)) ``` 此代码片段展示了如何将给定字符串转换成全大写的flag格式。 #### 字符编码变换 另一个例子来自HGAME 2024 WEEK2,在这个杂项(miscellaneous)挑战里,参与者需要通过特定偏移量来调整输入字符串中的每一个字符Unicode值的位置。当尝试不同的位移数值时,可以找到符合条件的有效输出——即以"hgame{"开头的信息[^3]。 ```python def unicode_shift(input_str, shift): shifted_string = ''.join( chr((ord(c) + shift) % 0x110000) for c in input_str) return shifted_string input_unicode_encoded = "籱籰籪籶籮粄簹籴籨粂籸籾籨籼簹籵籿籮籨籪籵簺籨籽籱簼籨籼籮籬类簼籽粆" for offset in range(-65535, 65536): result = unicode_shift(input_unicode_encoded, offset) if result.startswith("hgame"): print(f"Offset found: {offset}") print(result) break ``` 这段Python脚本实现了遍历可能的Unicode位移范围直到发现正确的标志为止的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值