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