編碼殺毒我想學習目的編寫的殺毒軟件。它將以簽名爲基礎。我已經編寫了一個掃描程序,它循環遍歷所有系統文件併爲每個文件創建內存映射。我現在要做的是從每個惡意文件(樣本文件)中獲取二進制簽名(十六進制),以便我可以將其與我創建的數據庫進行比較。 現在有什麼問題? 我注意到,像卡巴斯基這樣的商業AntiViruses可以從二進制文件中的任何位置選擇一個文件簽名。 現在假設我發現一個新的惡意文件,我選擇了偏移0x8766其值爲0x4F作爲該惡意文件的簽名。 現在,如果我要檢查它具有samll大小發生偏移0x8766不小文件存在的文件。這將是一個問題? 這是示例代碼代表我要去的方式:使用簽名爲基礎的技術
hFile = ::CreateFile(State.Path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
0, OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN, 0);//open the file
if(hFile !=INVALID_HANDLE_VALUE){
hMap= ::CreateFileMapping(hFile, 0, PAGE_READONLY | SEC_COMMIT, 0, 0, 0);//create Mem mapping for the file in virtual memory
if(hMap!=NULL){
base = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);//load the mapped file into the RAM
//start to compare some bytes (values) from mspaint.exe file in Win7
if(*((BYTE *)base + 0x1C3DF0)== 0x05)
i++;
if(*((BYTE *)base + 0x25250C)== 0x21)
i++;
if(*((BYTE *)base + 0x25272A)== 0x97)
i++;
if(i==3){
// the file is malicious
}
另一個問題:我是否需要對整個簽名數據庫映射在RAM之前,我開始比較又如何呢? 和你建議的簽名需要包含什麼?文件大小...等等?任何其他建議