Nebula.NET
Linux, macOS y CI
Ejecuta el protector de Nebula.NET en cualquier lugar donde corra .NET. Instala la herramienta multiplataforma `nebula` de dotnet en Linux, macOS o Windows, úsala en contenedores e inclúyela en GitHub Actions, GitLab CI o Azure Pipelines.
El protector de Nebula.NET es una herramienta dotnet multiplataforma. La reescritura de IL que realiza la protección real —renombrado, ofuscación del flujo de control, cifrado de cadenas/constantes/recursos/métodos, ofuscación de referencias, anti-manipulación y endurecimiento de metadatos— se ejecuta en Windows, Linux y macOS dondequiera que esté instalado .NET 8+. Eso hace que la misma ofuscación que ejecutas localmente sea reproducible en un agente de compilación Linux o dentro de un contenedor, sin ninguna máquina Windows en el pipeline.
Nuevo en 1.1.3. El comando
nebulase publica en nuget.org como herramienta dotnet, así que Linux y CI ya no necesitan el instalador de Windows.
Qué se ejecuta y dónde
| Capacidad | Windows | Linux / macOS |
|---|---|---|
| Todas las transformaciones de IL (renombrado, flujo de control, cifrado, proxy de referencias, anti-manipulación, endurecimiento de metadatos) | ✓ | ✓ |
| Firma de nombre seguro (strong-name) | ✓ | ✓ |
| Integración con MSBuild / CLI | ✓ | ✓ |
Firma Authenticode (signAuthenticode) | ✓ | — solo Windows |
Interfaz de escritorio, instalador .msi | ✓ | — solo Windows |
Solo la firma Authenticode es exclusiva de Windows — usa la pila de firma de Windows. Todo lo necesario para proteger un ensamblado funciona multiplataforma. Un patrón común es ofuscar en un agente Linux y hacer el paso de Authenticode en un trabajo de Windows aparte (o con tu servicio de firma de código existente).
Instala la herramienta
Instálala globalmente (añade nebula a tu PATH):
dotnet tool install --global Delta1Labs.Nebula.Tool
nebula --version
O fíjala por repositorio como herramienta local para que cada desarrollador y agente de CI use la misma versión — este es el enfoque recomendado para CI:
dotnet new tool-manifest # una vez, crea .config/dotnet-tools.json
dotnet tool install Delta1Labs.Nebula.Tool
dotnet tool restore # en CI, restaura la versión fijada
dotnet tool run nebula --version
El id del paquete es Delta1Labs.Nebula.Tool; el comando instalado es nebula.
Ejecútala
La CLI toma un config JSON y protege los ensamblados que nombra (o los que le pasas con -i):
nebula --config nebula.json
# o dirige un config solo de ajustes con una entrada explícita:
nebula --config nebula.ci.json -i ./publish/MyApp.dll -o ./protected
En servidores de compilación, activa el interruptor de fallo cerrado para que una licencia ausente o revocada rompa la compilación en lugar de enviar silenciosamente código legible, y licencia solo los agentes de compilación:
{ "requireLicensedEdition": true, "controlFlowObfuscation": true, "encryptStrings": true }
Consulta la referencia de la CLI para cada opción y la configuración para el esquema completo.
Contenedores
La herramienta se instala en cualquier imagen que tenga el SDK de .NET. Instálala en la imagen oficial del SDK y tendrás una imagen de protector reutilizable:
FROM mcr.microsoft.com/dotnet/sdk:8.0
RUN dotnet tool install --global Delta1Labs.Nebula.Tool
ENV PATH="${PATH}:/root/.dotnet/tools"
ENTRYPOINT ["nebula"]
Constrúyela y ejecútala sobre una carpeta de salida montada:
docker build -t my-nebula .
docker run --rm -v "$PWD/publish:/work" my-nebula --config /work/nebula.json
Fija la versión del paquete en la línea dotnet tool install (por ejemplo --version 1.1.4) para que la imagen sea reproducible.
GitHub Actions
jobs:
protect:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.0.x'
- run: dotnet publish -c Release -o publish
- run: dotnet tool install --global Delta1Labs.Nebula.Tool
- name: Obfuscate
run: nebula --config nebula.json -i publish/MyApp.dll -o protected
env:
NEBULA_LICENSE_KEY: ${{ secrets.NEBULA_LICENSE_KEY }}
- uses: actions/upload-artifact@v4
with:
name: protected
path: protected
Guarda tu clave de licencia en un secreto de repositorio u organización (aquí NEBULA_LICENSE_KEY) — nunca en el archivo de config ni en el repositorio.
GitLab CI
protect:
image: mcr.microsoft.com/dotnet/sdk:8.0
variables:
PATH: "$PATH:/root/.dotnet/tools"
script:
- dotnet publish -c Release -o publish
- dotnet tool install --global Delta1Labs.Nebula.Tool
- nebula --config nebula.json -i publish/MyApp.dll -o protected
artifacts:
paths:
- protected/
Define NEBULA_LICENSE_KEY como una variable de CI/CD enmascarada y protegida en los ajustes del proyecto.
Azure Pipelines
pool:
vmImage: ubuntu-latest
steps:
- task: UseDotNet@2
inputs:
version: '8.0.x'
- script: dotnet publish -c Release -o publish
displayName: Publish
- script: dotnet tool install --global Delta1Labs.Nebula.Tool
displayName: Install Nebula
- script: nebula --config nebula.json -i publish/MyApp.dll -o protected
displayName: Obfuscate
env:
NEBULA_LICENSE_KEY: $(NEBULA_LICENSE_KEY)
- publish: protected
artifact: protected
Orden del pipeline
La ofuscación reescribe el IL, así que debe ejecutarse antes de cualquier firma — si firmas primero, invalidas tanto la firma Authenticode como el propio hash anti-manipulación de Nebula. El orden completo de publicación y los pasos de firma/atestación están en Endurecer tu pipeline de CI/CD.
MSBuild en lugar de la CLI
Si prefieres proteger como parte de dotnet build sin un paso aparte, la integración con MSBuild funciona igual en Linux y en CI — consulta MSBuild y CI.