2009-08-25 21 views
9

Ho sviluppato un pezzo software (con C e Python) che voglio proteggere con il dongle in modo che la copia e il reverse engineering diventino abbastanza difficili. Il dispositivo è dotato di un dongle api che fornisce questi:Quale codice scrivere per un sistema con chiave hardware per garantire una maggiore sicurezza?

  • check dongle esistenza
  • Verificare il corretto dongle
  • scrittura in una locazione di memoria in chiave
  • leggere da una posizione di memoria a chiave, ecc (I pensa che i resti non siano così buoni ..)

Cosa posso fare nel codice sorgente in modo che diventi più difficile da decifrare. Il provider di Dongle ha suggerito che, dovrei controllare la corretta esistenza della chiave in un loop o dopo un evento, o dovrei usare la memoria della chiave hardware in modo efficiente. Ma come? Non ho idea di come si spezzino i cracker. Per favore, fai un po 'di luce. Grazie in anticipo.

P.S: Si prega di non suggerire offuscamento. L'ho già fatto.

+0

"P.S: per favore non suggerire di offuscare, l'ho già fatto." lol. –

risposta

10

Prima di tutto, rendersi conto che il dongle fornirà solo un piccolo ostacolo. Qualcuno che sa cosa stanno facendo rimuoverà semplicemente la chiamata al dongle e inserirà un 'vero' per qualunque risultato sia stato chiamato. Tutti ti diranno questo. Ma ci sono blocchi stradali che puoi aggiungere!

Vorrei trovare una parte chiave del codice, qualcosa che è difficile o difficile da sapere, qualcosa che richiede la conoscenza del dominio. Quindi metti quella conoscenza sulla chiave. Un esempio di questo sarebbe routine di shader. Le routine di Shader sono file di testo che vengono inviati a una scheda grafica per ottenere effetti particolari; un semplicissimo filtro luminosità/contrasto richiederebbe meno di 500 caratteri da implementare, e lo si può archiviare nello spazio utente sulla maggior parte dei dongle. Quindi metti quelle informazioni sulla chiave e usi solo le informazioni dalla chiave per mostrare le immagini. In questo modo, se qualcuno cerca semplicemente di rimuovere il dongle, tutte le immagini del tuo programma saranno oscurate. Ci vorrebbe qualcuno che avesse una copia del tuo programma, afferrasse il file di testo dalla chiave, e poi modificasse il tuo programma per includere quel file di testo, e poi sapendo che quel particolare file sarebbe il modo "giusto" per visualizzare le immagini. I dettagli dell'implementazione dipendono dalla piattaforma di distribuzione. Se stai eseguendo un programma in WPF, ad esempio, potresti essere in grado di memorizzare una routine directx sulla tua chiave, quindi caricare la routine dalla chiave e applicare l'effetto a tutte le immagini della tua app. Il cracker deve quindi essere in grado di intercettare quella routine di directx e applicarla correttamente.

Un'altra possibilità è utilizzare le routine di generazione del numero casuale della chiave per sviluppare UID. Non appena qualcuno rimuove la funzionalità dongle, tutti gli UID generati verranno azzerati.

La cosa migliore da fare, però, è mettere una funzione specifica del dominio sul dongle (come l'intera routine di generazione di UID). Diversi produttori avranno diverse capacità in questo senso.

Quanto di un blocco stradale ti prenderà queste astuzia? Realisticamente, dipende dalla popolarità del tuo programma. Più popolare è il tuo programma, più è probabile che qualcuno voglia craccarlo e dedicherà il proprio tempo a farlo. In questo scenario, potresti avere qualche giorno se sei particolarmente bravo a codificare i dongle. Se il tuo programma non è così popolare (solo poche centinaia di clienti, per esempio), allora solo la presenza di una chiave hardware potrebbe essere abbastanza dissuasivo senza dover fare nulla di intelligente.

-1

Direi che se qualcuno vuole rompere la protezione del software, lo farà. Quando dici "abbastanza difficile" - come si dovrebbe interpretare "abbastanza"?

Un dongle probabilmente impedirà all'utente medio di copiare il software, quindi in questo senso è già "sufficiente". Ma chiunque senta il bisogno ed è in grado di aggirare il dongle sarà probabilmente in grado di superare qualsiasi altro schema da te ingegnerizzato.

5

I cracker si spezzeranno annusando il traffico tra l'app e il dongle e disattivando qualsiasi codice che verifica la presenza della chiave o il codice di scrittura per emulare il dongle (ad esempio riproducendo il traffico registrato), a seconda dell'aspetto più semplice.

Obfuscation del codice di test e molte parti sparse di codice che eseguono test in modi diversi, oltre a separare spazialmente e temporaneamente l'effetto del test (disattivazione/degrado della funzionalità, visualizzazione di un avviso ecc.) Dal test stesso rende più difficile il precedente metodo.

Mutare il contenuto del dongle con ogni test basato su un nonce casuale creato per ogni esecuzione o eventualmente conservato tra le esecuzioni, in modo che la registrazione ingenua e la riproduzione del traffico non funzioni, renderà più difficile il secondo metodo.

Tuttavia, con il sistema come descritto, è ancora semplice emulare il dongle, quindi prima o poi qualcuno lo farà.

Se si ha la possibilità di eseguire il codice all'interno del dongle, è possibile spostare il codice che esegue funzioni critiche per l'applicazione in quel punto, il che significherebbe che i cracker debbano o ridigitare il codice o rompere la sicurezza fisica del dongle - molto di più proposta costosa (anche se ancora fattibile, rendersi conto che non esiste una sicurezza perfetta).

0

È possibile implementare molti punti di controllo nell'applicazione.

Non so se si utilizza HASP, ma sfortunatamente, dongles can be emulated.

3

Come ottimizzare la protezione con un semplice dongle?

Utilizzare API insieme a Enveloper se esiste un envelope per il formato file risultante. Questa è una regola molto semplice. Perché il nostro involucro è già dotato di alcuni metodi anti-debug e offuscanti per impedire agli hacker principianti comuni di abbandonare l'hacking del programma. Anche l'uso di enveloper non è consigliato, perché una volta che un hacker può rompere la protezione delle buste in un altro programma, può anche rompere il tuo.

Chiama le API dongle in MOLTI punti della tua applicazione. Ad esempio al primo avvio, quando si apre un file, quando si apre una finestra di dialogo e prima di elaborare qualsiasi informazione. Inoltre, magari fare un controllo casuale anche quando non viene fatto nulla.

Utilizzare più di una funzione per proteggere un programma. Non utilizzare solo la funzione Trova per cercare un dongle collegato.

Utilizzare più DLL/librerie (se applicabile) per chiamare le funzioni chiave. Nel caso in cui una dll venga hackerata, ci sono ancora altre parti del software che usano le funzioni di un'altra DLL. Ad esempio, copiare sdx.dll in print.dll, open.dll e altri nomi, quindi definire le chiamate di funzione da ciascuna dll con nomi diversi.

Se si utilizza un file dll per chiamare le funzioni della chiave, collegarlo insieme all'eseguibile. Ci sono alcuni programmi in grado di farlo; per esempio PEBundle.3

Ho questo articolo su PRLOG e l'ho trovato molto utile per massimizzare la protezione con un semplice dongle. Forse questo link può aiutare a

Maximizing Protection with a Simple Dongle for your Software

0

Si consiglia di considerare di usare Dinkey Dongle per la protezione dalla copia.

Sembra un sistema molto sicuro e la documentazione fornisce suggerimenti per migliorare la sicurezza generale utilizzando il sistema.

http://www.microcosm.co.uk/dongles.php

0

Ironia della sorte, la cosa si vuole scoraggiare la pirateria non dagli utenti, ma il furto dai fornitori. Internet è diventato un luogo senza legge che i venditori possono rubare e rivendere il software a volontà. Hai ricorso legale in alcuni casi, e non in altri.

Nulla è infallibile, come affermato in precedenza. Inoltre, più la sicurezza è complessa, più è probabile che causi mal di testa o problemi agli utenti legittimi.

Direi che l'applicazione più sicura è sempre quella più vicina al server. Purtroppo, gli utenti si preoccupano che si tratti di spyware.

Se si fanno molte chiamate diverse al dongle, allora forse il cracker emula il dongle o trova un singolo punto di errore (abbastanza comune cambiare uno o due byte e tutte le chiamate sono inutili) . È una situazione senza vincita.

Come autore di PECompact, dico sempre ai clienti che non possono fare affidamento su nulla per proteggere il loro software - come può e sarà rotto se un cracker dedicato va dopo di esso. Più lo fai più difficile, più una sfida (divertente) è per loro.

Io personalmente uso tecniche di protezione minime sul mio software, conoscendo questi fatti.

0

Utilizzare smartcard + codifica/decodifica i file di lavoro tramite la funzione segreta memorizzata nella scheda. Quindi il software può essere piratato, ma non sarà in grado di aprire correttamente i file di lavoro crittografati.