第一步反汇编,将pyc文件转换为py文件 (pyc就是py变成exe的中间文件,可以理解为高级语言要先变成汇编语言在被翻译为机器的01语言 那么怎么反汇编呢? 这里要说的就是uncompyle工具,功能就是将pyc文件反编译成py文件,具体操作方法是将cmd命令行的指向指向pyc文件所在目录之后,输入如下指令
uncompyle6 -o *.py *.pyc
要注意的是要在环境变量中配置的路径是python2的python3会反编译不成功
第二步代码审计,可以观察到它对真正的flag做了如下处理
1.按位异或62 2.加6 3.base64编码 4.得到了deal flag = ‘XlhlX0sMEWNiDxQQDgwTXl5eZRFgFWMOFBATXhMMYw8PD2UMZUk=’
所以我们编写脚本就可以反过来得到处理之前的flag 1.base64解码 2.减6 3.按位异或62 4.得到了真正的flag!!!!!!!!!!!!!!!
input your flag:
flag{85cb704683fffa5d1c6043f38c777a8a}
OHHHHHH~ correct!
flag{85cb704683fffa5d1c6043f38c777a8a}
# uncompyle6 version 3.7.4
# Python bytecode 2.7 (62211)
# Decompiled from: Python 2.7.16 (v2.7.16:413a49145e, Mar 4 2019, 01:37:19) [MSC v.1500 64 bit (AMD64)]
# Embedded file name: 2.py
# Compiled at: 2020-10-14 11:00:14
import base64
def encode(yourflag):
s = ''
for i in yourflag:
x = ord(i) ^ 62
x = x + 6
s += chr(x)
return base64.b64encode(s)
tureflag = 'XlhlX0sMEWNiDxQQDgwTXl5eZRFgFWMOFBATXhMMYw8PD2UMZUk='
flag = ''
print 'input your flag:'
yourflag = raw_input()
if encode(yourflag) == tureflag:
print 'OHHHHHH~ correct!'
else:
print 'emmm.. wrong'
import base64
def encode2(str):
s = ''
for i in str:
x = ord(i) - 6
x = x ^ 62
s += chr(x)
return s
Base64_Encode_Flag = 'XlhlX0sMEWNiDxQQDgwTXl5eZRFgFWMOFBATXhMMYw8PD2UMZUk='
Base64_Decode_Flag = base64.b64decode(Base64_Encode_Flag)
Flag=encode2(Base64_Decode_Flag)
print Flag
|