huaweictf-re题目
pypy
首先ida打开分析,通过字符串查找发现有许多Py开头的字符串,猜测是pyinstaller。

用readelf -S 文件名 查看验证

然后执行命令

archive_viewer.py文件可以在https://github.com/pyinstaller/pyinstaller得到

得到相应的main.pyc和struct.pyc文件。
再通过命令
head -c 8 struct.pyc > main-out.pyc cat mian.pyc >> main-out.pyc
就得到可以被uncompyle6反编译的.pyc文件
uncompyle6 main-out.pyc > main-out.py
得到相应的py文件

虽然变量都是乱码,但是也可以还原出相应的算法。并且rc4的加密是可逆的。我们只需要在明文异或成密文那里把明文内容替换成密文,就可以得到明文。
import binascii DEFAULT_KEY = u'Y\xf3\x02\xc3%\x9a\x820\x0b\xbb%\x7f~;\xd2\xdc' def rc4(k, key=DEFAULT_KEY, skip=1024): flag="" L = 0 M = bytearray([N for N in range(256)]) L = 0 for O in range(256): L = (L + M[O] + ord(key[(O % len(key))])) % 256 P = M[O] Q = M[L] M[O] = M[L] M[L] = P L = 0 R = 0 S = [] if skip > 0: for O in range(skip): L = (L + 1) % 256 R = (R + M[L]) % 256 M[L], M[R] = M[R], M[L] for i in range(len(k)): L = (L + 1) % 256 R = (R + M[L]) % 256 M[L], M[R] = M[R], M[L] U = M[((M[L] + M[R]) % 256)] flag+=chr(ord(k[i])^U) print(flag) msg = binascii.a2b_hex('275b39c381c28b701ac3972338456022c2ba06c3b04f5501471c47c38ac380c29b72c3b5c38a7ec2a5c2a0') ci_flag_2=str(msg, 'utf-8') list1="1234567890-abcdefghijklmnopqrstuvwxyz{}ABCDEFGHIJKLMNOPQRSTUVWXYZ_" #flag="flag{snake_bao_is_really_lucky}" rc4(ci_flag_2)

浙公网安备 33010602011771号