2010-03-19 36 views
51

Uno se le prime cose che ho imparato quando ho iniziato con C# è stato il 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.Come posso proteggere i miei assembly .NET dalla decompilazione?

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?

EDIT:

Il motivo della mia domanda non è quello 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.

+9

Se reflector non è in grado di stabilire se l'applicazione è un assembly .NET, di come si suppone che l'applicazione tenta di caricarlo? – Brian

+1

Re "Non voglio offuscare il mio codice in modo che i nomi dei miei metodi siano a, b, c o così". Perchè no? Questa è la cosa ovvia da fare per rendere più difficile per i concorrenti dare un senso alla logica. – ToolmakerSteve

+0

Sì, offuscamento 100% "funziona". Per prima cosa non dovresti inserire "segreti" nel tuo codice, cose che "una volta trovate nel codice possono compromettere la sicurezza". Secondo, hai mai preso il codice su GitHub e hai cercato di riutilizzarlo?Voglio dire, anche il codice non offuscato può essere pazzo da riutilizzare a causa di paradigmi usati, accoppiamento di classe, responsabilità classiche sfocate, fest di dipendenza, festeggiamenti di callback e altro. Ciò significa che il codice offuscato è perfettamente sicuro, fino a quando i programmatori di robot non saranno in grado di comprendere la logica di programmazione e di riscrivere/rifasare velocemente il codice, cosa che non sta succedendo presto. – Felype

risposta

93

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 obiettivo 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 è possibile prevenire 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.

L'ho messo a voi l'obiettivo 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. Arresto della pirateria aumenta costi. Ci vuole impegno, il che significa aggiungere costi da qualche parte nel processo e così ridurre quel lato dell'equazione. Proteggi il tuo prodotto anche niente per aumentare le tue entrate. So che guardi tutti quei pirati e vedi tutti i soldi che potresti fare se solo pagassero i tuoi canoni di licenza, ma la realtà è che questo sarà 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. Lo saranno mai acquistarlo invece, e quindi lo fanno non rappresentano vendite perse.

Inoltre, protezione del prodotto in realtà riduce entrate. Ci sono due ragioni per questo. Uno è la piccola percentuale di clienti che hanno problemi con l'attivazione o la sicurezza, e quindi decidono di non comprare di nuovo o chiedere i loro soldi indietro. 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 mai 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 è quella di presumere che il prodotto verrà piratato e pensare a come sfruttare la situazione. Un altro paio di link sul tema:
How do i prevent my code from being stolen?
Securing a .NET Application

+22

L'obiettivo principale non è prevenire la pirateria. L'obiettivo è impedire ai concorrenti di leggere il mio codice. So che lo faranno, lo hanno già fatto. – TalkingCode

+15

Se questo è il tuo obiettivo, è sufficiente un offuscatore. –

+2

Non direi che i pirati non "mai" compreranno alcuna licenza se alcuni software non sono crackabili. Non è vero al 100%. Ho visto persone che dicevano "Non comprerò questo gioco soft, non posso permettermi, blah blah" e poi comprarlo dopo aver notato che la versione crackata è obsoleta, infetta da virus o non consente loro di accedere ad alcuni online funzionalità. – Tarec

9

How to preventing decompilation of any C# application

descrive Praticamente l'intera situazione.

A un certo punto, il codice dovrà essere convertito in codice bytec VM e l'utente può accedervi.

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 ricostruire meticolosamente i costrutti di livello superiore dall'assieme generato dal codice macchina.

E IDA Pro supporta anche .Net.

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.

+6

È solo necessario rendere più difficile la lettura del codice piuttosto che scrivere il codice. – Brian

+2

ad un certo punto non è più possibile imho – Guillaume86

11

Ospita il tuo servizio in qualsiasi provider di servizi cloud.

2

Se si desidera proteggere completamente la vostra applicazione da decompilazione, guarda Hasp di Aladino. È possibile avvolgere gli assembly in una shell crittografata a cui è possibile 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 Fare attenzione anche alla compilazione del codice nativo come soluzione ... esistono anche decompilatori per il codice nativo.

3

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

5

So che non vuoi offuscare, ma forse dovresti controllare dotfuscator, prenderà i tuoi assembly compilati e li offuscerà per te. Penso che possa persino crittografarli.

14

Al lavoro qui usiamo Dotfuscator da PreEmptive Solutions.

Sebbene sia impossibile proteggere gli assembly .NET 100% Dotfuscator lo rende sufficientemente difficile. Viene fornito con molte tecniche di offuscamento;

Assemblea

Croce rinomina
schemi Rinominare
rinomina prefisso
avanzata sovraccarico induzione
incrementale offuscamento
HTML rinomina Relazione
Flow Control
stringa di crittografia

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

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

Non ci sono alternative freeware naturalmente;

+2

Lo uso anch'io. Ottimo software anche se ha alcune funzionalità inutili (per me) come quella che fa scadere il tuo programma o quella che ti segnala eccezioni via email. Ma il rename e il flusso logico sono molto buoni e non vedo alcun modo per chiunque di leggere il tuo codice dopo una buona esecuzione di questo programma. – TheGateKeeper

0

Se qualcuno deve rubare il vostro codice, probabilmente significa che il 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è "codificatore"

+2

Potrebbe essere un concorrente con un prodotto esistente che sta tentando di aggiungere le proprie funzionalità al proprio prodotto. – hypehuman

4

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ò aiutare (ma ricordate che sono anche non pieno prof) è quello di utilizzare i codici misti, codice tuoi codici importanti in un linguaggio non gestito e fare una DLL come in C o C++ e quindi proteggili con Armageddon o Themida. Themida non è per ogni cracker, è uno dei migliori protettori sul mercato, ma può anche proteggere il tuo software .NET.

0

Hai API?

Invece di cercare di 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.

0

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

Problemi correlati