通常程式中至少包括了**段,資料段,而資料段中所儲存的資料是經常會發生變動的,例如我們的全域性變數,靜態變數等都會預設儲存在資料段,而**段則不會發生變化,我們在檢驗時只需要注重.text
記憶體段中的資料完整性即可,針對記憶體的校驗同樣可以抵禦偵錯程式的cc斷點,該斷點原理就是在下端處寫入int3指令,同樣可以檢測得到。
校驗思路如下**:1.首先從記憶體得到pe的**節的rva和節大小
2.根據得到的rva和節大小計算出crc32或是rc4值
3.讀取自身儲存的原始crc32值,與校驗結果進行比較
#include
#include
dword crc32
(byte* ptr, dword size)
crctable[i]
= crctmp1;
}// 計算crc32值
dword crctmp2 =
0xffffffff
;while
(size--
)return
(crctmp2 ^
0xffffffff);
}// 檢查記憶體中crc32特徵值
上方**是保護了整個程式,在實際應用中,為了提高效率,有時我們只需要保護其中乙個片段**就好,這樣可以提高效率,所有我們對上面**稍作修改即可實現針對特定片段的記憶體校驗。
#include
#include
dword crc32
(byte* ptr, dword size)
crctable[i]
= crctmp1;
}// 計算crc32值
dword crctmp2 =
0xffffffff
;while
(size--
)return
(crctmp2 ^
0xffffffff);
}// 檢查記憶體中crc32特徵值
通過使用磁碟校驗結合記憶體校驗兩種方式綜合保護,可以極大的提高軟體的安全性,繞過方式則是找到哪兒跟全域性變數將其修正為正確的值即可,同樣的也可以更暴力一些直接將判斷條件改掉均可。
資料校驗 CRC校驗
工作原理 crc即迴圈冗餘校驗碼 cyclic redundancy check 是資料通訊領域中最常用的一種查錯校驗碼,其特徵是資訊字段和校驗欄位的長度可以任意選定。迴圈冗餘檢查 crc 是一種資料傳輸檢錯功能,對資料進行多項式計算,並將得到的結果附在幀的後面,接收裝置也執行類似的演算法,以保證資...
CRC校驗原理
crc校驗原理 1 迴圈校驗碼 crc碼 是資料通訊領域中最常用的一種差錯校驗碼,其特 徵是資訊字段和校驗欄位的長度可以任意選定。2 生成crc碼的基本原理 任意乙個由二進位制位串組成的 都可以和乙個系 數僅為 0 和 1 取值的多項式一一對應。例如 1010111對應的多項 式為x6 x4 x2 ...
CRC校驗程式設計
程式的宗旨 通過編寫crc的校驗程式,加深對crc原理的理解,同時學會將書本上的原理運用於實際,動手實踐才能學得更快。注 本文關於crc原理那部分內容,來自網路蒐集。1.需求分析 編寫乙個crc校驗的模擬程式,該程式實現的功能如下 輸入 一串二進位制位元串 輸出 crc校驗碼 2.crc校驗原理分析...