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)

 

posted @ 2021-01-21 12:18  mio_yy  阅读(113)  评论(0)    收藏  举报