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