Packer (informatica): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
|||
Riga 7:
Il loader, una volta eseguito, eseguirà quindi le operazioni necessarie a ripristinare il codice originale e gli cederà il controllo.
==Tecniche
Le tecniche
In particolare, disassembler come [[IDA pro]] riescono a riconoscere la presenza di un packer e permettono un disassembling selettivo del codice (l'utente decide cosa disassemblare e cosa no).
Le tecniche si possono dividere in 2 macro categorie: tecniche anti-debug e tecniche anti-disassembly(anche se a volte la distinzione non è così netta).
Le tecniche anti-debug sono tecniche volte ad impedire il debug dell'applicativo tentando, ad esempio, di rilevare se un debug è in corso.
Le tecniche anti-disassembly sono tecniche volte a far perdere l'allineamento al disassembler per fare in modo di camuffare le istruzioni macchina derivanti da tale processo di decodifica.
===Junk Code===
Il junk code è una tecnica che consiste nel mischiare dati e codice insieme. Questa tecnica ha lo scopo di far perdere l'allineamento al disassembler che tenterà di decodificare dei dati (e quindi non delle istruzioni). La tecnica usata dai disassembler più avanzati è quella di considerare "dati" tutto quello che, nel corso del programma, non verrà mai eseguito (anche se spesso non è molto facile determinarlo a priori a causa degli [[packer#Opaque Predicates|opaque predicates]]).
Il junk code è facilmente identificabile anche da un essere umano, perché la sua decodifica di solito produce:
* errore, il codice non corrisponde a nessun opcode. In questo caso la presenza di junk code è palese.
|