
Empacador de PE reflectante.
Amber es un cargador de PE independiente de posición (reflectivo) que permite la ejecución en memoria de archivos PE nativos (EXE, DLL, SYS...). Permite el despliegue sigiloso de cargas útiles en memoria que pueden utilizarse para evadir productos antivirus, firewall, IDS, IPS y mitigaciones de listas blancas de aplicaciones. Las cargas útiles reflectivas generadas por Amber pueden ser almacenadas desde un servidor remoto o ejecutadas directamente en memoria, muy similar a un shellcode genérico. Por defecto, cada carga útil generada se codifica utilizando el nuevo codificador SGN. Amber utiliza CRC32_API y IAT_API para resolver de manera discreta las direcciones de las funciones de la API de Windows. Una vez que el archivo PE se carga y ejecuta en memoria, la carga útil reflectiva se borra para evadir los escáneres de memoria.
Los binarios precompilados se pueden encontrar en releases.
Compilación desde el código fuente
La única dependencia para compilar el código fuente es keystone engine, siga estas instrucciones para instalar la librería. Una vez que libkeystone esté instalado en el sistema, simplemente ejecute go get ツ
go install github.com/EgeBalci/amber@latest
Instalación mediante Docker
docker pull egee/amber
docker run -it egee/amber
La siguiente tabla enumera los parámetros compatibles con amber.
Ejemplo de uso
amber -f test.exe
amber -e 10 --iat -f test.exe
Uso con Docker
docker run -it -v /tmp/:/tmp/ amber -f /tmp/file.exe
| Parámetro | Tipo | Descripción |
|---|---|---|
| -f,--file | string | Archivo PE de entrada. |
| -o,--out | string | Nombre del archivo binario de salida de la carga útil. |
| -e | int | Número de veces para codificar la carga útil reflectiva generada. |
| --iat | bool | Usar el bloque resolvedor de API IAT en lugar del bloque resolvedor de API CRC. |
| -l | int | Número máximo de bytes para ofuscación (por defecto 5). |
| --sys | bool | Realizar syscalls sin procesar. (solo x64). |
| --scrape | bool | Extraer el byte mágico y el stub DOS del PE. |