以下函数接受二进制 4 字节密钥key
。buf
是与 4 字节密钥进行异或的二进制输入。
def four_byte_xor(buf, key):
#key = struct.pack(b">I", key) # removed for binary processing
buf = bytearray(buf)
for offset in range(0, len(buf), 4):
for i, byte in enumerate(key):
buf[offset + i] = chr(buf[offset + i] ^ ord(byte))
return str(buf)
为了通过for指定二进制数据,我key = struct.pack(b">I", key)
从中删除了。如果长度以 4 个字节结尾,这可以正常工作,否则会引发以下错误(请参阅下面的测试)。four_byte_xor()
str(p.payload.payload.payload)[:4]
key
以下是一些测试,其中包含一个输入 xor'd 与一个导致 00 的键,第一个成功:
'ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCD'
'ABCD'
bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
'ABCD'
第二次测试不成功并以 A 或 1 个额外字节结束:
'ABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDABCDA'
'ABCD'
Traceback (most recent call last):
File "./decode.py", line 36, in <module>
process_packets()
File "./decode.py", line 34, in process_packets
out_buf.write(bin_four_byte_xor(pkt_payload, pkt_offset))
File "./decode.py", line 22, in bin_four_byte_xor
buf[offset + i] = chr(buf[offset + i] ^ ord(byte))
IndexError: bytearray index out of range
可以four_byte_xor()
修改以接受不同的buf
长度吗?