高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘

當前位置: 首頁 >綜合 > 正文

【天天速看料】WinAFL小白踩坑指南,你學會了嗎?

2023-05-04 09:25:32 來源:FreeBuf.COM

本文主要內容包括:WinAFL介紹與安裝、以ABC看圖程序為例構建Fuzz最小案例庫、執行Fuzz跑出Crash,以及最終利用Bugid對Crash分類

WinAFL介紹與安裝

WinAFL,是Ivan Fratric基于lcumtuf的AFL創建的大型Fuzzing程序,由于AFL無法在windows下直接使用,Winafl彌補了這一空白,使用DynamoRIO來插樁&測量代碼覆蓋率,并使用Windows API進行內存和進程創建。

WinAFL 項目地址:https://github.com/ivanfratric/winafl


(資料圖)

請注意:Windows 10 1809及更高版本的最新Windows版本要使用DynamoRIO 8.0.0以上版本

此時如果直接進行操作可能會出現以下報錯

需要re-compiled ,這個過程為:

(1) 下載安裝DynamoRio源碼,或者直接下載DynamoRio Windows版的二進制包(https://github.com/DynamoRIO/dynamorio/wiki/Downloads)

(2) 打開Visual Studio命令提示工具,如果要安裝成64位版本的則打開Visual Studio x64命令提示工具(一般在【開始—所有程序—Visual Stdio—Visual Studio Tools】中可找到)。因為在對64位程序進行fuzz時,需要有64-bit的winafl.dll,所以安裝時要選擇好版本

(3)在命令提示工具中進入WinAFL的目錄下

(4) 在Visual Studio命令提示工具中輸入如下命令進行WinAFL編譯安裝(需將-DDynamoRIO_DIR參數設置為你的DynamoRIO cmake文件所在位置)

32-bit build:

mkdir build32cd build32cmake -G"Visual Studio 16 2019" -A Win32 .. -DDynamoRIO_DIR=..\path\to\DynamoRIO\cmake cmake --build . --config Release

64-bit build:

mkdir build64cd build64cmake -G"Visual Studio 16 2019" -A x64 .. -DDynamoRIO_DIR=..\path\to\DynamoRIO\cmakecmake --build . --config Release

這里需要注意一下-G選擇平臺時VS16與之前版本默認目標平臺架構是有些區別的:

cmake -G "Visual Studio 16 2019" -A Win32 ;x32cmake -G "Visual Studio 16 2019" -A x64 ;x64 默認目標平臺名稱(架構)為Win64cmake -G "Visual Studio 15 2017" ;x32 默認目標平臺名稱(架構)為Win32cmake -G "Visual Studio 15 2017 Win64" ;x64

winafl 命令行參數,主要分為三段,(afl執行參數–dynamoRIO執行參數–程序執行參數)

afl執行參數主要包括

-i -o指定輸入和輸出文件夾

-D指定DynamoRIO根目錄

-t每一次樣本執行的超時時限

-ffuzz 程序讀取的位置

-M \ -S分布式模式

-x可選的fuzz字典

dynamRIO執行參數主要包括

-coverage_module計算覆蓋率的模塊

-fuzz_iterations在重新啟動目標進程之前,目標函數要運行的最大迭代次數。

-target_module包含目標函數的模塊(一個可執行文件鏡像)需要與該選項一起指定-target_method或-target_offset

-target_method目標函數,需要export或者帶符號

-target_offset目標偏移,相對于target_module的偏移,在method無法導出的時候使用

-nargs程序執行所需要的參數個數

-debug調試模式。不要嘗試連接到服務器。輸出包含已加載模塊,打開的文件和覆蓋率信息的日志文件

-logdir指定將日志文件寫入哪個目錄(僅與-debug一起使用)

程序執行參數就是要fuzz的程序的命令行構建Fuzz最小案例庫

現在我們從網上搜集一堆ABC看圖支持的格式,包括tif、jpg、png、ico等,github上有許多Fuzz的案例庫,這樣的案例庫中包含大量的文件,運行起來效率會很差。根據學長博客,AFL是存在語料庫蒸餾(Corpus Distillation)工具的,afl-cmin和afl-tmin。

移除執行相同代碼的輸入文件——AFL-CMINafl-cmin的核心思想是:嘗試找到與語料庫全集具有相同覆蓋范圍的最小子集。舉個例子:假設有多個文件,都覆蓋了相同的代碼,那么就丟掉多余的文件。減小單個輸入文件的大小——AFL-TMIN整體的大小得到了改善,接下來還要對每個文件進行更細化的處理。afl-tmin盡量縮減文件體積。

在winafl中,他們存在于 winafl-cmin.py,對輸入的樣本文件進行最小化處理,以用來提高 WinAFL 的執行效率。

篩選命令

python winafl-cmin.py --working-dir C:\Users\test\Desktop\winafl-master\build32\bin\Release -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 100000 -i C:\Users\test\Desktop\jpg -o C:\Users\test\Desktop\jpg\out -coverage_module FreeImage.dll -target_module Project1.exe -target_method main -nargs 2 -- C:\Users\test\source\repos\Project1\Release\Project1.exe @@

此時可能出現[!] Dry-run failed, 2 executions resulted differently:Tuples matching? False的報錯

看來測試用例中存在一些壞的用例,導致不能正確精簡,在語料庫所在文件夾可以利用以下bash腳本簡單判斷一下

λ for file in *; do printf "==== FILE: $file =====\n";/c/Users/test/source/repos/Project1/Release/Project1.exe $file ;echo $?; done

正常運行的文件返回值都是0,有問題的文件返回結果都不太正常

把這些返回結果不太正常的刪除之后,再運行一次語料庫蒸餾,發現運行成功了

可以看到原本429張被精簡到了148張,確實少了不少,根據參考教程中的提示,Winafl在處理大于4Kb的圖片時,速度會變得很慢,因此再刪除一波,最終語料庫就剩下這么點了。

開始運行

經過動態和靜態的簡單分析后,發現ABC看圖主要調用Freeimage.dll進行圖片解析的,決定對 FreeImage 庫的載入函數進行模糊測試,針對 FreeImage_LoadU 函數編寫測試程序

#define _CRT_SECURE_NO_WARNINGS#include #include #include using namespace std;extern "C" __declspec(dllexport) int main(int argc, char** argv);void test(HINSTANCE hinstLib, wchar_t* PathName);wchar_t* charToWChar(const char* text);typedef DWORD(__stdcall* FreeImage_GetFileTypeU)(const wchar_t* lpszPathName, int flag);typedef DWORD(__stdcall* FreeImage_Initialise)(BOOL load_local_plugins_only);typedef DWORD(__stdcall* FreeImage_DeInitialise)();typedef DWORD(__stdcall* FreeImage_LoadU)(DWORD format, const wchar_t* lpszPathName, int flag);typedef DWORD(__stdcall* FreeImage_UnLoad)(DWORD dib);FreeImage_Initialise Initialise;FreeImage_GetFileTypeU LoadFileType;FreeImage_LoadU LoadU; DWORD load;FreeImage_UnLoad UnLoad;FreeImage_DeInitialise DeInitialise;int main(int argc, char** argv){if (argc < 2) {printf("Usage: %s < file>\n", argv[0]);return 0;}wchar_t* PathName = charToWChar(argv[1]);HINSTANCE hinstLib; BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; DWORD Error = NULL;hinstLib = LoadLibrary(TEXT("C:\\FreeImage.dll"));if (hinstLib != NULL){fRunTimeLinkSuccess = TRUE;Initialise = (FreeImage_Initialise)GetProcAddress(hinstLib, (LPCSTR)163); // 初始化 FreeImage 庫LoadFileType = (FreeImage_GetFileTypeU)GetProcAddress(hinstLib, (LPCSTR)126);// 獲取位圖文件類型LoadU = (FreeImage_LoadU)GetProcAddress(hinstLib, (LPCSTR)181);// 加載位圖UnLoad = (FreeImage_UnLoad)GetProcAddress(hinstLib, (LPCSTR)242);// 卸載位圖DeInitialise = (FreeImage_DeInitialise)GetProcAddress(hinstLib, (LPCSTR)83);//卸載 FreeImage 庫test(hinstLib, PathName);fFreeResult = FreeLibrary(hinstLib);}if (!fRunTimeLinkSuccess)cout << "加載函數失敗, Error: " << Error << endl;return 0;}void test(HINSTANCE hinstLib, wchar_t* PathName){DWORD FileType = (LoadFileType)(PathName, 0);load = (LoadU)(FileType, PathName, 0);return;}wchar_t* charToWChar(const char* text){size_t size = strlen(text) + 1;wchar_t* wa = new wchar_t[size];mbstowcs(wa, text, size);return wa;}

在對該程序進行編譯之后,可以先簡單測試一下WinAFL 是否可以正常使用。-debug 表示設置為調試模式。

\winafl\bin32> C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32\drrun.exe -c winafl.dll -debug -coverage_module FreeImage.dll -target_module Project1.exe -target_method main -fuzz_iterations 10 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe C:\Users\test\Desktop\jpg\1x1-low.jpg

如下圖所示,日志文件當中模塊加載正常并沒有錯誤顯示

下面就要開始模糊測試了,按照教程進行的,但是它的目標函數是main,我們來看看結果如何。

afl-fuzz.exe -i C:\Users\test\Desktop\jpg\out -o C:\Users\test\Desktop\jpg\re -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 9000 -- -coverage_module FreeImage.dll -target_module Project1.exe -target_method main -fuzz_iterations 5000 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe @@

如圖所示,可以跑是可以跑,但是這個速度實在太慢了,執行main函數浪費了太多時間,實際上我們的load函數只測test函數就可以,我們將-target_method改為test嘗試一下

afl-fuzz.exe -i C:\Users\test\Desktop\jpg\out -o C:\Users\test\Desktop\jpg\re -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 9000 -- -coverage_module FreeImage.dll -target_module Project1.exe -target_method test -fuzz_iterations 5000 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe @@

然后就蹦框了,看起來是沒有找到我們寫的test函數,忘了在vs里把test函數也導出

這里導出后再編譯一遍,再嘗試一下,成功了,這速度明顯提升了好幾倍啊

為了讓fuzz效率更高一點,充分利用cpu的多核,進行多核系統的并行測試

afl-fuzz.exe -i C:\Users\test\Desktop\jpg\out -o C:\Users\test\Desktop\jpg\re -M master -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 9000 -- -coverage_module FreeImage.dll -target_module Project1.exe -target_method test -fuzz_iterations 5000 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe @@afl-fuzz.exe -i C:\Users\test\Desktop\jpg\out -o C:\Users\test\Desktop\jpg\re -S slaver01 -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 9000 -- -coverage_module FreeImage.dll -target_module Project1.exe -target_method test -fuzz_iterations 5000 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe @@afl-fuzz.exe -i C:\Users\test\Desktop\jpg\out -o C:\Users\test\Desktop\jpg\re -S slaver02 -D C:\Users\test\Desktop\DynamoRIO-Windows-8.0.0-1\bin32 -t 9000 -- -coverage_module FreeImage.dll -target_module Project1.exe -target_method test -fuzz_iterations 5000 -nargs 2 -- C:\Users\test\source\repos\Project1\Debug\Project1.exe @@

因為我的配置比較垃圾只有四核,所以就開這么多了,我們先試一下

扔到ABC看圖里,發現真的崩潰了

利用Bugid對Crash分類

這樣一堆crash,里面肯定有不少重復的,原因也有各不相同,如何對他們進行快速分類并找到問題點呢?

在這里我使用了BugID,它可以反饋崩潰和死機的可利用性的詳細報告,BugID安裝所需要的環境如下:

最新的Python 2.7.14Windows的最新調試工具最新的BugId版本

如果使用默認設置安裝Windows的Python和調試工具,則BugId應該能夠運行而無需調整任何設置。您可以在本地文件系統上任意位置解壓縮BugId

但是理論上BugID需要一個一個進行文件分析,而Crash這么多,只是就可以寫一個Python腳本來幫助我們

import sysimport ossys.path.append(r"C:\Users\test\Desktop\BugId-master")testcases = []for root, dirs, files in os.walk(r"C:\Users\test\Desktop\jpg\re\slaver01\crashes", topdown=False): for name in files: testcase = os.path.abspath(os.path.join(root, name)) testcases.append(testcase)for testcase in testcases: print ("[*] Gonna run: ", testcase) os.system(r"PageHeap.cmd "Project1.exe" ON") os.system(r"python C:\Users\test\Desktop\BugId-master\BugId.py C:\Users\test\source\repos\Project1\Debug\Project1.exe --isa= x86 -- %s" % testcase)

請注意在最后的程序后面加上--isa= x86哦,不加默認作為64位調試會報錯

運行腳本之后,我們就看到源源不斷的bug信息出來了

最后可以寫到一個文檔里保存下來,看起來字符好像有點問題,不過問題不大

這只是簡要信息,BugID在運行時已經自動生成了較為詳細的分析報告,打開BugID目錄就可以看到

隨便打開一個看看,很詳細

參考文獻

winafl使用 http://www.simp1e.site/2020/04/18/winafl/

模糊測試工具WinAFL使用指南 https://www.freebuf.com/articles/system/216437.html

初識 Fuzzing 工具 WinAFL https://paper.seebug.org/323/

Fuzz 工具 WinAFL 的使用感受 https://bbs.pediy.com/thread-255162.htm

Fuzzing the MSXML6 library with WinAFL https://symeonp.github.io/2017/09/17/fuzzing-winafl.html

標簽:

返回頂部
高清视频在线观看免费播放器-伊人日本-色九月综合-18禁止看的免费污网站-免费观看性行为视频的网站-天天碰天天操-久久精品国产欧美日韩99热-中文字幕在线视频不卡-国产偷人妻精品一区二区在线-国内精品久-伊人影院在线看-密臀av一区-久久综合五月丁香久久激情-福利一区福利二区-gg国产精品国内免费观看-国产精品 高清 尿 小便 嘘嘘
  • <cite id="ecweg"><pre id="ecweg"></pre></cite>
    <rt id="ecweg"><acronym id="ecweg"></acronym></rt>
  • <rt id="ecweg"></rt>
    免费av手机在线观看| 日本男人操女人| 欧美久久在线观看| 久操网在线观看| 99蜜桃臀久久久欧美精品网站| 国产情侣av自拍| 亚洲欧美日韩三级| 一二三四中文字幕| 一二三四视频社区在线| 性chinese极品按摩| 欧美性视频在线播放| 水蜜桃色314在线观看| 深夜黄色小视频| 超碰97免费观看| 欧美国产激情视频| 婷婷激情小说网| 国产日产欧美视频| 国产农村妇女精品久久| 丝袜老师办公室里做好紧好爽| 国产成人美女视频| 成人网站免费观看入口| 最新免费av网址| 国产成人在线免费看| 91aaa精品| 久久精品免费网站| 波多野结衣av一区二区全免费观看| 最新中文字幕2018| 男女超爽视频免费播放| av亚洲天堂网| 男人日女人逼逼| 黄频视频在线观看| 日本激情视频在线播放| 免费不卡av在线| 国产大尺度在线观看| 免费一区二区三区在线观看| 免费看毛片的网址| 国产一二三四区在线观看| 在线观看岛国av| 色哟哟精品视频| 国产免费一区二区三区视频| 性一交一乱一伧国产女士spa| 久久久福利影院| 在线黄色免费观看| 97公开免费视频| 女人另类性混交zo| 国产成人无码精品久久久性色| 福利视频免费在线观看| 自拍偷拍视频在线| 韩国黄色一级大片| 天天色天天干天天色| 人人爽人人爽av| 一级黄色在线播放| 色播五月激情五月| 精品日韩久久久| www.超碰97.com| 永久免费黄色片| 色爽爽爽爽爽爽爽爽| 久久久国产精华液999999| 91极品视频在线观看| 男人的天堂日韩| 日本黄大片一区二区三区| 精品久久久99| 精品国产乱码久久久久久1区二区| 国产精品嫩草影视| 国产精品8888| 国产原创中文在线观看| 黄色片久久久久| 日韩无套无码精品| 538任你躁在线精品免费| 天堂av2020| 日韩精品一区二区在线视频| 可以看毛片的网址| 999香蕉视频| 涩多多在线观看| www.在线观看av| 黄色一级一级片| 亚洲欧美一区二区三区不卡| 老司机激情视频| 日本熟妇人妻xxxxx| 不用播放器的免费av| 韩日视频在线观看| 久久久久国产精品熟女影院| 日韩av自拍偷拍| 亚洲一区二区三区av无码| 宅男噜噜噜66国产免费观看| 一级全黄肉体裸体全过程| 日本中文字幕网址| 色婷婷成人在线| 国内少妇毛片视频| 国产九九热视频| www.亚洲成人网| 午夜宅男在线视频| 无码熟妇人妻av在线电影| 中文字幕永久视频| avav在线播放| 亚洲va综合va国产va中文| 男人添女荫道口图片| 伊人色在线观看| 国产成人精品视频免费看| 色中文字幕在线观看| 男人亚洲天堂网| 日韩精品在线视频免费观看| 五月天丁香花婷婷| 精品久久久久久无码国产| 欧美交换配乱吟粗大25p| 亚洲精品www.| 成年人视频观看| 欧美另类videos| 一级黄色大片儿| 国产精品区在线| 热久久精品国产| 你懂的av在线| 18禁裸男晨勃露j毛免费观看| 精品亚洲视频在线| 久久久久久蜜桃一区二区| 日韩精品一区中文字幕| 伊人成色综合网| 日韩精品视频在线观看视频| 一级片免费在线观看视频| 奇米影音第四色| 十八禁视频网站在线观看| 91好吊色国产欧美日韩在线| 日本男女交配视频| 青少年xxxxx性开放hg| 一本一道久久a久久综合蜜桃| 亚洲成人av免费看| 国产理论在线播放| 熟妇人妻va精品中文字幕| 国产免费成人在线| 人人妻人人添人人爽欧美一区| 妞干网视频在线观看| 国产黄色激情视频| 欧美乱大交xxxxx潮喷l头像| 日本手机在线视频| 日本少妇高潮喷水视频| 国产极品粉嫩福利姬萌白酱 | 操人视频免费看| 国产视频手机在线播放| 国产一二三四在线视频| 久久久久久久久久久久91| 九九九在线观看视频| 国产三级三级三级看三级| 天天综合网久久| 超碰成人在线免费观看| 日韩亚洲欧美一区二区| 黄页网站大全在线观看| 欧美一级片中文字幕| 羞羞的视频在线| 免费看日b视频| 人人干视频在线| 日韩 欧美 高清| 久久久久xxxx| 免费观看亚洲视频| av免费中文字幕| 男生操女生视频在线观看| 黄色一级大片免费| 亚洲熟妇av日韩熟妇在线| 欧美日韩在线免费播放| 一级做a爱视频| 成人免费视频91| 中文字幕 91| 欧美国产日韩激情| 亚洲少妇第一页| 六月婷婷激情网| 国产欧美高清在线| gogogo免费高清日本写真| 男人添女人下部高潮视频在观看 | 欧美大黑帍在线播放| 欧美精品无码一区二区三区| aaa免费在线观看| 免费在线观看毛片网站| 日韩视频在线视频| 日韩中文在线字幕| 免费在线观看亚洲视频| 亚洲激情在线看| 青春草国产视频| 成年人网站av| 毛片av免费在线观看| 国产福利片一区二区| av片中文字幕| 美女扒开大腿让男人桶| 第一区免费在线观看| 99精品视频在线看| 欧美无砖专区免费| 在线无限看免费粉色视频| 免费日韩视频在线观看| a级免费在线观看| 色偷偷中文字幕| 亚洲高清免费在线观看| 国产成人无码精品久久久性色| 日本三日本三级少妇三级66| 少妇网站在线观看| 一本久道综合色婷婷五月| 人妻少妇精品久久| 国产免费裸体视频| 欧美 国产 精品| 一级日本黄色片| 欧美又黄又嫩大片a级| 免费看污污网站| 国产精品69页|