溢位初步(1)

2021-05-08 01:34:24 字數 1148 閱讀 3899

溢位初步(1)(2006-11-28 07:43:41)

發表: 2006-11-24 22:28:00

8

緩衝區溢位

審查**是否存在緩衝區溢位時,將審查工作主要放在通過 p/invoke 或者 com 互操作層呼叫非託管**的**上。託管**本身受到緩衝區溢位攻擊的可能性很小,因為無論是否訪問陣列,系統都將自動檢查陣列邊界。只要您呼叫了 win32 dll 或者 com 物件,都應該嚴格檢查 api 呼叫。

以下過程有助於定位緩衝區溢位缺陷:

1.定位對非託管**的呼叫。

掃瞄原始檔中的「system.runtime.interopservices」,這是呼叫非託管**時使用的命名空間名稱。

2.檢查傳給非託管 api 的字串引數。

這些引數是緩衝區溢位的主要**。檢查您的**,檢查所有輸入字串的長度,驗證它是否沒有超過 api 定義的限制。如果非託管 api 接受字元指標,您可能無法知道最大允許字串長度,除非有非託管源**的訪問許可權。常見缺陷如以下**片段所示:

void somefunction( char *pszinput )

注 如果您使用 strncpy,緩衝區溢位仍然可能發生,因為它不檢查目標字串中是否有足夠空間,只限制複製字元的數量。

如果您因為並不擁有非託管**而無法檢查它,那麼就通過故意傳入長的輸入字串和無效引數嚴格測試 api。

3.檢查檔案路徑長度。

如果非託管 api 接受檔名和路徑,那麼應該檢查您的包裝方法,檢查檔名和路徑是否沒有超過 260 個字元。這是通過 win32 max_path 常數定義的。還應該注意目錄名和登錄檔項可能的最大字元數是 248。

4.檢查輸出字串。

檢查是否**使用了 stringbuilder 接收從非託管 api 傳回的字串。檢查 stringbuilder 的容量是否足夠大,可容納非託管 api 傳回的最長字串,因為非託管**傳回的字串可能是任意長度的。

5.檢查陣列邊界。

如果您使用陣列將輸入傳遞到非託管 api,應該檢查託管包裝,驗證是否沒有超過陣列容量。

6.檢查您的非託管**是否用 /gs 開關進行編譯。

如果您擁有非託管**,使用 /gs 開關啟用堆疊探測,檢測是否存在某些型別的緩衝區溢位。

1 初識溢位

一直沒系統的學下這個,以為這玩意早特麼過時的東西,後來看到還是灰常有必要的,所以。溢位是什麼玩意就不介紹了,看個簡單例子 strcpy原型宣告 extern char strcpy char dest,char src 功能 把從src位址開始且含有null結束符的字串賦值到以dest開始的位址空間...

記憶體溢位 1

1.當專案中包含大量,或者過大 方法1 等比例縮小 複製內容到剪貼簿 bitmapfactory.options options new bitmapfactory.options options.insamplesize 4 方法2 對採用軟引用,及時地進行recyle 操作 複製內容到剪貼簿 s...

搜尋初步1

2.廣度優先搜尋 剪枝經典例題 搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。現階段一般有列舉演算法 深度優先搜尋 廣度優先搜尋 a a a 演算法 回溯演算法 蒙特卡洛樹搜尋 雜湊函式等演算法。深度優先搜尋,又叫dfs dfsdf s...