Domanda:
Crittografia del testo in file binari
Mellowcandle
2013-03-28 21:55:17 UTC
view on stackexchange narkive permalink

Le stringhe di testo vengono solitamente lette facilmente in un file binario utilizzando qualsiasi editor che supporti la codifica ASCII di valori esadecimali. Questi frammenti di testo possono essere facilmente studiati e modificati da un tecnico inverso.

Quali opzioni ha uno sviluppatore per crittografare questi frammenti di testo e decrittografarli, in runtime?

Una risposta:
#1
+8
QAZ
2013-03-28 22:34:50 UTC
view on stackexchange narkive permalink

Alcune opzioni che possono o meno essere applicabili a seconda delle tue esigenze:

  1. Evita di usare stringhe per far trapelare informazioni interessanti quando possibile. Ad esempio, se si utilizzano stringhe per visualizzare informazioni di errore o informazioni di registrazione, ciò può fornire a qualsiasi reverse engineering dettagli preziosi su ciò che potrebbe accadere nella propria applicazione. Sostituisci invece queste stringhe con codici di errore numerici.

  2. Oscura tutte le stringhe con un qualche tipo di algoritmo simmetrico come una semplice routine XOR o un algoritmo crittografico come AES. Ciò impedirà che la stringa venga scoperta durante un esame casuale del tuo binario. Dico "offuscare" poiché presumibilmente memorizzerai la chiave crypto / xor nel tuo binario. Qualsiasi reverse engineer che si sforzi un po 'di più recupererà sicuramente le stringhe offuscate.

  3. Crittografa tutte le stringhe (fai in modo che tutte le stringhe vengano collegate in una sezione separata nel tuo eseguibile e crittografa questa sezione) e memorizza la chiave di decrittazione al di fuori del tuo binario. È possibile memorizzare la chiave in remoto e limitare l'accesso lato server ove possibile. Quindi, se un reverse engineer ottiene il tuo binario, potrebbe non essere in grado di accedere alla chiave. La chiave di decrittografia potrebbe anche essere generata dinamicamente sul computer degli utenti in base a diversi fattori prevedibili noti su quella macchina degli utenti, consentendo essenzialmente di decrittografare i dati crittografati solo quando vengono eseguiti su questa specifica macchina (o tipo di macchina). Questa tecnica è stata utilizzata dal malware governativo per crittografare i payload per obiettivi specifici (se riesco a ricordare il collegamento al documento in cui ho letto questo aggiornerò la risposta).

  4. Ottieni creatività , archivia tutte le stringhe in una lingua straniera e quindi in fase di esecuzione utilizza un servizio di traduzione online per tradurre la stringa nella tua lingua madre prevista. Questo ovviamente non è molto pratico.

Ovviamente se le tue stringhe vengono decodificate / decifrate in fase di esecuzione, un reverse engineer potrebbe semplicemente scaricare il processo dalla memoria per vedere le stringhe. Per questo motivo potrebbe essere meglio decodificare / decifrare singole stringhe solo quando necessario (possibilmente archiviare la stringa decodificata in una posizione temporanea e azzerarla dopo l'uso).

Vedere [questa domanda sullo stackoverflow] (http://stackoverflow.com/questions/3785582/how-to-write-a-password-safe-class) per le tecniche che proteggono le stringhe non crittografate dal dump dalla memoria.
+1 per "diventa creativo". Il modo migliore per contrastare i tentativi di comprendere il programma è utilizzare tecniche non documentate nei siti di domande e risposte online ...


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...