DWORD L2FileCheck(char *file)
Ev R6^n/
{
Ev R6^n/
DWORD Check=0xFFFFFFFF;
Ev R6^n/
HANDLE hFile;
Ev R6^n/
DWORD dwFileSize;
Ev R6^n/
DWORD dwNumberOfBytesReadWritten;
Ev R6^n/
HANDLE hMemory;
Ev R6^n/
LPVOID pMemory;
Ev R6^n/
char filename[MAX_PATH];
Ev R6^n/
BYTE *temp;
Ev R6^n/
BYTE temp1,temp2;
Ev R6^n/
int Max=0,Min=0;
Ev R6^n/
temp =(unsigned char *)malloc(0x1000);
Ev R6^n/
hFile=CreateFile(file, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
Ev R6^n/
if(hFile != INVALID_HANDLE_value)
Ev R6^n/
{
Ev R6^n/
dwFileSize=GetFileSize(hFile, NULL);
Ev R6^n/
hMemory=GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwFileSize);
Ev R6^n/
pMemory=GlobalLock(hMemory);
Ev R6^n/
Max = (dwFileSize-0x14)/0x1000;
Ev R6^n/
Min = (dwFileSize-0x14)%0x1000;
Ev R6^n/
for(int j=0;j<Max;j++)
Ev R6^n/
{
Ev R6^n/
ReadFile(hFile,pMemory,0x1000,&dwNumberOfBytesReadWritten,NULL);
Ev R6^n/
memcpy(temp,pMemory,0x1000);
Ev R6^n/
for(int k=0;k<0x1000;k++)
Ev R6^n/
{
Ev R6^n/
temp1=*(BYTE *)(temp+k);
Ev R6^n/
temp2=(Check&0x000000FF) ^ temp1;
Ev R6^n/
Check=(Check >> 8) ^ FileCheck[temp2];
Ev R6^n/
}
Ev R6^n/
}
Ev R6^n/
ReadFile(hFile,pMemory,Min,&dwNumberOfBytesReadWritten,NULL);
Ev R6^n/
memcpy(temp,pMemory,0x1000);
Ev R6^n/
for(j=0;j<Min;j++)
Ev R6^n/
{
Ev R6^n/
BYTE temp1,temp2;
Ev R6^n/
temp1=*(BYTE *)(temp+j);
Ev R6^n/
temp2=(Check&0x000000FF) ^ temp1;
Ev R6^n/
Check=(Check >> 8) ^ FileCheck[temp2];
Ev R6^n/
}
Ev R6^n/
_asm {
Ev R6^n/
push ecx
Ev R6^n/
mov ecx,Check
Ev R6^n/
not ecx
Ev R6^n/
mov Check,ecx
Ev R6^n/
pop ecx
Ev R6^n/
}
Ev R6^n/
CloseHandle(hFile);
Ev R6^n/
GlobalUnlock(pMemory);
Ev R6^n/
GlobalFree(hMemory);
Ev R6^n/
free(temp);
Ev R6^n/
return Check;
Ev R6^n/
}
Ev R6^n/
else
Ev R6^n/
{
Ev R6^n/
return 0;
Ev R6^n/
}
Ev R6^n/
}
Ev R6^n/