美文网首页CTF练习解析
实验吧逆向工程-有一个程序加密得到如下密文

实验吧逆向工程-有一个程序加密得到如下密文

作者: 追求科技的足球 | 来源:发表于2019-05-11 21:09 被阅读1次

    这个题目好文艺啊~
    最近处于各种杂事中,希望一切都有好结果~
    题目链接:http://ctf5.shiyanbar.com/DUTCTF/reverse300.pyc
    看上去是个python,有点意思,开始解题吧~
    1、第一次反编译python文件,不知道用啥,先拖进Exeinfo PE中看下吧,emmmm好像不支持哈,尴尬了。


    2、经过搜索,pyc文件要使用uncompyle2。
    github下载地址:https://github.com/wibiti/uncompyle2
    下载后使用管理员身份打开cmd(windows下),然后输入:
    python setup.py install
    

    同样管理员身份打开cmd,进入到uncompyle2的安装路径下使用(可以设置环境变量直接使用),先复制reverse300进去。

    python uncompyle2 -o result.py reverse300.pyc
    

    3、打开result.py看源码:



    4、进行分析:
    (1)main函数部分:

    if __name__ == '__main__':
        if len(sys.argv) < 3:
            exit(1)
        ex = 20
        for i in range(1, len(sys.argv), 2):
            a = sys.argv[i]
            b = sys.argv[i + 1]
            if a == '-t':
                ex = int(b)
            elif a == '-e':
                encoded = authcode(b, 'ENCODE', expiry=ex)
                print encoded
            elif a == '-d':
                decoded = authcode(b, 'DECODE', expiry=ex)
                print decoded
    

    其中:sys.argv 是获取运行python文件的时候命令行参数,且以list形式存储参数,就是在cmd执行的时候的参数,对于sys.argv 。
    若执行:

    python result.py
    

    则返回:[' result.py'],len为1
    若后面还有参数,则加到列表中。
    (2)看函数逻辑肯定是进行解密啦,也就是输入:

    python result.py -d 0be6770IigHXZpz9hQYR1fpl15R0z9MUalmYEPhJeEN/sRklL6wQw5yQ7SAyT6tKGJNY0AxnyzS/L7zWQII=
    

    (3)但是如果这样的话会没有结果输出,看一下decode是怎么写的:

        if operation == 'DECODE':
            if not result[0:10].isdigit() or int(result[0:10]) == 0 or int(result[0:10]) - int(time()) > 0:
                if result[10:26] == md5(result[26:].encode('utf-8') + keyb).hexdigest()[0:16]:
                    return result[26:]
                else:
                    return ''
            else:
                return ''
    

    result是经过一系列操作得来的,但是这个判断条件和time进行判断也太玄学了吧。
    直接删掉,变成:

        if operation == 'DECODE':
            if result[10:26] == md5(result[26:].encode('utf-8') + keyb).hexdigest()[0:16]:
                return result[26:]
    

    然后执行就可以了:


    小结:今天学到了python反编译,加油!

    相关文章

      网友评论

        本文标题:实验吧逆向工程-有一个程序加密得到如下密文

        本文链接:https://www.haomeiwen.com/subject/vbdfaqtx.html