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