Non puoi fare nessuna di quelle cose tramite una libreria su cui fai linking statico o dinamico. Per fare l’esempio delle stringhe, il risultato nell’eseguibile compilato sarebbe che la stringa e’ visibile in chiaro, poi viene cifrata e poi decifrata di nuovo, ma rimane visibile dall’inizio.
I protettori professionali agiscono direttamente sull’eseguibile compilato, spesso estrapolando codice e dati per poi ricombinarli, protetti, in un nuovo eseguibile. Questa soluzione ovviamente non e’ affatto semplice ma nonostante il grande lavoro e’ la soluzione migliore. Se invece vuoi offuscare a livello di sorgente puo’ essere buono come esercizio, ma anche fare bene un parser di C non e’ facile, per fortuna ci sono librerie che possono facilitare il compito.
Per quanto riguarda il punto 2 ci sono diverse feature extra che hanno i packer professionali: anti debug, anti tampering, anti dump e infine alcuni hanno anche la più potente ed anche complessa: la virtualizzazione.
Il punto 3, serve principalmente a non fare capire il control flow da analisi statica, se per esempio apri l’exe nel disassembler e ad un certo punto prende un valore dallo stack, lo mette in rdx e fa call rdx e’ difficile capire dove andra’ a finire quella chiamata senza fare partire in debug e piazzare un breakpoint, in questo modo li costringi anche a bypassare l’antidebug. Questo lo ottieni usando bene i puntatori a funzioni e facendo giri extra al posto di chiamare direttamente la funzione.
I protettori professionali agiscono direttamente sull’eseguibile compilato, spesso estrapolando codice e dati per poi ricombinarli, protetti, in un nuovo eseguibile. Questa soluzione ovviamente non e’ affatto semplice ma nonostante il grande lavoro e’ la soluzione migliore. Se invece vuoi offuscare a livello di sorgente puo’ essere buono come esercizio, ma anche fare bene un parser di C non e’ facile, per fortuna ci sono librerie che possono facilitare il compito.
Per quanto riguarda il punto 2 ci sono diverse feature extra che hanno i packer professionali: anti debug, anti tampering, anti dump e infine alcuni hanno anche la più potente ed anche complessa: la virtualizzazione.
Il punto 3, serve principalmente a non fare capire il control flow da analisi statica, se per esempio apri l’exe nel disassembler e ad un certo punto prende un valore dallo stack, lo mette in rdx e fa call rdx e’ difficile capire dove andra’ a finire quella chiamata senza fare partire in debug e piazzare un breakpoint, in questo modo li costringi anche a bypassare l’antidebug. Questo lo ottieni usando bene i puntatori a funzioni e facendo giri extra al posto di chiamare direttamente la funzione.