
반사적 DLL 주입은 반사적 프로그래밍 개념을 활용하여 호스트 프로세스의 메모리에서 라이브러리를 로드하는 라이브러리 주입 기법입니다.
Reflective DLL 인젝션은 반사적 프로그래밍(reflective programming) 개념을 활용하여 호스트 프로세스의 메모리에서 라이브러리 로딩을 수행하는 라이브러리 인젝션 기법입니다. 즉, 라이브러리가 최소한의 PE(Portable Executable) 파일 로더를 구현하여 스스로를 로딩하는 역할을 담당합니다. 이를 통해 호스트 시스템 및 프로세스와의 최소한의 상호작용만으로 로딩 방식과 호스트와의 상호작용 방식을 제어할 수 있습니다.
이 인젝션은 해당 아키텍처가 지원되는 Windows NT4부터 Windows 8까지, x86, x64 및 ARM에서 동작합니다.
프로세스에 라이브러리를 원격으로 인젝션하는 과정은 두 단계로 이루어집니다. 첫째, 인젝션하려는 라이브러리를 대상 프로세스(이하 호스트 프로세스)의 주소 공간에 기록해야 합니다. 둘째, 라이브러리가 임포트 해석이나 메모리의 적절한 위치로의 재배치와 같은 런타임 요구 사항을 충족하는 방식으로 해당 라이브러리를 호스트 프로세스에 로드해야 합니다.
호스트 프로세스에서 코드 실행 권한을 확보했고 인젝션하려는 라이브러리가 호스트 프로세스 메모리의 임의 위치에 기록되었다고 가정할 때, Reflective DLL 인젝션은 다음과 같이 동작합니다.
Visual Studio C++에서 'rdi.sln' 파일을 열고 Release 모드로 솔루션을 빌드하여 inject.exe와 reflective_dll.dll을 생성합니다.
테스트하려면 inject.exe를 사용하여 프로세스 ID를 통해 reflective_dll.dll을 호스트 프로세스에 인젝션합니다. 예:
inject.exe 1234
3-clause BSD 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.txt를 참조하십시오.