
Reflective x64 PE/DLL Loader implementato utilizzando syscall indirette dinamiche
Atlas è un loader riflessivo x64 che ha le seguenti funzionalità:
Atlas richiede i seguenti parametri per funzionare correttamente:
Usage: atlas_x64.exe [Process name / PID] [Cleanup] [Server] [Port] [AtlasPatcher DLL] [DLL/PE to inject] <Entrypoint>
| Parametro | Descrizione |
|---|---|
| Name / PID | Il nome o il PID del processo di destinazione |
| Cleanup | Indica se desideri rimuovere le DLL iniettate dal processo di destinazione al completamento (Cleanup accetta come valori 1 o 0) |
| Server | L'indirizzo IP del server remoto dove hai le DLL |
| Port | La porta utilizzata dal tuo server |
| AtlasPatcher DLL | Il nome della DLL AtlasPatcher (di default atlas_patcher.dll) ospitata sul tuo server (puoi trovare la DLL in /AtlasLdr/bin dopo la compilazione) |
| DLL/PE to inject | Il nome della DLL o del PE che desideri iniettare, ospitato sul tuo server |
| Entrypoint | Un argomento opzionale; il nome della funzione esportata che vuoi usare come entrypoint quando la DLL viene iniettata |

L'approccio convenzionale a un loader di solito prevede un injector responsabile dell'iniezione di una DLL contenente il loader nel processo remoto che abbiamo come target. Una volta iniettata, l'esecuzione viene passata al loader, che è responsabile del mapping della DLL malevola. Al contrario, Atlas adotta un approccio leggermente diverso eseguendo l'intero processo di mapping nel proprio contesto, ad eccezione della patch dell'Import Address Table (IAT), che viene rimandata.
Una volta che la DLL malevola è stata mappata nel contesto di Atlas, viene copiata nella memoria precedentemente riservata nel processo remoto. A questo punto, la DLL malevola è mappata nel processo remoto, ma l'IAT non è ancora stata patchata. Per risolvere questo problema, AtlasLdr inietta una DLL (atlas_patcher.dll) con dipendenze minime nel processo malevolo, che si occupa di patchare l'IAT della DLL malevola e poi trasferisce a essa il contesto di esecuzione.
Questo approccio aiuta a ridurre le dimensioni e la complessità della DLL del loader da iniettare nel processo remoto e minimizza le possibilità che l'injector venga rilevato, poiché possiamo caricare la DLL con il loader stesso.
Atlas deve essere compilato usando x86_64-w64-mingw32-g++. Una volta che lo hai sul tuo sistema, esegui semplicemente make (o mingw32-make.exe) nella cartella del progetto.
