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