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