我正在python中创建一些模糊测试,对于我来说,能够给出二进制字符串,随机翻转一些位并确保正确引发异常,或者正确显示结果以便进行轻微更改对我来说是非常宝贵的。给出有效的二进制文件有谁知道我怎么会用Python来解决这个问题?我意识到这在低级语言中非常简单,但出于工作原因,我被告知要在Python中执行此操作,但我不知道如何启动它,或者在python中获取二进制表示形式。关于如何在Python中执行这些模糊测试的任何想法?
答案 0 :(得分:2)
您可以尝试的一件事是将字符串转换为bytearray,然后对每个字符执行位操作。您可以通过索引访问每个字符并将其视为整数。
例如:
>>> 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上找到关于bit manipulation的这篇文章。它将Python中的位操作转移到更多细节,以及大量有用的提示和技巧。
答案 1 :(得分:2)
字符串是不可变的,因此要进行更改,首先要做的就是将其转换为列表。同时,您可以将数字转换为整数,以便于操作。
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)