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