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