pyc逆向之opcode简单置换

 最近做了一道pyc的逆向题,主要难点在于Python环境的opcode被置换,就简单记录一下相关知识。

opcode是什么

opcode其实是指Python源码的操作码,Python源代码*.py编译后可以得到二进制文件*.pyc,*.pyc文件中就含有opcode序列。对于不同版本的Python,其opcode是不完全相同的,这也就是为什么某一版本的Python虚拟机不能执行另一个版本的源码。

查看当前版本opcode的方式有很多种,最简单的是直接导入opcode库查看:

import opcode
for key in opcode.opmap.keys():
    print (key, opcode.opmap[key])

或者在/Python/Include/opcode.h文件中查看。

一个简单源码的opcode查看如下:

import dis
def foo():
    x = 20
    y = 10
    z = x - y
    return z
dis.dis(foo)

输出如下:

  3           0 LOAD_CONST               1 (20)
              2 STORE_FAST               0 (x)

  4           4 LOAD_CONST               2 (10)
              6 STORE_FAST               1 (y)

  5           8 LOAD_FAST                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值