CTF练习解析

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

2019-05-11  本文已影响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反编译,加油!

上一篇 下一篇

猜你喜欢

热点阅读