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