python3 - TypeError: can't concat bytes to str

python3 - TypeError: can't concat bytes to str

代码如下:

def flip_bytes(binary_f):
    i = random.randint(0, len(binary_f))
    c = chr(random.randint(0, 0xFF))
    return binary_f[:i] + c + binary_f[i+1:]

def copy_binary():
    with open("license", "rb") as orig_f, open("license_fuzz", "wb") as fuzz_f:
        fuzz_f.write(flip_bytes(orig_f.read()))

license 是一个 ELF 可执行文件,当我 运行 脚本时出现此错误:

Traceback (most recent call last):
  File "parse.py", line 30, in <module>
    copy_binary()
  File "parse.py", line 11, in copy_binary
    fuzz_f.write(flip_bytes(orig_f.read()))
  File "parse.py", line 7, in flip_bytes
    return binary_f[:i] + c + binary_f[i+1:]
TypeError: can't concat bytes to str

我该如何解决这个问题?

(这里是whole script以防万一)

变化:

c = chr(random.randint(0, 0xFF))

至:

c = bytes([random.randint(0, 0xFF)])

Python 3 有单独的 bytes 和 str 类型。根据文档,bytes 是 bytearray 的不可变版本:

https://docs.python.org/3.1/library/functions.html#bytes

https://docs.python.org/3.1/library/functions.html#bytearray

如果您将数字传递给 bytes/bytearray 构造函数,它会将其解释为初始缓冲区大小,而不是单个字节的初始值。这就是为什么您必须向它传递一个包含解释为字节的数值的列表(它们必须包含 0-255,否则会抛出异常)。