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