1基于块的协议方法
掌握了该方法可以做到以下几点:
利用协议中的所有已知因素;
并消除未知因素的影响;
智能缩减程序的潜在输入空间。
2更多意义上是一个框架
它提供了许多API
运行语言类C
它更多的强调我们可以充分利用对待测试协议的了解或者类似协议的了解
3它的本质
该框架的作者是基于这样一个思路
我们最好简单地将协议看作是一种字符长串,而不是嵌套(大盒中又有小盒),这其实是将协议扁平化。
该框架的精髓在于将协议扁平化,并可自动计算其长度。
4创建SPIKE框架
提供基于块的协议建模的数据结构,被大家称作“spike”。
这是一个简单的结构列表,包含块大小信息和字节队列。
例如:
1 s_block_size_binary_bigendian_word("somepacketdata");
2 s_block_start("somepacketdata");
3 s_binary("01020304");
4 s_block_end("somepacketdata");
上述脚本,执行以下操作
1将4个空字节推入SPIKE的队列,并分配一个名为“somepacketdata”的块监听器,将监听器的内
状态设为一个big endian字。
我觉得其意思就是分配存储块,并设标示,同时指示按big endian存储一个字。
2标示块的开始,搜索标示为“somepacketdata”的块监听器,同时更新其内部“start”指针。
3将4个字节(0x01020304)推入队列。
4标示块的结束,同时监听器的大小确定。
5用SPIKE表示数据类型,简单统一
对多种数据类型的支持,操作方式几乎一致
例如:s_binary()
6自动FUZZING
协议以线形状态表示,其中的某些部分是变量。
变量可以以一种很简单的方式添加进来
这部分的意思好像是对于任何类型的变量都有对应的函数(API),我们简单添加就可以了,而不用关心细节。
7结果可测量