2017-12-31 106 views
0

Hier ist der Code ist:python3 - Typeerror: kann nicht Bytes concat auf 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 ist ein ELF ausführbare Datei, wenn ich das Skript ausführen bekomme ich diesen Fehler:

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 

Wie Ich repariere das?

(Hier ist die whole script nur für den Fall)

Antwort

2

Änderung:

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

zu:

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

Python 3 verfügt über separate Bytes und str Typen. Gemäß der Dokumentation, Bytes ist eine unveränderliche Version von bytearray:

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

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

Wenn Sie eine Zahl auf die Bytes/bytearray Konstruktor übergeben, wird es als eine anfängliche Puffergröße interpretieren und nicht der Anfangswert eines einzelnen Bytes. Aus diesem Grund müssen Sie eine Liste übergeben, die numerische Werte enthält, die als Bytes interpretiert werden (sie müssen 0-255 enthalten oder eine Ausnahme auslösen).

Verwandte Themen