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