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