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