2012-12-14 2 views
3

현재이 에뮬레이터의 핵심으로 libemu를 사용하여 다른 것보다 재미있는 코드 에뮬레이터를 개발 중입니다.에뮬레이션을 위해 메모리에 PE로드하기

내가 실제로 얻고 자하는 유일한 목표는 전체 PE를 메모리에로드하여 찢어 버리는 것입니다. 체육은

  • 가 메모리 세그먼트 설정에 필요한 데이터를 추출 (x86 플랫폼)이 유효한 경우 헤더 ◦Check 읽기

    • :

      그래서 나는 다음과 같은 항목이 조금 TODO 목록을 구축했습니다

    • 가져온 모든 함수를 사용자 정의 API에 후크합니다.
    • 제대로
    • 작동 스택 세그먼트 (특히 설정하고 EBP) 나는 하루 내에서 수행이의 대부분을 얻는 것을 처리 한 EFLAGS

    을 설정

  • 를 구축하기 위해 EIP를 설정합니다. 스택 세그먼트를 올바르게 설정하는 데 문제가있는 것 같지만. 현재 나는 다음과 같은 코드 세그먼트 내 레지스터를 설정합니다

    /* Set Registers */ 
    entry_point = pe->nt_header->AddressOfEntryPoint; 
    emu_cpu_eip_set(cpu, entry_point); 
    emu_cpu_reg32_set(cpu, eax, 0x00 
    emu_cpu_reg32_set(cpu, ecx, 0x00); 
    emu_cpu_reg32_set(cpu, edx, entry_point); 
    emu_cpu_reg32_set(cpu, ebx, 0x00);  
    emu_cpu_reg32_set(cpu, ebp, (0x0095f000 - 0x1000/2));   
    emu_cpu_reg32_set(cpu, esp, emu_cpu_reg32_get(cpu, ebp)); 
    emu_cpu_reg32_set(cpu, esi, 0x00); 
    
    emu_cpu_reg32_set(cpu, edi, 0x00);  
    

    emu_cpu_eflags_set (CPU, 0x0000246);

    문제가 ebp 레지스터 내에 있다고 생각합니다. 값은 이상하게 보이지만, PyEmu는 그것들을 사용하는 것 같습니다. 내가 스택의 사용 내에서 문제가 있다고 생각하는 이유는 시작하기에 하드 코딩 된 것이고 두 번째로 충돌하는 코드는 Assembler에서 00692D67 및 dword ptr [ebp-8], 0으로 변환되는 83 65 f8 00입니다.

    스택은 PE 파일 용 NTLoader를 사용하여 설정한다고 생각합니다. 그러나 나는 이것이나 그것에 관한 문서를 찾을 수없는 것 같습니다.

    계속하는 방법에 대한 모든 안내는 정말 감사하겠습니다.

    • 로빈

    PS. 답변을 얻을 수있는 기회를 늘리기 위해 여러 게시판 등에 게시했습니다. PE 파일로드에 대한 많은 Windows 설명서를 읽었지만 헤더의 SP 세그먼트를 가리키고 있습니다. 하지만 그게 ESP가 아니기 때문에 스택의 기본 (EBP)이 아닌지 의심 스럽습니다.

    한 크로스 게시물이 OpenRCE에서 찾을 수 있습니다 : http://www.openrce.org/forums/posts/2171 다른 상호 게시물 시스 인 터널에서 찾을 수 있습니다 http://forum.sysinternals.com/topic28898_post138041.html#138041

  • +2

    @Downvoter 관심을 가져 주셔서 왜 이것을 downvoted 했습니까? 이렇게하면 OP는 실제로 필요한 경우 문제를 개선 할 수 있습니다. ;-) – siebz0r

    +0

    @Stolas 혹시이 작품에 대한 블로그 항목을 작성 했습니까? 또는 공유 할 좋은 참고가 있습니까? 아주 비슷한 솔루션을 찾고 있는데, 가상의 비 Windows 환경에서 win32-dll을로드하고 일부 함수를 호출하십시오. – Alex

    +0

    @Alex 아니요. – Stolas

    답변

    1

    문제는 스택 오프셋 다른 메모리에 있었던 것 같았다.