
Dynamic Indirect Syscalls를 사용하여 구현된 Reflective x64 PE/DLL 로더
Atlas는 다음과 같은 기능을 갖춘 리플렉티브(reflective) x64 로더입니다:
Atlas가 제대로 작동하려면 다음 매개변수가 필요합니다:
Usage: atlas_x64.exe [Process name / PID] [Cleanup] [Server] [Port] [AtlasPatcher DLL] [DLL/PE to inject] <Entrypoint>
| 매개변수 | 설명 |
|---|---|
| Name / PID | 대상 프로세스의 이름 또는 PID |
| Cleanup | 완료 시 대상 프로세스에서 주입된 DLL을 제거할지 여부를 지정합니다 (Cleanup은 1 또는 0 값을 지원합니다) |
| Server | DLL이 있는 원격 서버의 IP 주소 |
| Port | 서버에서 사용하는 포트 |
| AtlasPatcher DLL | 서버에 호스팅된 AtlasPatcher DLL의 이름 (기본값은 atlas_patcher.dll이며, 컴파일 후 /AtlasLdr/bin에서 DLL을 찾을 수 있습니다) |
| DLL/PE to inject | 서버에 호스팅된, 주입하려는 DLL 또는 PE의 이름 |
| Entrypoint | 선택적 인수; DLL이 주입될 때 진입점으로 사용하려는 내보낸 함수의 이름 |

로더에 대한 일반적인 접근 방식은 보통 인젝터(injector)가 로더를 포함하는 DLL을 대상 원격 프로세스에 주입하는 것입니다. 주입이 완료되면 실행이 로더로 전달되며, 로더는 악성 DLL 매핑을 담당합니다. 반면 Atlas는 Import Address Table(IAT) 패칭을 제외한 전체 매핑 프로세스를 자체 컨텍스트 내에서 수행하는 약간 다른 접근 방식을 사용하며, IAT 패칭은 지연됩니다.
악성 DLL이 Atlas 컨텍스트에 매핑되면 원격 프로세스에 미리 예약된 메모리로 복사됩니다. 이 시점에서 악성 DLL은 원격 프로세스에 매핑되어 있지만 IAT는 아직 패칭되지 않았습니다. 이를 해결하기 위해 AtlasLdr은 최소한의 종속성을 가진 DLL(atlas_patcher.dll)을 악성 프로세스에 주입하여 악성 DLL의 IAT 패칭을 처리한 다음 실행 컨텍스트를 해당 DLL로 전송합니다.
이 접근 방식은 원격 프로세스에 주입할 로더 DLL의 크기와 복잡성을 줄이는 데 도움이 되며, 로더 자체로 DLL을 로드할 수 있으므로 인젝터가 탐지될 가능성을 최소화합니다.
Atlas는 **x86_64-w64-mingw32-g++**를 사용하여 컴파일해야 합니다. 시스템에 설치되어 있으면 프로젝트 폴더에서 make(또는 mingw32-make.exe)를 실행하기만 하면 됩니다.
