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