// Copyright (c) StellaOps. All rights reserved. // Licensed under AGPL-3.0-or-later. See LICENSE in the project root. using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using StellaOps.BinaryIndex.Disassembly; using StellaOps.BinaryIndex.Normalization; using StellaOps.BinaryIndex.Semantic; namespace StellaOps.BinaryIndex.DeltaSig; /// /// Extension methods for registering delta signature services. /// public static class ServiceCollectionExtensions { /// /// Adds delta signature generation and matching services. /// Requires disassembly and normalization services to be registered. /// If semantic services are registered, semantic fingerprinting will be available. /// /// The service collection. /// The service collection for chaining. public static IServiceCollection AddDeltaSignatures(this IServiceCollection services) { services.AddSingleton(sp => { var disassembly = sp.GetRequiredService(); var normalization = sp.GetRequiredService(); var logger = sp.GetRequiredService>(); // Semantic services are optional var irLifting = sp.GetService(); var graphExtractor = sp.GetService(); var fingerprintGenerator = sp.GetService(); return new DeltaSignatureGenerator( disassembly, normalization, irLifting, graphExtractor, fingerprintGenerator, logger); }); services.AddSingleton(); return services; } /// /// Adds delta signature services with semantic analysis support enabled. /// Requires disassembly and normalization services to be registered. /// /// The service collection. /// The service collection for chaining. public static IServiceCollection AddDeltaSignaturesWithSemantic(this IServiceCollection services) { // Register semantic services first services.AddBinaryIndexSemantic(); // Then register delta signature services return services.AddDeltaSignatures(); } /// /// Adds all binary index services: disassembly, normalization, and delta signatures. /// /// The service collection. /// The service collection for chaining. public static IServiceCollection AddBinaryIndexServices(this IServiceCollection services) { // Add disassembly with default plugins services.AddDisassemblyServices(); // Add normalization pipelines services.AddNormalizationPipelines(); // Add delta signature services services.AddDeltaSignatures(); return services; } /// /// Adds all binary index services with semantic analysis: disassembly, normalization, semantic, and delta signatures. /// /// The service collection. /// The service collection for chaining. public static IServiceCollection AddBinaryIndexServicesWithSemantic(this IServiceCollection services) { // Add disassembly with default plugins services.AddDisassemblyServices(); // Add normalization pipelines services.AddNormalizationPipelines(); // Add semantic analysis services services.AddBinaryIndexSemantic(); // Add delta signature services (will pick up semantic services) services.AddDeltaSignatures(); return services; } }