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