2009-11-22 2 views
6

Recentemente ho trovato il termine Polymorphic Code e mi chiedevo se qualcuno potesse suggerire un motivo legittimo (vale a dire nel software legale e commerciale appropriato) per utilizzarlo in un programma per computer? I collegamenti con esempi del mondo reale sarebbero apprezzati!Utilizzo del codice polimorfico per scopi legittimi?

Prima qualcuno risponde, ci dice tutto circa i benefici di polimorfismo in programmazione orientata agli oggetti, si prega di leggere la seguente definizione per il codice polimorfico (tratto da Wikipedia):

"codice polimorfico è il codice che utilizza un motore polimorfico per mutare mantenendo l'algoritmo originale intatto, ovvero il codice cambia se stesso ogni volta che viene eseguito, ma la funzione del codice non cambia affatto. "

Grazie, MagicAndi.

Aggiornamento

Sintesi delle risposte finora:

  • Runtime ottimizzazione del codice originale
  • Assegnazione di un "DNA impronta digitale" per ogni singola copia di un'applicazione
  • offuscare un programma per impedire il reverse engineering

Mi è stato anche introdotto il termine "metamorphic code".

risposta

5

Ottimizzazione del runtime del codice originale, basata sulle statistiche delle prestazioni effettive raccolte durante l'esecuzione dell'applicazione nel suo ambiente reale e ingressi reali.

+0

Sami, stavo pensando alla programmazione genetica quando ho postato la domanda, ma non ho visto un collegamento immediato. La tua risposta è quel link! +1 – MagicAndi

0

Obfuscate un programma, ovvero impedite il reverse engineering: obiettivo è proteggere IP (Proprietà intellettuale).

+0

Ciao jldupont, un'interessante applicazione. +1 Quindi, in teoria, l'applicazione che usa questo dovrebbe girare, eseguire la sua funzione primaria e quindi rigenerare nuovamente il proprio eseguibile usando una nuova versione del codice ri-offuscato? Sei a conoscenza di eventuali applicazioni che fanno uso di questo metodo? – MagicAndi

+0

Non mi sono imbattuto in questa tecnica da un po 'di tempo nei tempi in cui ero in ingegneria inversa ..... ma non entriamo in quello che dovremmo fare. L'idea era la seguente: Blocco di codice che utilizza un algoritmo polimorfico per nascondere la routine di decrittografia per un altro blocco di codice "nascosto". Quest'ultimo conterrebbe alcuni "pezzi cruciali di codice" ma non dirò altro ;-) – jldupont

3

Il codice polimorfico è una cosa carina, ma la metamorfica è ancora più bella. Per gli usi legittimi: beh, non posso pensare a nient'altro che anti-cracking e protezione dalla copia. Guarda su vx.org.ua se non utilizzi il mondo reale (non quello legittimo)

+0

Il codice metamorfico è divertente. Ai tempi in cui la gente pensava che i computer acquisissero intelligenza! – wishi

+0

icefex, grazie per avermi risposto e per avermi fatto conoscere il termine metamorfico. +1. – MagicAndi

4

Digitally watermarking La musica è spesso utilizzata per determinare chi è responsabile della perdita di una traccia, ad esempio. Rende ogni copia della musica unica in modo che le copie possano essere ricondotte al proprietario originale, ma non influisce sulle qualità udibili della traccia.

Qualcosa di simile potrebbe essere fatto per il software compilato eseguendo ogni singola copia tramite un polymorphic engine prima di distribuirlo. Quindi se una versione crackizzata di questo software viene rilasciata su Internet, lo sviluppatore potrebbe essere in grado di dire chi lo ha infranto cercando varianti specifiche prodotte dal motore polimorfico (una sorta di test del DNA). Per quanto ne so, questa tecnica non è mai stata utilizzata nella pratica.

Non è esattamente quello che stavi cercando, immagino, dal momento che il motore polimorfico non è distribuito con il codice, ma penso che sia il più vicino a un uso aziendale legittimo che troverai per questo tipo di tecnica.

+0

Mark, applicazione molto interessante; soprattutto se combinato con la risposta di jldupont - una specifica offuscazione e watermark per ogni versione digitale di un'applicazione. Nello specifico, per portare ulteriormente l'analogia del DNA, se si potesse identificare da quale versione discendesse una particolare istanza dell'applicazione. – MagicAndi

+0

Inoltre, anche +1! – MagicAndi

+0

+1. Sembra che questo possa essere banalmente superato semplicemente eseguendo il motore polimorfico sul software una seconda volta ... ma è quello che succede quando ti unisci a qualsiasi corsa agli armamenti. ;) – ojrac

1

Il codice Polymorph può essere utilizzato per offuscare algoritmi deboli o proprietari, che possono utilizzare la crittografia e. g .. Ci sono molti usi "legittimi" per quello. Il termine legittimo in questi giorni è piuttosto ristretto quando si parla di IT. I paradigmi di base dell'IT contengono sicurezza.Sia che si utilizzi shellcode polimorfico negli exploit o che si rilevi tale codice con uno scanner AV. Devi saperlo.

2

Come Sami notes, l'ottimizzazione al volo è un'eccellente applicazione del codice polimorfico. Un grande esempio di questo è il Fastest Fourier Transform in the West. Dispone di un numero di risolutori a sua disposizione, che combina con self-profiling per regolare i parametri del percorso del codice e del risolutore sulle esecuzioni successive. Il risultato è che il programma si ottimizza per l'ambiente di elaborazione, diventando più veloce con le corse successive!

Un'idea correlata che potrebbe essere di interesse è computational steering. Questa è la pratica di alterare il percorso di esecuzione di grandi simulazioni mentre la corsa procede, per concentrarsi su aree di interesse per il ricercatore. Lo scopo generale della simulazione non viene modificato, ma il ciclo di feedback agisce per ottimizzare il calcolo. In questo caso il codice eseguibile non viene riscritto esplicitamente, ma l'effetto dal punto di vista dell'utente è simile.

+0

ire_and_curses, grazie per l'esempio! +1 – MagicAndi