3

我在 python 中创建了一些模糊测试,对于我来说,给定一个二进制字符串,随机翻转一些位并确保正确引发异常,或者正确显示结果以对给定的有效二进制文件进行轻微更改,这将是非常宝贵的. 有谁知道我如何在 Python 中解决这个问题?我意识到这在低级语言中是非常微不足道的,但出于工作原因,我被告知要在 Python 中执行此操作,但我不确定如何开始,或者在 python 中获取某些东西的二进制表示。关于如何在 Python 中执行这些模糊测试的任何想法?

4

2 回答 2

3

字符串是不可变的,因此要进行更改,首先要做的可能是将其转换为列表。同时,您可以将数字转换为整数,以便于操作。

hexstring = "1234567890deadbeef"
values = [int(digit, 16) for digit in hexstring]

然后您可以翻转任何十六进制数字中的单个位。

digitindex = 2
bitindex = 3
values[digitindex] ^= 1 << bitindex

如果需要,您可以转换回十六进制。

result = "".join("0123456789abcdef"[val] for val in values)
于 2013-06-28T16:53:40.890 回答
2

您可以尝试的一件事是将字符串转换为字节数组,然后对每个字符执行位操作。您可以按索引访问每个字符并将其视为整数。

例如:

>>> a = "hello world"
>>> b = bytearray(a)
>>> b[0] = b[0] ^ 5    # bitwise XOR
>>> print b            # or do str(b) to convert it back to a string
mello world

您还可以在 Python wiki 上发现这篇关于位操作的文章很有用。它详细介绍了 Python 中的位操作,以及大量有用的提示和技巧。

于 2013-06-28T15:47:15.283 回答