Python的pyc字节码反编译反汇编相关知识

常用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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值