我正在尝试与Sulley建立Fuzzer。我使用的协议有一个字节的control字段。在该字段中设置的位确定可以跟随的字段。现在,我想知道如何使用Sulley中的dep参数实现此行为。唯一可用的dep_compare运算符是"==, !=, >, >=, <, <=",但我认为我无法使用这些运算符检查是否在其他字段中设置了位。那我该怎么办呢?

s_byte(0b1000000, "control_field")

# The following block shall be present if bit 7 is set in control_field
# I'd like to use something like
# > control_field & 0b1000000 != 0
# but I don't know how

if s_block_start("something_optional", dep="control_field", dep_compare="?"):
    s_short(0x1234, "optional")
s_block_end()

最佳答案

如果只想检查最高位,则可以使用>=,因为0b10000000只是一个数字。

if s_block_start("something_optional", dep="control_field", dep_compare=">=", dep_value=0b10000000):


但是,如果要检查低位,则需要实现自己的运算符。在sulley/blocks.py中,查找Block类及其render方法。 if块很大,应该不会太难修改。例如。

        if self.dep_compare == "&" and self.dep_value & self.request.names[self.dep].value != self.dep_value:
            self.rendered = ""
            return

关于python - Sulley Fuzzing框架中的位标志依赖项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33542502/

10-11 23:16