各位好啊!
    我是wwwljc,最近需要使用SPIKE,所以在网上找了个来学习。关于SPIKE的使用说明很少,我还是通过看源码才有一点体会,这里就共享出来,错误之处请大侠们批评指正啊!

1:编译
           进入src目录运行:
  make clean
  automake && autoheader && autoconf && ./configure
  make
  . ./ld.sh

2:基本使用方法
    failwest的《0day安全:软件漏洞分析技术》一书中描述了SPIKE的基本使用方法,我这里就不再介绍了。

3:文件编译
    我认为,我们可以认为SPIKE提供了一组Fuzzing所需的函数库,而实际上我们需要调用这些库函数编写相应的程序实现Fuzzing。实际操作中,对于那些开源的协议,可以直接阅读相关文档进行分析,而对于一些介绍很少的协议,推荐使用wireshark等软件解码后再编写程序。
    针对我自己的编写的程序,编译命令如下:
gcc -o generic_send_tcp generic_send_tcp.c -I ../include/ dlrpc.o dlargs.o spike.o listener.o hdebug.o tcpstuff.o spike_dcerpc.o base64.o udpstuff.o spike_oncrpc.o -ldl -L. -ldlrpc
. ./ld.sh
    各位可以根据自己的需要导入相关的文件进行编译。

4:源码介绍
    在阅读SPIKE源码的时候,发现代码应该不算很难看懂,只不过有些地方很晕,主要原因是一些变量很难理解,这样就导致对程序的了解不深刻。这里我就简单介绍下struct spike结构中的部分变量,通过了解这些变量的含义,就可以轻松看源码了。

4.1 int didlastvariable;
测试是否为最后一个变量,也就是fuzzvariable是否为最大值

4.2 int didlastfuzzstring;          
是否为最后一个fuzzing string的下标

4.3 int didlastfuzzint;          
是否为最后一个fuzzing int的下标

4.4 int fuzzstring;
当前变量fuzz string/int的下标

4.5 int fuzzvariable;
第fuzzvariable个变量或第fuzzvariable次循环

4.6 int currentvariable;
如果fuzzvariable==currentvariable,则将这个变量进行fuzzing,其他变量保持不变

4.7 int firstvariable;
currentvariable==0,则firstvariable=1; currentvariable!=0,则firstvariable=0

5:常用函数
s_binary("00 00");
插入二进制数据
s_string("Referer\r\n");
插入一个字符串常量
s_int_variable(0x00,3);
插入一个int变量
s_string_variable("test\r\n");
插入一个字符串变量
s_string_variables('&',"username=bob&password=feet");
插入多个字符串变量

总结:以上是我这段时间研究SPIKE的成果,有错误之处,还请指正啊。