
메모리에서 반사적 PE 로딩을 위한 Nim 구현
메모리에서 리플렉티브 PE-Loading을 수행하는 Nim 구현체입니다. 이 코드의 기본은 RunPE-In-Memory에서 가져와 Nim으로 포팅했습니다.
다음 의존성을 설치해야 합니다:
nimble install ptr_math winim
테스트는 Nim 버전 1.6.2에서만 진행했습니다. 따라서 해당 버전을 사용하여 테스트하시기 바랍니다. 다른 버전을 사용할 경우 오류가 발생하지 않을 것이라고 보장할 수 없습니다.
런타임에 인수를 전달하거나 인수를 전달하지 않으려면 다음 명령으로 컴파일하세요:
nim c NimRunPE.nim
사용자 정의 인수를 하드코딩하려면 const exeArgs를 필요에 맞게 수정한 후 다음 명령으로 컴파일하세요:
nim c -d:args NimRunPE.nim - 이 옵션은 @glynx가 기여했습니다. 감사합니다! 😎
완전한 Thread Local Storage(TLS) 콜백 지원(즉, Rust PE 실행 등)이 필요하다면 다음 명령으로 컴파일하세요:
nim c -d:full_tls NimRunPE.nim
full_tls 옵션 구현에 대한 크레딧은 BlackBone과 lander's blog/solstice-loader에게 있습니다.
이 기술 자체는 꽤 오래되었지만, 아직 Nim 구현체를 찾지 못했습니다. 이제는 생겼네요. :)
예를 들어 이 기술로 Mimikatz를 로드하려면 직접 소스에서 컴파일한 버전을 사용하세요. 공식 릴리스 바이너리는 이 로더가 리플렉티브하게 로드한 후 인수를 받지 않기 때문입니다. 왜 그런지 정말 모르겠지만 이상하지만 사실입니다. 직접 컴파일하면 정상 작동합니다:
제 개인 Packer도 이 기술을 활용하고 있지만, 모든 Win32 함수가 Syscall로 대체되어 있습니다. 이를 통해 기술의 스텔스성이 향상됩니다.