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