Constraint-guided Directed Greybox Fuzzing复现
首先从约束生成入手,研究如何从git的patch log中生成约束。
先从论文中给出的算法入手,输入是改变位置的集合。
首先对每个位置遍历,并根据规则区分它们
- 新的条件、包含异常抛出
- 条件互斥
- 变量被替换
- 其他
接下来对CnTars进行判断,TSs为target site集合,DCs为 data condition集合。
如果C1Tars不空,如果C1Tars的post都相同,那么TSs设置为C1Tars.pre的位置,DCs设置为post的条件。
如果C2Tars不空,且C2Tars.pre都相同,C2Tars.post也相同,则TSs设置为C2Tars.pre的位置,C为C2Tars的条件,DCs为C的pre条件和post条件的互斥。
如果C3Tars不空,并且C3Tars的变量改变处都相同,则TSs设置为C3Tars.pre的位置,V为C3Tars的改编后的变量,DCs设置为V.pre与V.post的不相等。
剩下就是TSs为C4Tars,DCs为空,即nT模板。
最后将TSs通过哨兵函数连接起来。
同时把target site的形式规定为 文件名:行号:列号
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 X Mεl0n | 随手记!