0
악성 코드를 분석하기 위해 노력하고 있습니다.이 악성 코드는 다른 프로세스에 새 파일을 작성하려고합니다. 그들은 새로운 파일의 데이터를 MZ로 시작하는 메모리에 저장합니다. 메모리에있는 PE 파일의 진입 점 주소를 어떻게 알 수 있습니까?메모리에서 AddressOfEntryPoint를 읽는 방법
악성 코드를 분석하기 위해 노력하고 있습니다.이 악성 코드는 다른 프로세스에 새 파일을 작성하려고합니다. 그들은 새로운 파일의 데이터를 MZ로 시작하는 메모리에 저장합니다. 메모리에있는 PE 파일의 진입 점 주소를 어떻게 알 수 있습니까?메모리에서 AddressOfEntryPoint를 읽는 방법
엔트리 포인트의 주소를 찾고 다양한 헤더 매개 변수를 읽는 방법은 아래를 참조하십시오.
LPCSTR fileName; //exe file to parse
HANDLE hFile;
HANDLE hFileMapping;
LPVOID lpFileBase;
PIMAGE_DOS_HEADER dosHeader;
PIMAGE_NT_HEADERS peHeader;
hFile = CreateFileA(fileName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("\n CreateFile failed in read mode \n");
return 1;
}
hFileMapping = CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);
if(hFileMapping==0)
{
printf("\n CreateFileMapping failed \n");
CloseHandle(hFile);
return 1;
}
lpFileBase = MapViewOfFile(hFileMapping,FILE_MAP_READ,0,0,0);
if(lpFileBase==0)
{
printf("\n MapViewOfFile failed \n");
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 1;
}
dosHeader = (PIMAGE_DOS_HEADER) lpFileBase; //pointer to dos headers
if(dosHeader->e_magic==IMAGE_DOS_SIGNATURE)
{
//if it is executable file print different fileds of structure
//dosHeader->e_lfanew : RVA for PE Header
printf("\n DOS Signature (MZ) Matched");
//pointer to PE/NT header
peHeader = (PIMAGE_NT_HEADERS) ((u_char*)dosHeader+dosHeader->e_lfanew);
if(peHeader->Signature==IMAGE_NT_SIGNATURE)
{
printf("\n PE Signature (PE) Matched \n");
//address of entry point
//peHeader->OptionalHeader.AddressOfEntryPoint
}
UnmapViewOfFile(lpFileBase);
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 0;
}
else
{
printf("\n DOS Signature (MZ) Not Matched \n");
UnmapViewOfFile(lpFileBase);
CloseHandle(hFileMapping);
CloseHandle(hFile);
return 1;
}
자세한 내용을 제공 할 수있는 경우 스택 교환 [reverse engineering site] (http://reverseengineering.stackexchange.com/)에서이 질문을하십시오. 여러 전문 맬웨어 분석가가 맬웨어 분석 질문에 대답합니다. 더 많은 멀웨어 관련 질문을 원합니다. –