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