Sulley Fuzzing 框架中的位标志依赖项
Bit Flag dependencies in Sulley Fuzzing Framework
我正在尝试用 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
class 及其 render
方法。有一大块 if 块不应该太难修改。例如
if self.dep_compare == "&" and self.dep_value & self.request.names[self.dep].value != self.dep_value:
self.rendered = ""
return
我正在尝试用 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
class 及其 render
方法。有一大块 if 块不应该太难修改。例如
if self.dep_compare == "&" and self.dep_value & self.request.names[self.dep].value != self.dep_value:
self.rendered = ""
return