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