ISCC-RE-Garden

这是一个二进制的文件

知识积累:

pyc文件:是由Python文件经过编译后所生成的文件,它是一种字节码 byte code,因此我们直接查看就是乱码的,也对源码起到一定的保护作用,但是这种字节码byte code是可以反编译的,后面会介绍!

我们都知道计算机是不认识你在代码里写的那一行行字母的,计算机只认二进制,也只执行二进制文件,我们写的代码是需要编译器编译成二进制的。对于Python来说你写的Python代码在执行python xxx.py时会由Python解析器翻译成PyCodeObject对象,俗称字节码(byte code),然后交由Python虚拟机来执行字节码(PS:字节码才是可执行的)。

在这个过程中这些字节码都是在内存中的,众所周知Python的运行性能不如编译性语言(比如C语言,JAVA …),所以Python在程序执行结束后会把字节码写入到硬盘中,保存为.pyc文件,目的是下一次再执行python xxx.py程序时,Python会先在目录下找xxx.pyc文件来执行,因为.pyc文件里保存的是字节码,所以就节省了Python解析器把xxx.py翻译成字节码的时间,所以就提高了性能。

总结就是.pyc文件是一个可执行的字节码文件,目的是节省Python解析器翻译时间,提高运行效率。

可以用运行Python的方法来运行pyc文件。

使用uncomplye6工具把pyc反编译为py文件

下载工具:

pip install uncompyle6 -i Simple Index

将pyc文件反编译成py文件

输入命令:uncomplye6  garden.pyc > garden.py(要在文件所在路径下)

# uncompyle6 version 3.9.1

# Python bytecode version base 2.7 (62211)

# Decompiled from: Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)]

# Embedded file name: garden.py

# Compiled at: 2021-02-28 12:29:29

import platform, sys, marshal, types

def check(s):

    f = '2(88\x006\x1a\x10\x10\x1aIKIJ+\x1a\x10\x10\x1a\x06'

    if len(s) != len(f):

        return False

    checksum = 0

    for a, b in zip(f, s):

        checksum += ord(b) ^ ord(a) ^ 123

    return checksum == 0

if sys.version_info.major != 2 or sys.version_info.minor != 7:

    sys.exit('试试 Python 2.7.')

if len(sys.argv) != 2:

    sys.exit('usage: bronze.pyc <flag>')

flag = sys.argv[1]

if len(flag) >= 32:

    print '太长了.'

    sys.exit(1)

alphabet = set('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}!@#$%+')

for ch in flag:

    if ch not in alphabet:

        print '不对.'

        sys.exit(1)

if check(flag):

    print '就是这个!'

    sys.exit(0)

else:

    print '搞错了.'

    sys.exit(1)

# okay decompiling garden.pyc

关键点是check函数

构造exp:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值