pyc_obscure icon indicating copy to clipboard operation
pyc_obscure copied to clipboard

请问如何修改支持python3.6

Open michaelxu1107 opened this issue 4 years ago • 3 comments

请问如何修改支持python3.6

michaelxu1107 avatar Sep 30 '20 07:09 michaelxu1107

https://github.com/marryjianjian/pyc_obscure/blob/2a94e2659923ef8559920a77ed5abf536d6b5372/pyc_obscure.py#L119

对 Python 3.6 和 Python 3.7 来说,types.CodeType 这个结构包含的数据是不一样的,简单的应该是把 ypes.CodeType 适配一下 Python 3.6 版本的就可以了

marryjianjian avatar Oct 14 '20 14:10 marryjianjian

针对python 3.6 types.CodeType该如何适配呢 目前的做法是修改write_pyc函数,把 s += pack32(0) + pack32(self.timestamp) + pack32(self.source_size) 修改为 s += pack32(self.timestamp) + pack32(self.source_size)可以支持python3.6 但是当处理大文件时,执行到_gen_obs37_opcode_from_offset函数return bytes((opcode.opmap['JUMP_ABSOLUTE'], offset + 4)) + os.urandom(2)语句时会报错,原因为bytes只支持(0,255),这个该如何解决呢?

michaelxu1107 avatar Oct 15 '20 01:10 michaelxu1107

我理解你的问题其实是,在文件过大的时候,指令较多,offset 大于 255 之后,目前的混淆实现不能正确的跳转了。 大概有两种处理方式:

  1. 简单粗暴,只针对 offset 小于 255 的指令进行混淆。
  2. Python 3.6 的所有指令默认的参数长度都是 1 byte,但是可以通过 EXTENDED_ARG 指令来扩展参数的长度,最多好像是可以支持到 4 bytes 的(好像是4 bytes,记不清了)。(这个目前我还没有实现,但是理论上是可行的)

marryjianjian avatar Oct 15 '20 03:10 marryjianjian