Per prima cosa, cosa è un API e a cosa ci serve saperlo: API è l'acronimo di Application Program(ming) Interface (Interfaccia di Programmazione di un'Applicazione) e 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.
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 fanno la differenza)
Intercettarle e settare su di loro un breackpoint è utile per trovare aprti essenziali del programma disassemblato senza impazzire a studiarlo tutto.
Messaggi
MessageBoxASemplicemente
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.
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
Nessun commento:
Posta un commento