定向模糊测试对程序给定目标位置进行定向测试,常被用于PoC验证、崩溃复现、补丁测试等场景.其利用静态分析获取程序目标位置的相关信息,进而指导测试用例变异.然而,现有的定向模糊测试方法仍存在两个问题影响测试效率.(1)函数间接调用的存在给模糊测试的定向引导带来消极影响,如距离计算出现误差或模糊测试前期缺失引导.(2)现有的距离计算机制无法实质上区分长种子与短种子,而更精确的距离计算需要大量时间.因此,本文提出一种对间接调用进行补充并在路径约束下精细距离计算的模糊测试方法,即ConstrainFuzz.首先,本文通过多层类型匹配对代码中存在的间接调用进行提取,并补全函数调用图,避免因为间接调用缺失距离引导或误报带来距离误导.其次,本文通过静态分析识别与目标位置相关的代码区域,并计算区域内各基本块到达目标基本块的距离进行选择性插桩,修改函数间距离计算机制以能够区分长短种子.本文在Magma上对ConstrainFuzz进行评估,实验结果表明:与现有开源定向模糊测试工具比较ConstrainFuzz能够触发更多的漏洞,与AFLGo、WindRanger、SelectFuzz相比,ConstrainFuzz分别能够多触发6、6、7个漏洞.