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