في الـ++borland C يكفي الكود
if(memcmp(DosHeader,Digits,128)==0)
لكن في الدلفي
أحاول أكتب كود أفتح فيه ملف وأقرأ بايتات محدده بعدين أقارنها ببايتات موجوده مسبقا وبحسب النتائج راح أقرر للبرنامج أوامر
اللى يهمني فقط كيف أقارن البايتات المحدده بالبايتات المقروءه
const
Digits: array[0..27] of byte = ($4D, $5A, $90, $00, $03,
$00, $00, $00, $04, $00 , $00,$00, $FF, $FF, $00,
$00, $B8, $00, $00, $00, $00, $00, $00, $00, $40,
$00, $00, $00);
function scan ():boolean;
var
lpData: Pointer;
hFile: THandle;
dwReadBytes, dwFileSize, dwEP: DWORD;
DosHeader: TImageDosHeader;
NtHeaders: TImageNtHeaders;
begin
hFile := CreateFile(PChar('virus.exe'), GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
if hFile = 0 then
begin
CloseHandle(hFile);
Exit;
end;
// Read DOS Header
SetFilePointer(hFile, 0, nil, FILE_BEGIN);
ReadFile(hFile, DosHeader, sizeof(DosHeader), dwReadBytes, nil);
if dwReadBytes = sizeof(DosHeader) then
begin
// هنا محتاج لكود يحدد حجم الـDosHeader كـبايتات محدده
// بعدين يقارنها بالبايتات الموجوده بـDigits
SetFilePointer(hFile, DosHeader._lfanew, nil, FILE_BEGIN);
ReadFile(hFile, NtHeaders, sizeof(NtHeaders), dwReadBytes, nil);
if dwReadBytes = sizeof(NtHeaders) then
begin
// هنا محتاج لكود يحدد حجم الـNtHeaders كـبايتات محدده
// بعدين يقارنها بالبايتات الموجوده بـDigits
CloseHandle(hFile);
Result := True;
end else
CloseHandle(hFile);
end else
CloseHandle(hFile);
end;