she ---- 2019.01安恒月赛

第一次遇到python逆向,拿着题是懵逼的,看了大佬W复现了一遍,理一理思路。

0x00

首先猜测这是python逆向题,给了一个exe文件,我们知道python程序通过pyinstaller第三方库进行打包生成exe文件,又可以使用pyinstxtractor.py脚本进行提取内容。

0x01

将pyinstxtractor.py和exe文件放在同个目录下
python pyinstxtractor.py xx.exe
得到如下一堆文件

image.png

0x02

发现带AnhengRe字样的文件很可疑,使用stings命令查看可打印字符串。Anheng这个文件的应该就是pyc文件。

root@:~# strings /root/桌面/AnhengRe
Tell me your name?z
Tell me your pasw
9f1ff1e8b5b91110
c4e21c11a2412
wrong
AnHeng
Congratulations
flag
pause
flag{
no,)
input
range
print
system
AnhengRe.py

0x03

那么用uncompyle6反编译Anheng.pyc文件。
uncompyle6 -o 1.py Anheng.pyc
发现报错
ValueError: bad marshal data (unknown type code)
可能是修改了文件头,看了大佬补齐的文件头我很是诧异,但是题目给了一个pyc文件,我猜想文件头应该是一样的,所以将Anheng.pyc的12字节文件头复制过去。
果然是一样滴!
33 0d 0d 0a 00 00 00 00 00 00 00 00
再使用uncompyle6成功

0x04

得到python源文件,把 if 语句注释后,运行得到flag.

# uncompyle6 version 3.2.5
# Python bytecode 3.6 (3379)
# Decompiled from: Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
# Embedded file name: AnhengRe.py
import os
n1 = input('Tell me your name?')
n2 = input('Tell me your pasw')
n11 = chr(ord(n1[0]) + 12)
s = ''
st3 = '51e'
st2 = '9f1ff1e8b5b91110'
st1 = 'c4e21c11a2412'
st0 = 'wrong'
#if n11 + 'AnHeng' == n2:
for i in range(0, 4):
    s += st1[3 - i]

print('Congratulations')
ts = st2[0] + st3 + st2[1] + s
print('flag{' + st3[:1] + st1 + st2 + st3[-2:] + '}')
os.system('pause')
#else:
 #   print('no,' + st0)
运行结果.png

flag{5c4e21c11a24129f1ff1e8b5b911101e}

你可能感兴趣的:(she ---- 2019.01安恒月赛)