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