American Fuzzy Lop是一個結合了極其簡單但是有堅如磐石的工具指引的遺傳算法的暴力fuzzer。它使用了一個邊緣覆蓋的修改的表單來輕易地pick up不易察覺的,局部尺度變化到程序控制流中。
簡單來說,整個算法可以歸納為如下:
- 加載用戶提供的初始測試用例到一個隊列中,
- 從隊列中取得下一個輸入文件,
- 嘗試裁剪測試用例的大小并降到最小,同時并不改變程序的衡量行為,
- 使用一個均衡的,并且對傳統fuzzing策略研究透徹的變化來重復轉變文件,
- 如果任意一個生成的轉變導致了一個由一起記錄的新的狀態轉換,增加轉變的輸出作為一個新的入口在隊列中,
- 重復步驟2
被發現的測試用例同樣需要周期地剔除來排除一部分測試用例,這些測試用例已經被新的,更高的覆蓋率發現已經被淘汰;同時經歷一些其它工具驅動的努力最小化步驟。
推薦文章