Sommario...
  1. Terminologia
  1. API Utili (ESSENZIALE LEGGERE QUESTO PER INIZIARE A REVERSARE)




PE (Portable Executable)

Il formato PE è un formato standard utilizzato dai sistemi Window$ per “capire” un file di tipo .exe (eseguibile) .dll (libreria) o .sys (driver).La sigla “portable” è soltanto un identificativo per far capire che tutti i PE possono funzionare su ogni piattaforma Window$ a 32 o 64 bit.
Dentro un PE sono dislocate molteplici informazione per la sua corretta interpretazione,tra cui le Import e Export Tabl,che sono l'elenco delle API utilizzate nel programma e le relative funzioni,le risorse (l'icona,l'interfaccia grafica,ma anche le stringhe di testo) le TLS Table,e le section table.

EP/OEP

L'EP (Entry Point,punto di ingresso) di un programma,non è altro che il punto di inizio da cui partono tutte le routine del programma,da cui Window$ parte per far funzionare un eseguibile. Spesso un EP può essere camuffato (per esempio con un exe packer) o addirittura virtualizzato (come nel caso di execryptor).
L'OEP invece sta per Origina Entry Point,che è un altra denominazione per chiamare l'EP nascosto...ed è il sogno di tutti gli unpakker...Smile


PACKER

è un soft capace di comprimere un eseguibile e proteggerlo (si,x modo di dire) dagli okki del reverser.
Alcuni packer sono molto smeplici come UPX o ASP pack i quali comprimono l'eseguibile e al momento dell'unpack lo scomprimono in memoria,e da lì lo eseguono,senza che il reverser (se non con un debug) possa vederne il contenuto.
Altri invece come TheMida utilizzano un hardware fingerprint,un identificativo univoco del PC a cui viene associata una sola key valida.
Armadillo invece virtualizza anche delle parti di codice per rendere ancora più difficile raggiungere l'OEP.
Alcuni anche usano delle avanzate o basilari tecniche antidebug.Armadillo apre dei thread che rivelano la presenza di un debug,ma esistono anche altre soluzioni...la piu utilizzata (forse neppure piu pero) è l'API IsDebuggerPresent la quale restituisce al prog un valore 1 se il processo è sottodebug e un valore 0 se non lo è...facile capire come viene implementata quest aprotezione,ma è altrettanto facile superarla e identificarla (Vedi il mio prog e i vari plugin di olly)


DUMP

Il dump,da non intendere come dump esadecimale,è una operazione che si esegue spesso in ambito di reversing,per esmepio per liberare un software da un packer.Consiste nell'estrarre una parte del codice binario (generalmente appena scompresso in memoria nel caso dei packer) e renderlo eseguibile direttamente da quel punto,come un exe a se stante.Spesso i dump non funzionano al primo colpo,poichè o la imagesize dell'exe è corrotta,o le Import sono state “distrutte”,o per altri motivi.Per questo i dump vanno sempre ricostruiti,affinchè l'OS possa comprenderli.


CrackMe

Un crackME è la palestra dei reverser. Si esercitano su questi programmi-prova per evitare i compiere illegalità su programmi commerciali.
Esistono vari tipi di crack me:

Patch
Consiste nel modificare una parte di assembly utile per rendere utilizzabile un programma senza protezioni di sorta.
keyg3n
Prevedono in genere protezioni tramite password,e richiedono la scoperta dell'algoritmo che genera la chiave e la eventuale scrittura di un keyg3n
Unpack
Prevedono l'uso di un packer (noto o scritto dal creatore del crackme) per proteggere l'eseguibile da un reverse. Lo scopo è quello di ottenere un Dump funzionante
Enable
Generalmente hanno alcuni pulsanti o controlli disabilitati da rendere attivi definitivamente.


Subsystem

Indica il tipo di applicazione con la quale si ha a che fare (tutti i packer detector e PE analyzer ne portano traccia).Per esempiio un applicazione può essere una Library (un Dll) una applicazione GUI (con interfaccia grafica) o  Win32 console (in cui non è presente la GUI,la riga di comando per intenderci).

BreackPoint

E' un punto di interruzione che viene settato dentro un debugger per analizzare una determinata routine o chiamata alle API (vedi sezione API).

In genere per settare breackpoint è sufficente fare un doppio click nella linea laterale a sinistra del disassemblato,oppure (dentro ollydbg)è sufficiente dotarsi della commandline di OllyDbg e far precedere al nome dell'API la sigla bpx (vedi sezione API).

Handle

E' un valore univoco che viene attribuito ad ognina delle finestre che abbiamo aperte nel PC.Spesso viene usato dai programmi anti reverser per individuare un debugger o simili.


Trhead

Un Trhead è un processo figlio di un processo più grande.Il trehead ha un identificativo univoco ,e una creation flag,che corrisponde al tipo di trhead. Per esempio,può esserci un trehead con creation flag " CREATE_SUSPENDED" che crea trhead addormentati,e possono essere chiusi solo da appositi comandi.

Anche i trhead sono dei diversivi che possono essere utilizzati per proteggere un eseguibile,per esempio Execryptor,o lo stesso Pirupiru crack me di predator che trovate nella sezione crackME.

________

API UTILI

Ecco a voi un elenco di API utili.
Per prima cosa,cosa è un API e a cosa ci serve saperlo...Dice wikipedia:API è l'acronimo di Application Program(ming) Interface (Interfaccia di Programmazione di un'Applicazione), indica ogni insieme di procedure disponibili al programmatore, di solito raggruppate a formare un set di strumenti specifici per un determinato compito. È un metodo per ottenere un'astrazione, di solito tra l'hardware e il programmatore, o tra software a basso ed alto livello. Le API permettono di evitare ai programmatori di scrivere tutte le funzioni dal nulla. Le API stesse sono un'astrazione: il software che fornisce una certa API è detto implementazione dell'API.

Ottimo,ora,tutti i programmi che andremo ad analizzare (tranne quelli in VB6 e .NET ma poi vedremo anche per quelli) utilizzano le API per fare qualcosa,Questo qualcosa per essere utile a noi reverser,viene inteso come "Prelevo il seriale inserito e lo leggo" oppure "scrivo nel registro le informazioni di registrazione".

Per cercare le API qui sotto elencate (Che non sono tutte !! Ma solo quelle più ricorrenti) è sufficiente dotarsi della commandline di OllyDbg e far precedere al nome dell'API la sigla bpx..circa così:

bpx MessageBoxA

Da ricordare che i nomi delle API sono case sensitive!! (maiuscolo e minuscolo contano)

Intercettarle e settare su di loro un breackpoint è utile per trovare aprti essenziali del disassemblato senza impazzire a studiarlo tutto.

Messaggi

MessageBoxA

Semplicemente invia una messagebox all'utente (tipicamente indica l'inserimento di un seriale errato,o corretto)


SendMessageA

Questo metodo non fa altro che inviare un messaggio, opportunamente codificato, ad una finestra specifica. (WM_CLOSE et similia)

Finestre

GetWindowTextA & GetDlgItemTextA

Entrambe utilizzate quando si ha a che fare con una dialogbox che richiede serial e name,in due aree di testo.


CreateWindowExA & ShowWindow

Aprono una nuova finestra di dialogo


File

ReadFile

Tipicamente utilizzato per leggere da un file,specie s eil file ocntiene info sulla registrazione del programma.Prestare attenzione che ci sono moltissimi casi in cui un prog accede a dei file,e non farsi trarre in inganno.

WriteFile

Come sopra,serve per scrivere su un file

CreateFileA

Serve per generare un file

GetPrivateProfileStringA

Serve per leggere una riga da un file .ini (quelli di configurazione)

RegQueryValueExA

Cerca un valore nel registro

RegOpenKeyA

Lo carica nel programma per usarlo (nel senso,legge il contenuto e lo trasforma in variabile o stringa)


Orari

GetLocalTimer

Essenziale individuarla nei trial a tempo (tipo,30 giorni) serve per restituire al programma l'orario di sistema.

Drive

GetDriveTypeA

Indispensabile quando si ha a che fare con giochi che chiedono il CD originale,serve infatti a determinare quale delle unità sia ad esempio un lettore CD.

Timer


SetTimer

Tipicamente usato per inizializzare l'evento timer,specie per quei demo in limitazione a minuti.

GetTickCount

Serve per prendere appunto un "tick",un passaggio di un minuto o di un secondo di un timer,sempre utile da individuare nei prog con limitazione a minuti.