2017-03-02 13 views
1

모두PE 주사 이미지 재배치

나는 이것을 며칠 동안 알아 내려고 노력해 왔으며 도움이 필요하다.

일부 맞춤형 멀웨어를 작성한 연구 프로젝트의 경우 멀웨어 자체가 여기에있는 문제가 아니며 코드를 공유하지 않지만 실제 주입기에 대한 도움이 필요합니다.

수동 재배치를 수행해야하는 방법과시기를 완전히 이해하려고 할 때 몇 가지 문제가 있습니다. 나는 현재로 이전하지 않고 virtualallocex에서 임의의 주소를 사용하고 있으며, 모든 것이 제대로 작동합니다. 맬웨어 exe가 실행되고 원격 프로세스 PE가 맬웨어 PE 기본 주소와 겹쳐서로드되는 메모리 위치가 아니면 아무런 문제가 없습니다.

NtUnmapViewOfSection은 바이러스 백신이 탐지하여 기본적으로 무작위로 작동하지 않는 허위 기능이므로 내 계획은 VirtualAllocEx에서 제공 한 임의의 주소를 사용하고 필요할 경우 재배치하는 것입니다. 이해하지 못함, 아래 질문 참조).

이 내 현재 작업 방법 (대상 프로세스가 preferredbase와 중복되지 않는 한)이다 : 오른쪽 (I 후 스레드를 일시 중단 피해자 과정을

  • 을 시작하는 버퍼에

    1. 다운로드 악성 EXE과 장소
    2. CreateProcess를 이 작업은 win10에서 작동하지 않으므로 CREATE_SUSPENDED 플래그를 사용하지 않습니다.)
    3. 버퍼 (PIMAGE_DOS_HEADER, PIMAGE_NT_HEADERS)에서 필요한 헤더 정보 가져 오기, 원격 프로세스에서 ImageBase 주소 가져 오기 PEB
    4. 하고 VirtualAllocEx는
    5. 쓰기 PE 헤더와 섹션 메모리 위치에
    6. 보호 메모리
    7. 변경 EAX 새로운 엔트리 포인트
    8. 변경에를 위치를 선택할 수 있도록
    9. 는 lpAddress에 대한 NULL을 사용하여 대상 프로세스 (하고 VirtualAllocEx)에서 메모리를 할당 새로운 기본 주소로 PEB
    10. ResumeThread로
    11. 이익
    12. 그래서

    하십시오

    1. 왜, 내가 주입하고있어 비록이 작업을 수행 백그라운드에서 몇 가지 마법 PE 로더가 수동 재배치를하지 않고이 일이 않습니다 나에게 다음과 같은 이해하는 데 도움이?

    2. 대상 프로세스가 기본 설정 주소와 겹치는 경우 왜 작동하지 않습니까? PE 이미지 자체는 겹치지 않는 메모리 위치에 복사되므로 대상 프로세스가 겹치지 않을 때 내 작업 솔루션과 다른 점이 무엇입니까? 그것은 첫 번째 질문에서 마술 재배치 작업을해야합니다.

    3. 왜 많은 사람들이 이미지를 메모리에 기록하기 전에 preferredBaseAddress를 변경하는 것을 보았습니까? PE 로더가 재배치를 수행 할 수 없다면,이 필드는 PE를 preferredbaseaddress에 매핑하는 데에만 사용됩니다. 주사 코드로 보는 것은 대개 자체 수동 재배치를 수행하는데 왜 나는 이것을 바꿀 것인지 전혀 모른다.

    바라건대 누군가가 내게 도움이 될 수 있기를 바랍니다.

    감사합니다.

  • +0

    저는 모두 자신의 재배치 코드를 만들었지 만 지금은 작동하지만 메모리에 복사하기 전에 이미지의 preferredBaseAddress를 변경해야합니다. 재배치 코드가없는 이유와 왜 PEB뿐만 아니라 기본 설정베이스도 변경해야하는 이유를 알아 냈습니다. – yannickwe87

    답변

    0

    1 : 어셈블리 코드의 작동 방식 때문입니다. 대부분의 jmp는 현재 주소와 관련이 있으므로 코드의 위치에 관계없이 작동합니다. 변수를 찾거나 IAT에서 dll 가져 오기 주소를 확인하려는 즉시 문제가 발생합니다. 이는 이러한 연산에 MOV 명령어가 필요하고 일반적으로 컴파일러가 주소를이 함수의 소스 피연산자로 하드 코어하기 때문입니다. 그런 다음 문제가 임의의 위치를 ​​가리키고 액세스 위반/정의되지 않은 동작이 발생합니다.

    내가 생각하기에는 호스트 프로세스와 페이로드 모두 동일한 기본 주소를 사용한다는 것입니다. 이것은 액세스 위반으로 인해 실패하지 않는다는 것을 의미합니다. 이 발생하면이 해당 위치의 임의의 데이터가됩니다.

    페이로드를 기본 설정 주소로 항상로드하는 경우 수동으로 재배치 할 필요가 없습니다.

    2 : 정상 간단한 응용 프로그램의 경우는 기본 설정된 기준 주소를 변경할 필요가 없습니다 : 당신이

    3

    을 무슨 뜻인지 확실하지. 페이로드가 재배치 테이블 (예 : 루트킷 또는 w/e를 배포 할 때)에 액세스해야 할 때 문제가 발생합니다. 바이러스의 종류에 따라 다릅니다. 기본 주소와 실제 기본 주소를 비교하면 문제가 없어야합니다.

    CREATE_SUSPENDED 문제 : 몇 주 전에 똑같은 문제가 발생했습니다. CREATE_SUSPENDED로 생성 된 스레드를 다시 시작하자마자 레지스터 나 w/e를 덮어 쓰는 것처럼 보입니다. 나는 왜이 문제가 발생했는지 알 수 없었다. 이것을 극복하기 위해 할 수있는 일은 결코 메인 스레드를 다시 시작하지 않습니다. 대신 단순히 CreateRemoteThreadEx를 사용하여 새 스레드를 만듭니다.

    편집 : 다른 질문 중 하나를 읽고 나면이 문제가 실제로 해결되었습니다. 나는 EAX 대신에 EIP를 바꿨다. PE 로더가 eax라고하는 것은 명령 포인터에서 코드를 다시 시작하는 대신에 알지 못했습니다.

    HMU에 도움이 필요한 경우. 멀웨어 개발에 대한 전체 연구를 수행했으며 지식을 공유하고 싶습니다.