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