-
-
[原创]发个小程序,抛砖引玉
-
发表于:
2012-2-1 17:05
5508
-
这个FUZZ小程序设计的一些说明
首先对于API,本人怎么看待其参数。
从参数形式上来看,个人认为其实只有两种
一种是指针类型的,对于这个的变换其实就包括了对其指向内存的变换,和指针本身的变换。
另一种是值类型的,对于这个的变换其实就只有本身在变换。
从参数的聚合度来看,也是两种
一种是简单的类型,比如说一个指针,一个数,(本质上32位机的话就是是一个DWORD)
一种是复杂的类型,比如说结构体(它实际上是由许多简单的类型组合而成的)
基于以上本人对于参数的认识,因此我在写程序时,我把参数实际上是看为简单和复杂类型2种的
。
对应的此设计的是类CSimpleArgument、CComplexArgument。
当然CComplexArgument是由CSubMemberObject组合而成的。
对于FUZZ的变换上来讲,其实就是对变换粒度的理解了,可以是1个字节的变换,2个字节,4个字节,当然我在写代码上图省事这里仅实现了CDwordStratege(32位的变换)。
在变换生成样本上,采单一参数的变换,实现起来比较简单,就是说一个参数在变换,其它参数为正常值。
在写代码之初考虑了支持可以指定各参数使用什么样的变换粒度。比如说对与复杂类型CComlexArgument,
可以指定每个成员用什么粒度变换,每个成员在结构体中的开始位置。这些只要再添加上对应的变换粒度策略加个CByteStratege,CWordStratege实现就行就行了!
ApiFuzzSymbol.xml主要配置要FUZZ的API,具体配置看xml的注释。
ApiFuzzStratege.xml主要是用于变换的样本。
其它代码对于句柄的处理并没有做很好的实现,这代码中也有个内存泄露,暂时没处理。
这代码去年写了两周,界面也没写,可惜也没用上,今年看到,简单重构了下,就放出来,抛砖引玉,希望有大牛给点意见,或者是编码设计的技巧。这代码虽然没用上,不过写这代码也让我对写FUZZ程序有了以上的一些认识,如果认识不对,欢迎指教。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!