pyinstaller / pyc Python逆向 一键反编译 含例子

点我移步GITHUB项目链接
软件在项目的Release目录中
一个简单的python反编译封装,一键快速反编译。喜欢的话给个Star💖吧😘

如果有问题可以下方留言哦

1.反编译
./pyre xxxx.exe    #pyinstall程序
or
./pyre xxxx.pyc

Notice: 生成汇编码需要将项目的编译环境 与 pyc 的环境一致 (可选) 【无法生成反编译也会尝试用cdc进行反编译尝试】

tip:汇编码用于 当 cdc 无法反编译时,审计,去除花指令等查看使用

pyinstaller程序反编译存放于 {{FileName}}_extracted 中的 {{FileName}}_py 中

pyc当前目录下放于当前

#直接调用python文件反编译
pyre.py 
调用runner()函数
runner({{FileName}})

tip. 尽量将程序放在该项目下进行反编译哦

2.指令查找
 ./pyre --search JUMP_FORWARD
 ./pyre --search {{Command}}

参考案例

来自于第七届浙江省安全技能赛初赛RE题

ezRE Writeup
./pyre ezRe.pyc  #尝试直接反编译

发现报错,点击终止即可。

审计汇编码

发现 JUMP_FORWARD 花指令

搜索得到该指令字节码为 6E , 进行NOP填充

再次反编译

./pyre ezRe.pyc

反编译成功

调整代码,获取密文,下面是POC

# Source Generated with Decompyle++
# File: ezRe.pyc (Python 3.9)

import base64
key = '7e021a7dd49e4bd0837e22129682551b'
key = (lambda s: [ ord(i) ^ 102 for i in s ])(key)
s = list(range(256))
j = 0
for i in range(256):
    j = (j + s[i] + key[i % len(key)]) % 256
    s[i],s[j] = s[j],s[i]
i = j = 0
data = []
for _ in range(50):
    i = (i + 1) % 256
    j = (j + s[i]) % 256
    s[i],s[j] = s[j],s[i]
    data.append(s[(s[i] + s[j]) % 256])
result = ''
text = "w53Cj3HDgzTCsSM5wrg6FMKcw58Qw7RZSFLCljRxwrxbwrVdw4AEwqMjw7/DkMKTw4/Cv8Onw4NGw7jDmSdcwq4GGg=="
text = base64.b64decode(text).decode()
for c, k in zip(text, data):
    result += chr(ord(c) ^ 51 ^ k)
print(result)

成功获取flag

作者:VictorGanro

物联沃分享整理
物联沃-IOTWORD物联网 » pyinstaller / pyc Python逆向 一键反编译 含例子

发表回复