Come posso proteggere i miei assembly .NET dalla decompilazione?

Uno se le prime cose che ho imparato quando ho iniziato con C # è stata la più importante. Puoi decompilare qualsiasi assembly .NET con Reflector o altri strumenti. Molti sviluppatori non sono a conoscenza di questo fatto e molti di loro sono scioccati quando mostro loro il codice sorgente.

La protezione contro la decompilazione è ancora un compito difficile. Sto ancora cercando un modo veloce, facile e sicuro per farlo. Non voglio offuscare il mio codice in modo che i nomi dei miei metodi siano a, b, c o così via. Reflector o altri strumenti non dovrebbero essere in grado di riconoscere la mia applicazione come assemblaggio .NET. Conosco già alcuni strumenti ma sono molto costosi. C’è un altro modo per proteggere le mie applicazioni?

MODIFICARE:

La ragione della mia domanda non è quella di prevenire la pirateria. Voglio solo impedire ai concorrenti di leggere il mio codice. So che lo faranno e lo hanno già fatto. Mi hanno anche detto così. Forse sono un po ‘paranoico, ma i rivali di lavoro che leggono il mio codice non mi fanno sentire bene.

    Una cosa da tenere a mente è che vuoi farlo in un modo che abbia senso per gli affari. Per fare ciò, è necessario definire i propri obiettivi. Quindi, quali sono esattamente i tuoi obiettivi?

    Prevenire la pirateria? Questo objective non è realizzabile. Anche il codice nativo può essere decompilato o incrinato; la moltitudine di warez disponibili online (anche per prodotti come Windows e Photoshop) è la prova che un hacker determinato può sempre ottenere l’accesso.

    Se non puoi impedire la pirateria, allora che ne pensi di ridurlo? Anche questo è fuorviato. Ci vuole solo una persona per decifrare il tuo codice affinché sia ​​disponibile per tutti. Devi essere fortunato ogni volta. I pirati devono essere fortunati solo una volta.

    Te l’ho messo l’objective dovrebbe essere quello di massimizzare i profitti. Sembra che tu creda che fermare la pirateria sia necessario per questo sforzo. Non è. Il profitto è semplicemente entrate meno i costi. Fermare la pirateria aumenta i costi . Ci vuole impegno, il che significa aggiungere costi da qualche parte nel processo e così ridurre quel lato dell’equazione. Proteggere il tuo prodotto non fa nulla per aumentare le tue entrate. So che guardi tutti quei pirati e vedi tutti i soldi che potresti fare se solo pagassero i tuoi diritti di licenza, ma la realtà è che questo non accadrà mai . C’è qualche iperbole qui, ma generalmente sostiene che i pirati che non sono in grado di violare la sicurezza troveranno un prodotto simile che possono crackare o fare a meno. Non lo compreranno mai , e quindi non rappresentano vendite perse.

    Inoltre, la protezione del prodotto riduce effettivamente le entrate . Ci sono due ragioni per questo. Uno è la piccola percentuale di clienti che hanno problemi con l’triggerszione o la sicurezza, e quindi decidono di non comprare di nuovo o di chiedere indietro i loro soldi. L’altra è la piccola percentuale di persone che effettivamente provano una versione pirata del software per assicurarsi che funzioni prima di acquistare. Limitare la distribuzione pirata del tuo prodotto ( se sei in qualche modo in grado di riuscirci) impedisce a queste persone di provare il tuo prodotto, e quindi non lo compreranno mai. Inoltre, la pirateria può anche aiutare il tuo prodotto a diffondersi a un pubblico più ampio, raggiungendo così più persone che saranno disposte a pagare per questo.

    Una strategia migliore consiste nell’assumere che il tuo prodotto verrà piratato e pensare a come trarre vantaggio dalla situazione. Un paio di altri link sull’argomento:
    Come posso evitare che il mio codice venga rubato?
    Protezione di un’applicazione .NET

    Al lavoro qui usiamo Dotfuscator di PreEmptive Solutions.

    Sebbene sia imansible proteggere gli assembly .NET 100% Dotfuscator lo rende abbastanza difficile da pensare. Vengo con molte tecniche di offuscamento;

    Rinominazione di assi incrociate
    Rinominare gli schemi
    Prefisso di ridenominazione
    Induzione di sovraccarico migliorata
    Offuscamento incrementale
    Rapporto di ridenominazione HTML
    Flusso di controllo
    Crittografia a stringa

    E si è scoperto che non sono molto costosi per le piccole imprese. Hanno un prezzo speciale per le piccole aziende.

    (No, non sto lavorando per PreEmptive ;-))

    Ovviamente esistono alternative freeware ;

    Ospita il tuo servizio in qualsiasi provider di servizi cloud.

    Come prevenire la decompilazione di qualsiasi applicazione C #

    Descrive praticamente l’intera situazione.

    Ad un certo punto il codice dovrà essere tradotto in bytecode VM, e l’utente può farlo in quel momento.

    Anche il codice macchina non è molto diverso. Un buon disassemblatore / debugger interattivo come IDA Pro rende trasparente qualsiasi applicazione nativa. Il debugger è abbastanza intelligente da utilizzare l’intelligenza artificiale per identificare le API comuni, le ottimizzazioni del compilatore, ecc. Consente all’utente di ribuild meticolosamente i costrutti di livello superiore dall’assieme generato dal codice macchina.

    E IDA Pro supporta anche .Net in una certa misura.

    Onestamente, dopo aver lavorato su un progetto di reverse engineering (per compatibilità) per alcuni anni, la cosa principale che ho ottenuto dalla mia esperienza è che probabilmente non dovrei preoccuparmi troppo delle persone che rubano il mio codice. Se qualcuno lo desidera, non sarà mai molto difficile ottenerlo, non importa quale schema implemento.

    So che non vuoi offuscare, ma forse dovresti controllare dotfuscator , prenderà le tue assemblee compilate e le offuscherai per te. Penso che possa persino crittografarli.

    Nessun obsfuscator può proteggere la tua applicazione, nemmeno quella descritta qui. Vedi questo link, è un deobsfuscator che può deobsfuscating quasi ogni obsfuscator là fuori.

    https://github.com/0xd4d/de4dot

    Il modo migliore che può aiutarti (ma ricorda anche che non sono completi) consiste nell’utilizzare codici misti, codificare i tuoi codici importanti in linguaggio non gestito e creare una DLL come in C o C ++ e quindi proteggerli con Armageddon o Themida. Themida non è per ogni cracker, è uno dei migliori protettori sul mercato, ma può anche proteggere il tuo software .NET.

    Ho sentito parlare di alcuni progetti che compilano direttamente IL in codice nativo. È ansible ottenere alcune informazioni aggiuntive da questo post: È ansible compilare il codice .NET IL al codice macchina?

    Utilizziamo {SmartAssembly} per la protezione .NET di un’applicazione distribuita a livello aziendale e ha funzionato perfettamente per noi.

    Se vuoi proteggere completamente la tua app dalla decompilazione, guarda Aladdin’s Hasp. È ansible avvolgere gli assembly in una shell crittografata a cui è ansible accedere solo dall’applicazione. Certo, ci si chiede come siano in grado di farlo, ma funziona. Non so però se proteggono la tua app dal runtime attachment / reflection che è ciò che Crack.NET è in grado di fare.

    – Modifica Fai anche attenzione alla compilazione del codice nativo come soluzione … ci sono anche decompilatori per il codice nativo.

    Se qualcuno deve rubare il tuo codice, probabilmente significa che il tuo modello di business non funziona. Cosa intendo con questo? Ad esempio, compro il tuo prodotto e poi chiedo il supporto. Sei troppo impegnato o ritieni che la mia richiesta non sia valida e una perdita di tempo. Decodifico il tuo prodotto per supportare la mia attività relativa. Il tuo prodotto diventa più prezioso per me e ho la priorità per il mio tempo in modo da risolvere il modello di business per sfruttare il tuo prodotto. Ricodico e riprogramma il tuo prodotto e poi esco e guadagno i soldi che hai deciso di lasciare sul tavolo. Ci sono dei motivi per proteggere il codice, ma molto probabilmente stai guardando il problema da una prospettiva sbagliata. Certo che lo sei. Sei il “programmatore” e io sono l’uomo d’affari. 😉 Saluti!

    ps. Sono anche uno sviluppatore. cioè “coder”

    Hai API?

    Invece di provare a proteggere il tuo unico file ddl in uno dei tuoi prodotti su tutti i dispositivi dei tuoi clienti, perché non creare un servizio API per le tue preziose funzionalità del prodotto? Consenti al prodotto effettivo salvato su un dispositivo di utilizzare quell’API per consegnare il prodotto come desideri.

    Penso che in questo modo sei sicuro al 100% che il tuo codice non venga decompilato e imposti i tuoi limiti nella tua API in modo che gli sviluppatori / hacker non consumino la tua API in un modo che non vuoi.

    Certo è un po ‘più di lavoro, ma alla fine, hai il controllo.

    So che questo è vecchio ma, Themida è il software anti-cracking più avanzato che abbia mai usato.
    Non è gratuito, però.