Salve a tutti! Sto lavorando ad un progettino per lo sviluppo di una libreria in C che fornisca una serie di operazioni per l'offuscamento di determinate parti del codice.
L'offuscamento del codice sarebbe destinato alla protezione della proprietà intellettuale, quindi per rendere più difficile debugging / reversing.
Ho fatto un po' di ricerche e finora ho in mente di implementare:
A questo punto avrei diverse domande.
L'offuscamento del codice sarebbe destinato alla protezione della proprietà intellettuale, quindi per rendere più difficile debugging / reversing.
Ho fatto un po' di ricerche e finora ho in mente di implementare:
- Offuscamento di puntatori;
- Offuscamento di chiamate a funzioni;
- Offuscamento di stringhe;
- Code flow obfuscation con automi per funzioni;
C:
#define ENCRYPT_STRING(str) ...
char* decrypt(char *);
int main(void) {
// viene salvata una stringa non in plaintext, così non sarà direttamente visibile nel file compilato
char* var = ENCRYPT_STRING("Stringa di prova");
// viene stampata la stringa "Stringa di prova", attraverso la funzione 'decrypt' riusciamo a risalire alla stringa originale
printf("%d\n", decrypt(var));
return 0;
}
A questo punto avrei diverse domande.
- Ha senso / è possiible, secondo voi, implementare questo tipo di funzionalità attraverso una libreria in C o sarebbe meglio agire direttamente sul codice sorgente attraverso uno script che con un parser fa le modifiche al codice? Come viene fatto di solito l'offuscamento a livello 'professionale'?;
- Ci sono altre tecniche che mi consigliate di guardare oltre a quelle che ho già descritto? Sono un novizio in questo campo e sto cercando di raccogliere più informazioni possibili;
- Per quanto riguarda l'offuscamento dei puntatori e delle chiamate a funzioni, non mi è chiarissimo ne il perché farlo, ne la sua possibile implementazione. Non ho trovato molta documentazione (probabilmente non ho cercato con le keyword giuste) e ho ancora molti dubbi. Avete qualche lettura da consigliarmi?