Zoom Icon

Glossary

From UIC Archive


I reverser posseggono un vocabolario fatto di termini tecnici e gergali con i quali si impara col tempo ad aver dimestichezza. Questo dizionario vorrebbe essere una guida di riferimento per newbies e non. Ovviamente sarebbe impensabile anche solo immaginare di racchiudere tutto il gergo e la terminologia adottati, peraltro in continua evoluzione.

I termini riportati fanno parte di diversi ambiti (soprattutto reversing, ma anche assembly, hacking, sicurezza, crittanalisi, IRC).


Contents
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

A

Antidebug

Artificio o stratagemma volto ad impedire (o comunque rendere più difficile) il debugging di un programma, interferendo talvolta con l'attività del debugger, o rilevandone la presenza, ecc.
Vedi anche: Debug, Debugger, Bogus opcodes

Antidebugger

v. Antidebug.

Antidisasm

Trucco utilizzato per impedire di disassemblare un programma, o talvolta addirittura per mandare in crash il disassembler.

API

E' l'acronimo di Application Programming Interface e sta ad indicare un gruppo di funzioni messe a disposizione del programmatore per svolgere una determinata funzione. Un esempio sono le funzioni messe a disposizione da Windows per creare una finestra (CreateWindow), per creare un box con un messaggio (MessageBox) o per leggere il contenuto di una editbox (GetWindowText).

ARP poisoning

Tecnica di attacco che consente di intercettare il traffico destinato ad un host fingendo di essere il destinatario, sfruttando una risposta errata all'ARP request. In particolare, nel caso di una rete locale, quando un certo computer A deve contattare un computer B con indirizzo ip 192.168.x.y, invia un ARP Request a tutti i computer della rete per sapere l'indirizzo MAC corrispondente. Se il computer C risponde alla richiesta fornendo il proprio indirizzo MAC, tutti i pacchetti destinati a B saranno intercettati dal computer C, che potrà dialogare con A fingendo di essere B.

ARP spoofing

v. ARP Poisoning.

Asm

Abbreviazione di Assembly.

Assemblatore

v. Assembler.

Assembler

Programma che converte un listato in linguaggio assembly in linguaggio macchina che può essere compreso ed eseguito dal processore. Per ogni linguaggio assembly (specifico per un processore) viene scritto l'apposito assemblatore. Alcuni tra gli assembler più comuni per la famiglia di processori Intel dall'x86 ai processori IA-32 (attualmente i più diffusi) sono:

Assemblatore

v. Assembler.

Assembly

Linguaggio di programmazione a basso livello, caratterizzato da una corrispondenza pressoché assoluta tra le istruzioni ed il linguaggio macchina dello specifico processore. Il linguaggio assembly (spesso chiamato, impropriamente, assembler) è in assoluto il più potente (i programmi in tutti gli altri linguaggi, in ultima analisi, si possono ricondurre sempre a codice assembly), ma proprio per la sua vicinanza all'hardware non è certo caratterizzato da facilità d'uso, e i programmi scritti in assembly non sono portabili verso processori differenti (che posseggono un linguaggio assembly differente). L'utilità di programmare in assembler è dovuta al fatto che ciò consente di avere una comprensione più diretta del funzionamento del processore; inoltre è indubbio che un buon programma scritto in assembly può essere ottimizzato molto di più rispetto agli altri linguaggi. Per questo accade spesso che alcune parti critiche di un programma vengano scritte in assembly per motivi di performance.
Vedi anche: Assembler, Disassembler, Linguaggio macchina

Auto-keygenerator

Programma che, dopo opportune modifiche, è stato reso Keygenerator di se stesso; in genere si fa in modo di sostituire alla beggar off una finestra che contiene il seriale corretto. Creare un auto-keygenerator è a volte più facile che scrivere un keygen da zero, perché si può sfruttare il codice del programma.

B

Beggar off

Messaggio con cui un programma segnala un errore nella procedura di registrazione (es.: seriale errato).

Backtracing

Tecnica consistente nel risalire il codice per trovare da dove si arriva ad una determinata parte di un programma. Per esempio, si può spesso partire dal codice che visualizza la beggar off (eventualmente trovata tramite un breakpoint) e andare all'indietro nel codice per trovare la routine di controllo del seriale di un programma.

Bias

Il bias (in matematica, economia e scienze affini) è un difetto sistematico sempre presente in una data misura, in un dato risultato etc... Dire che un risultato è biased significa che è stato viziato da un determinato errore fisso. Quando ci si riferisce ad un pensiero (avere un'idea biased) normalmente si indica un pensiero/idea che è stata influenzata da determinati fattori. Ad esempio un programmatore amante e sostenitore di un linguaggio sarà biased nel trattare l'argomento, perché inevitabilmente influenzato da svariati fattori che probabilmente lo renderanno meno obiettivo nel suo giudizio (ma questo è solo un esempio).

Big endian

Schema di rappresentazione dei bytes (Endianness) dal più significativo al meno significativo. Ad esempio, la DWORD 0x11223344 è rappresentata in memoria come
11 22 33 44
Il Big endian è usato, ad esempio, nei processori Motorola ed è lo standard nei protocolli di rete. I processori Intel utilizzano invece lo standard Little endian.

Bogus opcodes

Istruzioni o frammenti di istruzioni di disturbo per rendere meno comprensibile il disassemblato e nascondere il codice durante la fase di debugging.

Botnet

A botnet is a network of computers that are somehow controlled from a single control center—a command-and- control (C&C) server. A standard botnet comprises a C&C server and bots or zombies. Botnets can, however, exist without a C&C server. In this case, a botnet uses a peer-to- peer (P2P) architecture. Commands are transmitted from one bot to another, making botnet takedown substantially more complicated to perform.


Breakpoint

Indirizzo di codice in cui si vuole che il debugger blocchi l'esecuzione del debuggee per consentire l'analisi del codice.

Brute force

Algoritmo che cerca di trovare la soluzione di un problema provando tutte le combinazioni possibili. Il problema del bruteforcing è che spesso il numero di combinazioni è troppo elevato per poter completare il controllo in tempi accettabili, per cui si cerca di ridurre al minimo indispensabile le combinazioni da controllare.

Brute forcer

Programma che esegue un algoritmo brute force.

Buffer overflow

Scrittura non prevista degli indirizzi di memoria successivi alla fine di un buffer, che avviene solitamente quando la stringa in input è più grande del buffer che la dovrà contenere e il programma non effettua un controllo sulla lunghezza dell'input. Spesso è possibile interferire con il programma sovrascrivendo l'indirizzo di ritorno (return address) presente nello stack, permettendo così l'esecuzione di codice arbitrario. Il buffer overflow è indubbiamente la vulnerabilità più nota e più sfruttata dagli hacker.

C

CD-Check

Controllo di originalità del CD, volto ad evitarne la copia illegale.

Checksum

Controllo di integrità del codice o dei dati di un programma. Il termine indica propriamente il controllo della somma dei bytes di ciò che si vuole controllare, ma viene usato per estensione per indicare qualunque tipo di controllo che sfrutti anche altre operazioni. Viene utilizzato dai programmi per controllare che non siano stati infettati da virus o, più spesso, per evitare la manomissione (patching) del codice.

Cifratura

Processo con cui si rende un messaggio illeggibile a persone indesiderate, tipicamente a chi non possiede una determinata chiave, per scopi di segretezza o privacy. La cifratura avviene tramite un algoritmo crittografico.
Vedi anche: Decifratura.

Compilatore

Qualunque programma che converta codice da un linguaggio di programmazione ad un altro; tipicamente i compilatori convertono codice da un linguaggio ad alto livello (es.: C/C++/C#, Java , Basic, Pascal) ad un linguaggio a basso livello (in assembly o direttamente in linguaggio macchina). I compilatori sono formati da diverse parti: il lexer, il parser, l'analizzatore semantico, il generatore del codice ed eventualmente l'ottimizzatore; ciascuna ovviamente comprende parecchie sottofasi. Solitamente, tuttavia, il compilatore non produce ancora un file eseguibile, ma produce un object file, che deve ancora attraversare la fase di linking prima di diventare un file eseguibile.

Crack

Programma scritto per aggirare una protezione; tipicamente un crack (o una crack, poiché il termine è usato sia al maschile che al femminile) si limita a modificare alcuni bytes del programma vittima per far sì che il programma si comporti come se fosse registrato. Ciò non toglie che alcuni crack possano utilizzare metodi più sofisticati (per esempio una memory patch).
Vedi anche: Cracker, Cracking, Key generator, Patch

CRC

Cyclic Redundancy Check, controllo di ridondanza ciclico. E' un algoritmo utilizzato per il controllo di integrita' sui dati. Si tratta di una funzione matematica y = f(x), dove y varia al variare del gruppo x di dati ingresso. Si tratta di una funzione di hashing abbastanza rapida da calcolare, e che garantisce un output differente anche se, tra due insiemi di dati in ingresso, esiste solo un bit di differenza.

CPU

Central Processing Unit, unita' di calcolo centrale ovvero: il processore di un computer.

Cracker

Propriamente, il termine indica il pirata informatico con scopi malefici, che possono variare dal vandalismo alle truffe informatiche. È scorretto confondere il termine con hacker, come invece i media hanno fatto frequentemente. Negli ultimi anni, tuttavia, il termine cracker ha preso ad indicare anche colui che "cracka" i programmi commerciali eludendone i meccanismi di protezione, producendone talvolta (ma non necessariamente) i rispettivi crack.
Vedi anche: Hacker, Cracking

Cracking

Propriamente, il termine indica l'uso criminoso delle tecniche dell'hacking. Oggi, però, il termine è passato molto più spesso ad indicare l'arte dello sconfiggere le protezioni dei programmi, eventualmente producendone un crack. Per raggiungere lo scopo si utilizzano diversi programmi, come debugger, disassembler, Hex editor e così via. L'eliminazione della protezione avviene in genere modificando qualche byte del programma (patching), ma non richiede in genere (ma non mancano le eccezioni) un'analisi troppo approfondita del codice.
Vedi anche: Hacker, Cracker, Crack, Reverse engineering

CrackMe

Programma scritto appositamente per essere crackato/reversato. Tipicamente l'unica funzionalità del crackme è proprio la sua protezione, che può prendere a modello protezioni esistenti (come quelle dei programmi commerciali) o più frequentemente proporre qualcosa di nuovo ed originale. I crackme sono scritti da reverser e si indirizzano ad altri reverser, ed hanno scopi puramente didattici.
Vedi anche: ReverseMe
Collegamenti: Sezione crackmes, http://www.crackmes.de

Criptazione

Vedi Cifratura.

Critt-...

v. Cript-...

Crittanalisi

Studio dei metodi volti ad ottenere informazioni criptate senza possedere quell'informazione segreta che possiede solo chi è autorizzato. Crittografi e crittanalisti sono tradizionalmente in "contesa": l'uno per cercare di rendere sicuri i propri algoritmi di crittazione, l'altro per trovare il modo di aggirarli.
Vedi anche: Crittografia, Decrittazione, Crittologia.

Crittazione

Il termine e' inesatto, quello corretto e': Cifratura.

Crittografia

Dal greco kryptós, nascosto, e gráphein, scrivere. Indica lo studio delle tecniche per convertire l'informazione in forme incomprensibili per chi non abbia un qualche tipo di conoscenza segreta.
Vedi anche: Cifratura, Decifratura, Crittologia.

Crittologia

Scienza che comprende l'insieme della crittografia e della crittanalisi.

Crypter

Programma fortemente analogo ad un packer, con l'unica differenza che non vi è nessuna compressione. Esso ha perciò solo fini di protezione del codice.

D

DDoS

Distributed Denial of Service.

Debug

Il termine indica solitamente la fase della programmazione in cui si cercano (testing) e si eliminano gli eventuali (ma più o meno inevitabili) errori del codice; solitamente viene effettuata attraverso un debugger, che consente di analizzare il flusso del programma, controllare lo stato dei registri e delle variabili, inserire breakpoint, etc. Il debugging viene utilizzato anche per scopi di reversing e di cracking.

Debuggee

Programma sottoposto all'analisi di un debugger.

Debugger

Programma che consente di effettuare il debug del codice. Vi sono diversi tipi di debugger, che si dividono sostanzialmente in user mode e kernel mode. I primi sono normali applicazioni, che possono effettuare il debug di altri processi sfruttando il supporto del sistema operativo. I secondi risiedono invece a livello del kernel, di cui generalmente consentono anche il debugging (a differenza dei debugger user mode). Tra i debugger user mode il più utilizzato dai reverser è attualmente OllyDbg, mentre in kernel mode viene usato soprattutto SoftICE.
Collegamenti: Disassemblers Debuggers

Decifratura

Processo inverso della cifratura, volto a ottenere, dal messaggio criptato, il messaggio originale in chiaro.

Decompilatore

  1. Programma che esegue l'operazione inversa rispetto al compilatore, ossia prende in input un file eseguibile (o comunque compilato) e restituisce un sorgente quanto più possibile simile al sorgente originario. A differenza di linguaggi a basso livello come l'assembly (nel qual caso si parla più correttamente di disassembler), la decompilazione non è sempre possibile in quanto il passaggio da un linguaggio ad alto livello ad uno a più basso livello può non essere reversibile.
Tra i decompilatori più comuni vi sono il JAD (Java DeCompiler) e il DeDe (Delphi Decompiler).
Vedi anche: Compilatore, Disassembler
Collegamenti: Disassemblers Debuggers

Decritt-...

v. Decifr-...

Decrittazione

Vedi Decifratura

Defacement

Azione dimostrativa di un defacer, consistente nell'alterazione della home page di un sito in cui è riuscito ad entrare. È un atteggiamento contrario all'etica hacker.

Defacer

Cracker che mira al defacement.

Denial of Service

Tipologia di attacco che mira ad ottenere una mancata erogazione di un servizio inondando un sistema o una rete con una quantità di richieste maggiore di quella che potrebbe essere gestita. Per accentuare la portata di questo attacco e diminuire la probabilità di essere rintracciabili vengono effettuati anche attacchi di tipo distributed denial of service (DDoS): viene preventivamente infettato con un trojan o un worm un numero elevato di computer collegati ad internet, dopodiché parte in contemporanea l'attacco distribuito. I DDoS sono attualmente uno degli attacchi più frequenti da parte dei cracker, facilitati dalla presenza in rete di molti computer praticamente privi di protezione e, soprattutto, con proprietari che non sono in grado di gestirli correttamente.

Disasm

Abbreviazione di disassembler o di disassemblato.

Disassemblato

Listato di codice fornito da un disassembler.

Disassemblatore

v. disassembler.

Disassembler

Programma che converte in assembly codice in linguaggio macchina, fornendo eventualmente altre funzionalità di analisi del codice utili ai fini del reversing. I disassembler più usati in ambiente windows sono IDA (Interactive DisAssembler) e Win32Dasm.
Vedi anche: Assembler, Decompilatore, Debugger.
Collegamenti: Disassemblers Debuggers

Dongle

Chiave hardware che viene connessa ad un computer (in genere tramite porta seriale, parallela o, più recentemente, USB) utilizzata come chiave per l'autenticazione. In altre parole, il programma controlla che la dongle sia presente e, in caso contrario, interrompe la sua esecuzione. Spesso la dongle contiene una ROM con parti di codice essenziali per l'esecuzione del programma, evitando così che si possa facilmente effettuarne il cracking. Le dongle vengono tipicamente utilizzate solo da programmi particolarmente costosi.

DoS

v. Denial of Service.

Dump

Stampa o salvataggio dello stato della memoria o di dati di altro genere.

Dumpare

Effettuare il dump di qualcosa.

Dumper

Programma che effettua il dump di qualcosa.

E

Editor esadecimale

v. Hex editor.

Endianness

Termine per indicare l'ordine di rappresentazione dei byte in memoria. Si distinguono classicamente gli schemi Little endian (come la notazione Intel, dal byte meno significativo al più significativo) e Big endian (dal byte più significativo al meno significativo).

Entry point

Indirizzo dell'istruzione da cui inizia l'esecuzione di un file eseguibile o altro blocco di codice.

Exploit

Codice dimostrativo che utilizza a proprio vantaggio una vulnerabilità di un programma o un sistema operativo.

F

Flood

Parola inglese che, letteralmente, significa inondazione. Nel gergo di IRC, per flood si intendono diverse tecniche volte a provocare la disconnessione di un altro utente o rallentarla, oppure a infastidire utenti o interi canali (per esempio, scrivendo continuamente grandi quantità di cose - in genere tramite script appositamente scritti - o cambiando continuamente nickname, etc). Ovviamente questo tipo di comportamento è scorretto e può portare al ban dal canale o, addirittura, a provvedimenti degli amministratori.

Format string attack

Tipologia di attacco che sfrutta una vulnerabilità delle funzioni standard del linguaggio C per la formattazione di stringhe, come printf() e analoghe. Se per stampare una stringa viene usato un comando come printf(mystring) anziché la forma corretta printf("%s", mystring), dal momento che il primo parametro è interpretato come stringa di formato, è possibile utilizzare stringhe di formato come "%x" o "%s" per leggere le locazioni dello stack e, ancor più grave, con l'escape "%n" è possibile scrivere dati arbitrari in locazioni arbitrarie, con ovvie conseguenze per la sicurezza del codice.
Vedi anche: Buffer overflow

G

H

Hacker

Termine di adozione relativamente recente, il cui significato varia sensibilmente in base al contesto e, quindi, di cui è difficile dare una definizione onnicomprensiva. Nei media, il termine è stato frequentemente adottato con l'accezione negativa di "pirata informatico con scopi criminali", che possono variare dal semplice vandalismo alle truffe informatiche; il termine appropriato per questa accezione sarebbe cracker. In senso positivo (e forse nel suo senso più proprio), hacker è un programmatore esperto (in generale o in un ambito più specifico), con un'ampia conoscenza del suo campo, di cui, a differenza dell'utente medio, vuole comprendere tutti i dettagli. Per estensione, si chiama talvolta hacker un esperto di qualsiasi altro campo, anche diverso dall'informatica. Hacker è anche l'esperto di sicurezza, che conosce il funzionamento dei sistemi di sicurezza e le tecniche per aggirarli, ma le usa solo per curiosità e per il piacere di conoscere (rispettando la codificata etica hacker).
Vedi anche: Hacking, Cracker, Reverse engineer, Phreaker.

Hacking

Il termine ha numerose sfumature di significato. In generale, indica la conoscenza profonda di un sistema, che può essere utilizzata a proprio vantaggio. Per esempio, nel caso del software, si può intervenire per rimuovere i limiti di funzionamento (vedi cracking), oppure modificare o addirittura aggiungere funzionalità (vedi reverse engineering). Talvolta si può fare qualcosa di analogo anche nell'hardware, eliminando dei limiti o aumentando le prestazioni (pratica che, senza le dovute precauzioni, può portare al suo danneggiamento), come nel caso dell'overclocking. L'uso più comune del termine hacking è però quello legato alla sicurezza informatica, cioè l'insieme delle tecniche per trovare e sfruttare a proprio vantaggio i bug dei sistemi di sicurezza, per ottenere l'accesso non autorizzato ad una rete o un web server. L'hacker non sfrutta questa possibilità per guadagnare qualcosa in maniera fraudolenta o danneggiare l'amministratore o il proprietario del server, né per carpire password o dati personali; anzi spesso avverte il responsabile della sicurezza della presenza di vulnerabilità. L'uso criminoso delle tecniche dell'hacking è definito cracking.
Vedi anche: Reverse engineering, Cracking, Phreaking.

Hash

Hash, hashing, funzione di hash. Si tratta di una particolare funzione matematica non invertibile, che viene utilizzata per trasformare una serie di dati in ingresso, in una stringa di lunghezza fissa. Normalmente la stringa e' sempre diversa al variare dei dati in ingresso, motivo per cui queste funzioni (MD5, SHA1, RIPEMD...) vengono ampiamente utilizzate per ottenere una firma univoca da un programma, testo, buffer dati etc...

Heap

  1. Albero completo (eventualmente ad eccezione dell'ultimo livello, che deve essere completo solo da sinistra verso destra) dove ogni nodo ha una chiave maggiore del suo genitore (min-heap) o, viceversa, ogni nodo ha una chiave minore del suo genitore (max-heap). Gli heap, nella loro forma di base, consentono l'estrazione del minimo/massimo in tempo O(1), la sua eliminazione e l'inserimento di un nuovo elemento in tempo O(log n). Sono una struttura dati fondamentale per molti algoritmi, tra cui l'heapsort.
  2. In particolare, nell'ambito dei sistemi operativi, si chiama heap una zona di memoria (in genere almeno una per ogni thread) riservata alle allocazioni dinamiche.

Heap overflow

Buffer overflow all'interno dei dati dell'heap.

Hex editor

Detto anche, in italiano, editor esadecimale. Programma che consente di modificare file binari; a differenza di un comune editor di testo, il contenuto del file non viene in alcun modo interpretato (invece un normale programma di testo come il Notepad interpreta i bytes come caratteri ASCII). Un editor esadecimale visualizza ogni byte del file come un numero di due cifre esadecimali. Gli hex editor sono necessari per modificare qualunque file binario (per esempio un file eseguibile) senza danneggiarne il contenuto come accadrebbe con un editor testuale.

Honeypot

A honeypot is a trap set to detect, deflect, or in some manner counteract attempts at unauthorized use of information systems. Generally it consists of a computer, data, or a network site that appears to be part of a network, but is actually isolated and monitored, and which seems to contain information or a resource of value to attackers.

I

Interrupt

Interruzione del codice per eseguire una certa routine di sistema. Gli interrupt possono essere provocati da interruzioni hardware o da esplicite chiamate software (tramite l'istruzione INT), nel qual caso servono in genere per delle chiamate a servizi di sistema o della BIOS. Sono così chiamati perché non possono essere messi in attesa, e il codice correntemente eseguito viene interrotto fino al termine della procedura dell'interrupt handler, che si chiude in genere con l'istruzione IRET. Gli interrupt sono correlati anche ai meccanismi di Exception handling.

IEEE

Institute of Electrical and Electronics Engineers, un instituto no-profit, composto da una rappresentanza di ingegneri provenienti da tutto il mondo e da tutte le maggiori aziende. Il loro scopo è quello di studiare (e creare) gli standard per l'avanzamento delle nuove tecnologie.

J

JMP

Istruzione di salto incondizionato, che trasferisce il controllo ad un altro punto del programma. L'opcode delle comuni istruzioni di salto incondizionato (nel caso di short jumps) è 0xEB.

Jungle

Tipo di protezione in cui il programmatore cerca di disorientare il cracker nascondendo il codice di controllo del seriale o altre parti critiche in mezzo a quantità immani di codice più o meno inutile.

K

Keyfile

File contenente la chiave di registrazione di un programma. Può essere generato dal programma dopo aver inserito il seriale valido oppure può essere spedito dalla casa produttrice del software in oggetto.

Keygen

v. Key generator.

Key generator

Generatore di chiavi per la registrazione di un programma. Un keygen richiede (se è il caso) gli stessi dati della finestra di registrazione del programma vittima, e genera una chiave valida corrispondente ai dati inseriti. Scrivere un keygen, paragonato alla produzione di un crack, è considerato in genere un modo più "elegante" di superare una protezione, dal momento che richiede tipicamente un reversing completo dei meccanismi di controllo.
Vedi anche: Crack

L

Lamer

Lamer (storpiato spesso in innumerevoli modi, come lame, lamah o leim) è un termine dispregiativo utilizzato su IRC, Usenet o nelle mailing list (ma ormai diffuso in tutto l'ambito informatico), che possiede una moltitudine di sfumature di significato. Lamer è chi sa fare poco o nulla ma si crede un genio, e magari cerca anche di convincere gli altri di esserlo e per questo si mette in mostra in tutti i modi possibili; lamer è chi si vanta di essere un hacker ma in realtà si limita a giocare con gli script e i programmi scaricati da internet (script kiddie); lamer è chi non rispetta le regole che solitamente le comunità informatiche on-line si auto-impongono per facilitare la comunicazione; lamer è chi posta messaggi inutili; lamer è chi è irrimediabilmente incapace ed inetto. Per estensione, vengono definiti lamer tutti coloro che fanno abitualmente qualcosa di fastidioso e irrispettoso nei confronti degli altri. Va ben distinto dal newbie.

Linguaggio macchina

Linguaggio di programmazione a bassissimo livello; è il codice binario direttamente comprensibile dal processore (senza cioè passare per un compilatore, interprete o assembler). È caratterizzato da una corrispondenza diretta con il linguaggio assembly. Non è generalmente necessaria la conoscenza del linguaggio macchina, eccetto (ovviamente) per alcune applicazioni specifiche come la programmazione di assemblatori o disassemblatori.
Vedi anche: Assembly, Assembler, Disassembler, Opcode

Linker

Programma che prende in input uno o più object file generati dal compilatore e genera un unico file eseguibile.

Little endian

Schema di rappresentazione dei bytes (Endianness) dal meno significativo al più significativo. Ad esempio, la dword 0x11223344 è rappresentata in memoria come
44 33 22 11
Un vantaggio del little endian è che la word meno significativa (0x3344) e il byte meno significativo (0x44) hanno lo stesso offset in memoria della dword intera.
Il little endian è la convenzione adottata nei processori Intel, ed è per questo che è chiamato anche notazione Intel.
Vedi anche: Big endian.

M

Memory patching

Tecnica consistente nell'effettuazione di modifiche al codice dopo il caricamento in memoria dello stesso. Viene utilizzata in particolare con i programmi packati/crittati (v. packer e crypter). Solitamente si possono seguire due vie: o si modifica il codice del programma vittima in modo che, una volta che ha effettuato la decrittazione, effettui da solo le modifiche sul suo codice; oppure si utilizza un launcher o loader che esegua il programma, attenda che avvenga la decrittazione, quindi effettui le modifiche in memoria.

Modalità protetta

v. Protected mode.

Modalità reale

v. Real mode.

N

Nag

v. Nag screen

Nag screen

Finestra che, in uno shareware non registrato, compare all'apertura e/o alla chiusura del programma (talvolta anche durante l'utilizzo del programma, dopo determinati intervalli di tempo o in corrispondenza di determinate azioni dell'utilizzatore), invitando l'utente ad effettuare la registrazione. Spesso si è per giunta costretti ad attendere alcuni secondi prima di poterla chiudere. L'obiettivo delle nag screen è quello di annoiare/infastidire l'utente spingendolo così alla registrazione del programma.

Newbie

Sinonimo di principiante, neofita. A differenza del lamer, il newbie rispetta le regole e ha voglia di imparare.

NOP

Acronimo di No OPeration. È un'istruzione del set x86 con la specifica funzione di non far nulla. Il suo opcode è 0x90.
Vedi anche: Noppare

Noppare

In gergo, sostituire una o più istruzioni con l'istruzione NOP (ripetuta un numero di volte pari alla lunghezza complessiva della/e istruzione/i iniziali) allo scopo di impedire al programma di fare qualcosa o variarne il flusso di esecuzione. Per esempio si può noppare un'istruzione di salto condizionato per far in modo che il salto non venga mai eseguito.

Notazione Intel

Nome comune per la notazione Little endian, cioè con i byte invertiti, che è lo standard dei processori Intel.

O

Offset

  1. In generale, sinonimo di indirizzo o, più precisamente, il numero intero che indica la distanza dall'inizio di un determinato oggetto (una stringa, una file, un segmento, etc).
  2. Nello specifico dei processori, la seconda delle due parti di cui è composto un indirizzo logico completo, della forma SEGMENTO:OFFSET. Esso deve essere sommato all'indirizzo del base address del segmento per ottenere un indirizzo lineare.

Opcode

Traduzione in linguaggio macchina di una istruzione in linguaggio assembly. Talvolta per opcode si intende solo la parte del codice esadecimale di un'istruzione che indica al processore, appunto, di quale istruzione si tratta. Ad esempio, l'istruzione "ADD EAX, EDX" si traduce in linguaggio macchina come 03C2. In questo caso, l'opcode sarebbe 03, che indica che si tratta del'istruzione ADD con due registri a 32 bit, mentre C2 indica quali sono gli operandi dell'istruzione. La differenza è comunque molto sottile.

P

Packer

Programma compressore di file eseguibili e, in genere, protettore. I packer aggiungono generalmente una sezione di codice che, eseguita prima del codice effettivo del programma, si occupa di decomprimere/decrittare il file. I packer sufficientemente evoluti contengono una serie di accorgimenti volti a rendere quanto più difficile è possibile l'unpacking del programma, come trick anti-debugger o anti-dumper, nonché tecniche volte ad alterare il codice (o più spesso alcune sezioni del PE, come la Import Table) del programma per fare in modo che un eventuale dump del codice generi un eseguibile corrotto e quindi non funzionante. Vi sono numerosi packer, sia freeware che commerciali. Tra i più famosi citiamo Asprotect, Armadillo, Aspack, VBox, TheMida, PeLock, Petite, Thinstall, Neolite, Safedisc, Securom, Starforce, Laserlock.
Vedi anche: Unpacker, Unpacking

Patch

Programma che effettua delle modifiche (generalmente di piccola entità) nel codice di un altro programma. Lo scopo di una patch può variare dalla semplice rimozione di bug all'aggiunta/modifica di determinate funzionalità.
Vedi anche: Memory patching, Crack.

PE

v. Portable Executable.

Phreaker

Colui che pratica Phreaking.

Phreaking

Hacking telefonico (il termine nasce appunto dalla contrazione di phone hacking o forse phone breaking). Insieme di conoscenze e tecniche per sfruttare a proprio vantaggio i bug dei sistemi di telecomunicazione.

Portable Executable

Formato standard degli eseguibili in ambiente Windows, derivato dal Common Object File Format (COFF). Esso contiene tutte le informazioni necessarie al loader di Windows per caricare in memoria ed eventualmente eseguire il modulo. Oltre ai file exe, anche altri tipi di file come le dll, gli ocx o i sys sono in formato PE.

Processore

Vedi CPU.

Protected mode

Modalità protetta. Nell'architettura IA-32 e in quelle compatibili, è la modalità di esecuzione nativa del processore, che consente le massime prestazioni e in cui sono disponibili tutte le caratteristiche e le funzionalità del processore. In particolare, si distingue dalla modalità reale per la distinzione fra user e kernel tramite i 4 livelli di protezione (dal più privilegiato al meno privilegiato: ring0, ring1, ring2 e ring3) e per la presenza di meccanismi di paging.

Q

R

Real mode

Modalità reale. Modalità di esecuzione nativa nel processore Intel 8086, rimasta tale fino all'Intel386, in cui fu resa obsoleta dall'introduzione del protected mode.

Registro

Il registro è un'area di memoria che si trova all'interno della CPU. Le CPU Intel/AMD hanno 4 General Purpose Registers, ovvero Registri per utilizzi generici che sono: EAX, EBX, ECX, EDX sulle cpu a 32-bit. RAX, RBX, RCX, RDX sulle cpu a 64bit. Ogni registro ha una dimensione fissata di 32-bit (sulle cpu a 32-bit) o 64-bit (sulle cpu a 64-bit), non si tratta di memorie permanenti, vuol dire che i dati restano immagazzinati nel processore soltanto finché c'è corrente, ma si tratta di memoria estremamente veloci. Al loro interno si può scrivere un numero, o leggere un numero già presente in precedenza.

Remote Procedure Call

E' una tecnologia che consente di eseguire una funzione, da un processo chiamante, che verra' eseguita nell'address space di un processo che puo' anche trovarsi su un'altra macchina. In tal modo il programmatore potra' scrivere la proprie funzioni senza doversi curare del fatto che verranno eseguite sulla macchina locale o remota.

Reversare

Effettuare il reverse engineering di un programma o altro codice informatico.

Reverse engineer

Detto anche reverser, chi pratica il reverse engineering.
Vedi anche: Cracker.

Reverse engineering

Citando Richard Stallman: "Reverse Engineering, in ogni campo dell'ingegneria, significa semplicemente analizzare una macchina che non hai costruito, per apprendere come è stata fatta. È una pratica legittima e accettata in tutti i campi dell'ingegneria". Si parla di reverse engineering anche nel caso in cui si effettuino modifiche ad un programma per migliorarne/ampliarne le funzionalità.
Vedi anche: Cracking.

ReverseMe

Tipo particolare di crackme in cui l'obiettivo non è quello di superare una protezione, ma si richiede di aggiungere/modificare determinate funzionalità secondo quanto richiesto dall'autore.
Vedi anche: CrackMe

Reverser

v. Reverse engineer.

Reversing

v. Reverse engineering.

Rootkit

A rootkit is a program that conceals certain elements (e.g., files, processes, Windows registry entries, memory locations, network connections, etc.) from other programs or a computer’s OS. Rootkits can hide processes, registry keys, and other evidence of the existence of malicious software in a computer.


RPC

v. Remote Procedure Call.

S

Script kiddie

Termine dispregiativo, che indica coloro che si pretendono hacker quando in realtà si limitano ad utilizzare (con nessuna o poche modifiche) strumenti o exploit scritti da altri, senza capirne realmente il funzionamento. Spesso gli script kiddies utilizzano quei programmi per effettuare azioni dimostrative (come i denial of service oppure i defacement), per mostrare la loro presunta bravura e pericolosità. I script kiddie sono considerati una delle peggiori categorie di lamer.

Segmento

La prima delle due parti di cui è composto un indirizzo logico completo, della forma SEGMENTO:OFFSET. Nell'IA32 in protected mode un segmento viene utilizzato tramite i Segment Registers (cioè CS, DS, ES, SS, FS e GS); essi contengono un segment selector che, tramite la GDT (Global Descriptor Table) o la LDT (Local Descriptor Table), viene tradotto in un indirizzo lineare che corrisponde all'inizio del segmento (base address); esso va sommato all'offset per ottenere un indirizzo lineare completo che, in mancanza di paging, corrisponde direttamente alla memoria fisica, altrimenti deve essere ulteriormente tradotto in un indirizzo fisico tramite i meccanismi di paging.
Vedi anche: Offset

SEH

Acronimo di Structured Exception Handler o Structured Exception Handling.

Self modifying code

Spesso abbreviato in SMC. Codice auto-modificante, cioè che modifica se stesso in qualche modo. L'SMC è utilizzato per vari scopi, e non è raro il suo utilizzo per la protezione di un software, allo scopo di rendere più difficile il debug o indurre il reverser in errore (specialmente quando egli si affida unicamente al listato del disassembler). L'uso dell'SMC è tuttavia fortemente sconsigliato quando sono importanti le prestazioni del codice, dal momento che inficia molti dei meccanismi di ottimizzazione del processore.

Serial fishing

Ricerca del seriale corretto per la registrazione di un programma, in genere tramite il reverse engineering della routine che controlla il seriale inserito dall'utente.

Serial phishing

v. Serial fishing

Shareware

Programma distribuito con qualche tipo di limitazione allo scopo di consentire all'utente finale di utilizzare il programma e valutarne l'utilità prima dell'acquisto. Solitamente è possibile inserire i dati forniti dai produttori dopo l'acquisto (es.: nome utente e serial, oppure un keyfile) per registrare il programma e sbloccarne tutte le funzionalità. Esistono diversi tipi di shareware: spesso alcune funzionalità critiche (come apertura e salvataggio di file) sono disabilitate, o un banner pubblicitario, oppure vi sono delle nag screen, o ancora si tratta di un time limit. Spesso, fra l'altro, le varie tipologie sono combinate insieme.

Shellcode

Spezzone di codice, solitamente scritto in assembly, che esegue una shell, consentendo ad un hacker di prendere il controllo del computer da remoto. Gli shellcode sono generalmente iniettati nella memoria della macchina vittima tramite lo sfruttamento di alcune vulnerabilità, come i buffer overflow (nello stack o nell'heap) o i format string attack.

Stack

  1. Area di memoria, puntata dal registro (E)SP e contenuta nel segmento SS, riservata solitamente per le variabili temporanee o per il passaggio di parametri alle funzioni. Lo stack ha una struttura di tipo LIFO (Last In First Out), intendendo con questa espressione il fatto che l'ultimo valore inserito (tramite l'istruzione PUSH) sarà il primo ad essere prelevato (con l'istruzione POP).
  2. In generale, uno stack è una struttura dati che supporta due operazioni: insert (o push) che inserisce un oggetto all'insieme; delete (o pop) che elimina l'oggetto dell'insieme che è stato inserito più recentemente.

Steganografia

Dal greco stèganos, nascosto e gràfein, scrivere. Tecnica consistente nel nascondere un messaggio all'interno di un altro, facendo in modo che un osservatore esterno possa riconoscere solo il messaggio contenitore. A differenza della crittografia, la steganografia mira non tanto (o non solo) a nascondere il contenuto del messaggio, ma anche la sua stessa esistenza (rendendo invisibile anche la stessa comunicazione). Per esempio, nei file grafici si possono spesso alterare alcuni bit senza cambiare il risultato visivo (poiché l'occhio umano non è in grado di percepire la differenza), facendo così in modo da poterli utilizzare per codificare informazione.

Step

Con step si intende l'esecuzione di una singola istruzione di un programma (per volta), tramite l'utilizzo di un debugger.

Structured Exception Handling

Meccanismo di Windows che consente ai programmi di gestire le eccezioni evitando crash indesiderati. Gli Exception handler vengono utilizzati anche per altri scopi, tra cui quello di rendere più complessa l'analisi del codice, utile soprattutto contro i reverser inesperti.

T

Time limit

Tipologia di shareware che fornisce un uso completo (o quasi) del programma per un periodo di tempo limitato, in genere variabile da pochi giorni a qualche mese, scaduto il quale il programma smette di funzionare e richiede obbligatoriamente la registrazione.

Trace

Metodologia di analisi di un programma tramite l'utilizzo di un debugger. Il tracing (tracciatura) consente di esaminare il flusso di programma registrando, se necessario, lo stato della CPU ad ogni singola istruzione.
Vedi anche: Step

U

Unpacker

Programma che effettua l'operazione inversa del packer, riportando il file a condizioni più o meno identiche a quelle che aveva prima dell'aggiunta del packer (unpacking). Scrivere l'unpacker richiede in genere una comprensione piuttosto approfondita delle operazioni del packer.

Unpacking

Tecnica della rimozione dei packer. Può essere effettuata tramite l'apposito unpacker oppure manualmente, usando gli strumenti generici del reverse engineering come disassembler, debugger, dumper, PE editor, etc. In particolare, il manual unpacking richiede solitamente il reversing del codice del packer, pertanto ne consente la comprensione ed è utile a fini di studio.

V

W

Wardriving

Attività consistente nel girare in un veicolo con un portatile per cercare reti Wi-Fi aperte.

WEP

Acronimo di Wired Equivalent Privacy, si tratta di un sistema di cifratura a Layer 2 per connessioni WiFi. Purtroppo la sua implementazione è carente e ricca di vulnerabilità che compromettono irrimediabilmente la sicurezza di questo sistema.
Vedi anche: Attacco a WEP e WPA.

WiFi

Acronimo di Wireless Fidelity, è il nome che viene dato alle reti locali wireless (WLAN) basate sulle specifiche IEEE 802.11.

WLAN

Acronimo di Wireless Local Area Network, è il nome con cui viene identificata una rete che si appoggia ad un tecnologia di trasmissione senza fili.

WPA

Acronimo di Wi-Fi Protected Access, è un sistema nato con lo scopo di rimpiazzare il WEP, la cifratura è implementata in maniera più robusta, ed offre un livello di sicurezza notevolmente più elevato se raffrontato al WEP. "Varianti" del WPA sono WPA2 e WPA-PSK.

X

Xorare

Eseguire su un valore (o un intera stringa o sezione di memoria) l'operazione XOR. Spesso lo XOR viene utilizzato per criptare e decriptare dati, sfruttando il fatto che è un operatore reversibile (infatti (a XOR b) XOR b = a).
Vedi anche: Crittazione
Collegamenti: Introduzione allo Xor.

Y

Z