【re】[广东省大学生攻防大赛 2022]pyre --爆破字符

附件下载下来,解压,发现是一个python打包的exe

这里用pyinstxtractor进行反编译,后面会得到一个文件夹,里面有一个pyc文件

这里可以用进行网站进行对pyc进行反编译:在线Python pyc文件编译与反编译 (lddgo.net)

反编译的python结果如下:

# Visit https://www.lddgo.net/string/pyc-compile-decompile for more information
# Version : Python 3.7


def check():
    a = input('plz input your flag:')
    c = [
        144,
        163,
        158,
        177,
        121,
        39,
        58,
        58,
        91,
        111,
        25,
        158,
        72,
        53,
        152,
        78,
        171,
        12,
        53,
        105,
        45,
        12,
        12,
        53,
        12,
        171,
        111,
        91,
        53,
        152,
        105,
        45,
        152,
        144,
        39,
        171,
        45,
        91,
        78,
        45,
        158,
        8]
    if len(a) != 42:
        print('wrong length')
        return 0
    b = None
    for i in range(len(a)):
        if ord(a[i]) * 33 % b != c[i]:
            print('wrong')
            return None
    
    print('win')

check()

逻辑还是比较简单的,但就是这个b的值不知道,后面考虑到前四个字符固定是"flag",所以可以先把b给爆破出来,爆破b的脚本如下:

str=[144,163,158,177]

flag="flag"

for j in range(len(flag)):

    for b in range(1,1000):

        if (ord(flag[j])*33)%b==str[j]:

            print(b)

运行结果如下:

可以得到b=179,接着跟着代码逻辑继续爆破:

flag=""

b=179

for i in range(len(c)):

    for num in range(32,127):

        if num*33%b==c[i]:

            flag+=chr(num)

print(flag)  

运行结果:

flag:flag{2889e7a3-0d6b-4cbb-b6e9-04c0f26c9dca} 

ps:如果一开始用uncompyle6进行反编译pyc文件的话,b的值是可以反编译出来的,也就不用去爆破b的值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值