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