如何使用Appverifier ?
AppVerifier?特別用于檢測(cè)和幫助調(diào)試內(nèi)存損壞、危險(xiǎn)的安全漏洞以及受限的用戶帳戶特權(quán)問(wèn)題。AppVerifier?有助于創(chuàng)建可靠且安全的應(yīng)用程序,方法是監(jiān)視應(yīng)用程序與Windows操作系統(tǒng)的交互,并配置應(yīng)用程序使用的對(duì)象、注冊(cè)表、文件系統(tǒng)和?Win32?API(包括堆、句柄和鎖)。AppVerifier?還包括檢查,以便預(yù)測(cè)應(yīng)用程序在非管理員環(huán)境中的執(zhí)行情況。
1、 Appverifier原理
●?AppVerifier的原理是hook分配和釋放資源的API,在程序調(diào)用這些API時(shí)記錄信息,在程序退出時(shí)報(bào)告出未釋放的資源。
●?只能檢測(cè)Native代碼。
●?程序正常退出才行,強(qiáng)行殺進(jìn)程不能得到正確的報(bào)告。
●?基于原理,只能做Run-time檢測(cè)。盡量使用程序的所有功能已保證檢測(cè)到更多代碼。
2??Appverifier能識(shí)別的問(wèn)題
●?應(yīng)用程序正確地使用?API?的時(shí)刻:?
●?不安全的?TerminateThread?API。?
●?正確使用線程本地存儲(chǔ)(Thread?Local?Storage,TLS)API。?
●?正確使用虛擬空間操作(例如,VirtualAlloc?和?MapViewOfFile)。?
●?應(yīng)用程序是否使用結(jié)構(gòu)化的異常處理隱藏訪問(wèn)沖突。??
●?應(yīng)用程序是否試圖使用無(wú)效的句柄。??
●?堆中是否有內(nèi)存損壞或存在內(nèi)存問(wèn)題。??
●?應(yīng)用程序是否在資源不足的情況下用盡了內(nèi)存。?
●?是否正確使用了臨界區(qū)。??
●?運(yùn)行在管理員環(huán)境中的應(yīng)用程序在具有較低特權(quán)的環(huán)境中是否能良好運(yùn)行。?
●?當(dāng)應(yīng)用程序作為受限用戶運(yùn)行時(shí)是否會(huì)存在潛在的問(wèn)題。
●?在線程的上下文中,是否在將來(lái)的函數(shù)調(diào)用中會(huì)存在未初始化的變量。?
3、??AppVerifier如何使用
在AppVerifier中增加需要驗(yàn)證的應(yīng)用程序,對(duì)于開(kāi)發(fā)人員,直接選擇工程中輸出的Debug版的可執(zhí)行文件,可以添加多個(gè)文件,也可以添加動(dòng)態(tài)庫(kù)DLL。
AppVerifier大致可以驗(yàn)證異常、句柄、堆棧、內(nèi)存、未初始化參數(shù)等多個(gè)方面的隱患,選擇需要進(jìn)行測(cè)試的項(xiàng)目,并保存設(shè)置。
?? ? ?AppVerifier可以命令行也可以UI界面運(yùn)行,這里我們以UI界面運(yùn)行為例:
1)、打開(kāi)appverifier,選擇File--Add??Application添加應(yīng)用程序;
?
添加應(yīng)用程序完成后,需要在右方對(duì)話框選擇你想要驗(yàn)證的問(wèn)題:
1)Basic最基本的驗(yàn)證
●?Exceptinons?防止程序做這樣的操作,比如程序用異常捕獲,以防止錯(cuò)誤繼續(xù)拋出。
●?Handles?檢測(cè)句柄錯(cuò)誤
●?Heaps?檢測(cè)內(nèi)存中的堆棧錯(cuò)誤
●?InputOutput?檢測(cè)讀寫(xiě)文件,讀寫(xiě)網(wǎng)卡數(shù)據(jù)等的錯(cuò)誤
●?Locks?檢測(cè)鎖使用情況,確定應(yīng)用程序是否正確的使用關(guān)鍵段
●?Memory??檢測(cè)應(yīng)用程序虛擬內(nèi)存使用情況
●?ThreadPool?監(jiān)控線程池使用,線程池的線程不應(yīng)該被應(yīng)用程序關(guān)閉
●?Tls?檢測(cè)線程局部存儲(chǔ)api是否被正確使用
2)Compatibility?兼容性問(wèn)題驗(yàn)證
●?Filepaths?檢測(cè)是否正常訪問(wèn)文件目錄
●?Highversionlie?驗(yàn)證應(yīng)用程序是否正確檢測(cè)windows版本
●?InterActiveservices?檢查一個(gè)程序是否運(yùn)行為可桌面交互的服務(wù),或者向可交互的用戶桌面發(fā)送過(guò)數(shù)據(jù)。這樣的應(yīng)用程序可能會(huì)引發(fā)嚴(yán)重的安全問(wèn)題。
●?KernelModeDriverInstall?檢測(cè)驅(qū)動(dòng)程序安裝
3)Low?resources?simulation?低資源情況下,如內(nèi)存將耗盡,程序是否能正常運(yùn)行。
4)Luapriv?檢測(cè)程序在標(biāo)準(zhǔn)用戶權(quán)限下是否能正常運(yùn)行
5)Miscellaneous
●?dangerousAPIs?檢測(cè)應(yīng)用程序是否使用了危險(xiǎn)的API,如TerminateThread
●?Dirtystacks??檢測(cè)應(yīng)用程序是否使用了未初始化的變量
●?TimeRoleOver?模擬使GetTickCount?and?TimeGetTime?APIs?返回的值比實(shí)際的大,即時(shí)間跑的更快的情況下,程序運(yùn)行是否正常。
6)Pringting
●?PrintAPI
●?PrintDriver
在選定了要驗(yàn)證的選項(xiàng)后,你會(huì)發(fā)現(xiàn)提示需要調(diào)試器配合,如何做呢?看下面:
1)首先安裝windbg,運(yùn)行windbg目錄下的gflags.exe,選擇image file標(biāo)簽,針對(duì)測(cè)試進(jìn)程掛上調(diào)試器,如下圖:?
?
OK,此時(shí)運(yùn)行測(cè)試進(jìn)程qqmusic.exe,會(huì)發(fā)現(xiàn)調(diào)試器已運(yùn)行,當(dāng)檢測(cè)到程序出現(xiàn)問(wèn)題,windbg將斷下來(lái),此時(shí)便可根據(jù)堆棧信息找到問(wèn)題。
總結(jié)
以上是生活随笔為你收集整理的如何使用Appverifier ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windbg调试堆破坏
- 下一篇: AppVerifier的功能和原理