Skip to content

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 nebula se 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

CapacidadWindowsLinux / 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.