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