常用pyc转py的工具
pycdc Decompyle++
Decompyle++旨在将编译后的Python字节码转换回有效的、人类可读的Python源代码。虽然其他项目取得了不同程度的成功,但Decompyle++的独特之处在于,它寻求支持来自任何版本的Python的字节码。
Decompyle++包含一个字节码反汇编器(pycda)和一个反编译器(pycdc)。
该工具需要手动编译,使用kali编译以后的样本:https://pan.baidu.com/s/1tAzVPMzFmhWko915yguOUg?pwd=ekgi 提取码:ekgi
decompyle3 仅支持3.8及以下版本
原生Python跨版本反编译器和片段反编译器。是改进版本的uncompille6。
pip install decompyle3
常用exe转pyc的工具
pyinstxtractor.py
将exe解压成pyc文件夹,内含各种资源以及pyc文件
https://pan.baidu.com/s/1tAzVPMzFmhWko915yguOUg?pwd=ekgi 提取码:ekgi
使用dis.dis
该工具是python自带的库,可将已经编译为pyc的文件反编译为汇编
例如源程序
def main():
a = 1
b = 2
c = a + b
d = [c]*3
d2 = enumerate(d)
e = [x[0] + x[1] for x in d2]
return e
r = main()
print(len(r))
print(r)
反汇编方式
import dis
s = open('test.py').read()
co = compile(s, 'test.py', 'exec')
dis.dis(co, file=open('./test.txt', 'w'))
反汇编结果
1 0 LOAD_CONST 0 (<code object main at 0x0000018F5DECC5B0, file "test.py", line 1>)
2 LOAD_CONST 1 ('main')
4 MAKE_FUNCTION 0
6 STORE_NAME 0 (main)
11 8 LOAD_NAME 0 (main)
10 CALL_FUNCTION 0
12 STORE_NAME 1 (r)
12 14 LOAD_NAME 2 (print)
16 LOAD_NAME 3 (len)
18 LOAD_NAME 1 (r)
20 CALL_FUNCTION 1
22 CALL_FUNCTION 1
24 POP_TOP
13 26 LOAD_NAME 2 (print)
28 LOAD_NAME 1 (r)
30 CALL_FUNCTION 1
32 POP_TOP
34 LOAD_CONST 2 (None)
36 RETURN_VALUE
Disassembly of <code object main at 0x0000018F5DECC5B0, file "test.py", line 1>:
2 0 LOAD_CONST 1 (1)
2 STORE_FAST 0 (a)
3 4 LOAD_CONST 2 (2)
6 STORE_FAST 1 (b)
4 8 LOAD_FAST 0 (a)
10 LOAD_FAST 1 (b)
12 BINARY_ADD
14 STORE_FAST 2 (c)
5 16 LOAD_FAST 2 (c)
18 BUILD_LIST 1
20 LOAD_CONST 3 (3)
22 BINARY_MULTIPLY
24 STORE_FAST 3 (d)
6 26 LOAD_GLOBAL 0