Come craccare un programma

Questo articolo è più che altro un tributo al mio video più popolare, che parla appunto dei rudimenti del reverse. Si tratta di una valida traccia scritta da cui partire per poi approfondire o domandare :)

Premetto che questa non è una guida completa. Non basterebbero tutte le guide del mondo perché l’argomento è complesso e pieno di sfaccettature.
Questo articolo è invece un ottimo punto di partenza e di riferimento per chi volesse cominciare un viaggio nel mondo del reverse o per tutti i curiosi che volessero capire il meccanismo alla base di un crack e delle protezioni in generale.
Infatti, non posso scrivere una guida completa perché per addentrarsi nell’argomento occorrono conoscenze che non possono trovare adeguato spazio sulle pagine di questo blog.
Per rendere facilmente comprensibile l’articolo dovrò parlare in termini abbastanza generali. L’articolo è quindi adatto a qualsiasi tipo di pubblico.
Prossimamente scriverò altri articoli sull’argomento, in termini meno generali, per i quali pubblicherò anche una lista delle conoscenze minime necessarie e link per reperire la documentazione del caso per chi volesse seguire la serie.

NOTA : Tutto quello che pubblico in merito a questo argomento è puramente a scopo didattico e divulgativo. Gli strumenti sono software liberamente scaricabile in rete, e i programmi vittima li ho appositamente programmati per lo scopo. Nessuna legge viene infranta, e non voglio rispondere a commenti che dicono come quello che spiego sia immorale, non lo è. Nessuno dopo aver letto questi articoli potrà craccare un software commerciale, e se riesce a farlo lo sapeva fare prima di leggere questo o avrebbe potuto farlo comunque. Non si può vivere nell’ignoranza perché conoscere come funzionano le cose potrebbe essere usato per scopi illegali. Questo non è un’istigazione a delinquere, serve a far capire le dinamiche dietro ad un fenomeno molto diffuso, e che chiunque nel settore deve conoscere e comprendere.

come craccare un programmaCosa vuol dire craccare un software?
Vuol dire applicare l’ingegneria inversa per ottenere e modificare il codice di un’applicazione con il fine di aggirarne i sistemi di protezione e sbloccare funzionalità.

Molto spesso ci si riferisce con il termine crack ad un programma che è tecnicamente un patcher, ovvero un software che applica una modifica all’eseguibile del programma vittima per sbloccare funzioni o attivare una licenza.

Esistono tanti modi per produrre quello che viene definito crack o software craccato. Dal modificare direttamente l’eseguibile (e distribuire un exe che sostituisce l’originale) a produrre un programma che modifica l’eseguibile sulla macchina dell’utente (un patcher) al più raffinato KeyGen (Key generator) che è in grado di generare chiavi di attivazione usando lo stesso algoritmo del programma vittima.

Il keygen è di solito più difficile da realizzare, ma è quello che offre i risultati migliori. Avere una licenza valida non da modo al software di accorgersi di essere contraffatto, anche se i controlli sono ripetuti o nascosti (e magari possono sfuggire ad una patch). Per realizzare un KeyGen occorre individuare la parte di programma che verifica se una licenza è valida, comprenderlo, e ricavarne un algoritmo che genera licenze valide.

In questa guida voglio mostrare il lavoro che svolge colui che produce una patch.

I passi fondamentali per craccare un programma

  1. Ottenere un listato con codice assembly del programma vittima.
  2. Individuare il punto in cui sono effettuati i controlli di sicurezza.
  3. Applicare una modifica per aggirare i controlli.

 

Definizione di listato assemblyLeggi

 

In realtà è molto più facile a dirsi che a farsi. Negli esempi che troverete a fine articolo sarà tutto facile e pilotato, ma in realtà ottenere il listato di un software potrebbe non essere cosa semplice. Molti programmi commerciali utilizzano software e tecniche speciali per nascondere il codice del prodotto, o rilevare l’utilizzo di un debugger. Nessuna protezione è inviolabile, ma di certo ottenere il listato di quei programmi è notevolmente più complicato e richiede esperienza e intuito.

Anche quando si dispone del listato non è cosa semplice individuare la parte delle protezioni. Infatti solitamente è possibile ottenere solamente l’assembly del programma, o al massimo un codice C molto rozzo. Specie nel caso di software molto grandi può diventare difficile trovare le parti che si occupano della protezione ed attivazione. Questa e le protezioni sempre migliori sono le ragioni che rendono craccare un programma un’attività che in pochi riescono a svolgere.

Ad ogni modo, in linea di massima è possibile ottenere il listato di un programma mediante un disassemblatore o un debugger. La differenza è che il disassemblatore stampa il codice del programma senza eseguirlo. Il debbuger invece si “aggancia” al programma in esecuzione, permettendo di fermare o riprendere l’esecuzione, di modificare live il codice e di visualizzare e modificare i registri.

Nell’esempio ho utilizzato un debugger, vedi fine dell’articolo per i download e il video.

Esistono diverse tecniche che è possibile sfruttare per individuare il punto in cui vengono fatti i controlli. Quella mostrata nel video consiste nella ricerca delle stringhe per individuare il punto nel codice dove viene visualizzato un messaggio. Questa tecnica è molto spesso inefficace perché le stringhe potrebbero essere archiviate in un file di risorse per agevolare la traduzione.

Un’altra tecnica consiste nell’inserire dei breakpoint in concomitanza di alcune chiamate di funzioni. Ad esempio, se inserendo una chiave errata viene aperta una finestra si potrebbe fermare l’esecuzione ogni volta che viene chiamata la funzione per creare una finestra. Esistono elenchi delle API di windows che è possibile consultare per avere un’idea delle funzioni su cui è possibile inserire un breakpoint.

 

Definizione APILeggi

 

Definizione BreakPointLeggi

 

Sono solo due esempi, ed esistono diverse tecniche per raggiungere lo scopo.

Una volta individuato il punto esatto ci si trova spesso di fronte a qualcosa che è banalmente un controllo vero falso su un valore. Arrivati a questo punto è fatta, basta modificare una sola istruzione per invertire la condizione o renderla sempre vera, e quindi accettare qualsiasi chiave.

Le istruzioni di salto determinano il flusso del programma, molto spesso basta cambiare una singola istruzione di salto per alterare la sequenza di istruzioni e ottenere le funzionalità desiderate.

Ed eccoci alla fine, una volta modificato il programma si ottiene il crack.
Qui sotto raccolgo tutti i link, download, video ed articoli correlati per approfondire.
Seguiranno altri articoli sull’argomento, e i link saranno pubblicati anche in questa sezione. Se vuoi restare aggiornato iscriviti e lascia un commento per ricevere la newsletter.

Lista della spesa :

Una collana di libri interessanti, si trovano a prezzi stracciati : Hack Proofing

Collegamenti :

Articoli su wikipedia :

Computer geek e appassionato di elettronica dall'infanzia. Nel tempo libero oltre a realizzare progetti inutili ma entusiasmanti mi dedico ai videogiochi, rigorosamente su pc. Condivido su questo blog e su youtube i miei interessi nella speranza di entusiasmare tutti i matti come me.

13 comments for “Come craccare un programma

  1. darta1964
    20 agosto 2016 at 11:32

    Scusa, puoi rimettere gli strumenti ed il file di esempio su dropbox ?.Dice files offline !

  2. Alberto Garagnani
    30 novembre 2015 at 21:30

    Hey ciao, vedo solo ora questo articolo e mi è molto piaciuto, sono un’ appassionato di pc come te.
    Ho creato un semplicissimo programma in c++ che ha la stessa funzionalità del tuo Crackme: chiede di inserire una chiave e dice se quella inserita è giusta o sbagliata. Utilizzando ollydebugger e seguendo la procedura che hai usato non mi trova la parte di codice che dice “seriale errato” ma solo le stringhe che dicono Inserire chiave e non trovo nennun comando jmp o cose simili come hai detto tu (non mi intendo molto di assembly). Sai per caso il motivo?

  3. Giuliano
    21 novembre 2015 at 23:31

    Ciao, l’articolo è scritto bene in maniera semplice chiara. Vorrei chiederti un consiglio su come operare o che starda percorrere per analizzare file con estensione .ex4.
    Grazie

    • 23 novembre 2015 at 14:49

      Se mi dai un qualche dettaglio magari posso indicarti qualcosa.
      Non mi sembra di aver mai lavorato con quel tipo di file, però potrei comunque poterti aiutare in qualche misura.

      • Giuliano
        24 novembre 2015 at 0:24

        Il tipo di file è un programma che gira su piattaforme MT4 per il trading online, questo nello specifico è una sorta di indicatore che per funzionare richiede un’autentizcazione ad un server esterno.Io vorrei riuscire a bypassare tale cosa.il file è apribile con un editor esadecimale, ma non con ollydb.
        Le piattaforme hanno cmq in dotazione un editor x creare questi inicatori ed altre tipi di automazioni e permettono la compilazione di file (programmi) simili o anche singole funzioni (esempio chiamate a server remoto),ma non permettono decompilare.
        Se non riesco l’alternativa sarebbe creare un server che faccia l’autenticazione, camuffare il dns che dirotti la chiamata del programma a tale server.
        Non so, sto sparando cavolate? tu che dici?
        Grazie

  4. Massimiliano
    5 novembre 2015 at 14:41

    Ciao, complimenti per il tuo video, L’ho visto e rivisto parecchie volte per cercare di capire se potesse essermi di aiuto, ma sinceramente, vista la mia poca conoscenza della materia,non sono riuscito a risolvere un bel nulla.
    Ho un software acquistato con regolare licenza, vorrei installarlo anche su una seconda macchina ma non me lo permette,mi dice che il codice di licenza che utilizzo è stato gia utilizzato. potresti offrirmi qualche soluzione in merito?
    Grazie e complimenti ancora per tutte le informazioni che riesci a trasmettere.

  5. Luigi
    7 luglio 2015 at 11:13

    Salve, avrei bisogno di contattarla per un problema con un programma può scrivermi?

    • 7 luglio 2015 at 11:18

      Puoi contattarmi a : alessio@gandotech.net
      Tuttavia, non posso accettare richieste per craccare programmi commerciali.
      Se vuoi aiuto per imparare posso darti qualche suggerimento, ma nulla di più.

      Grazie per la visita.

  6. Pier
    3 maggio 2015 at 11:22

    Ciao, complimenti per guida!
    E’ possibile eludere in qualche modo la chiavetta hardware di un software?
    Grazie.

    • 3 maggio 2015 at 13:39

      Ciao, è certamente possibile, anche se probabilmente richiede strumenti e conoscenze avanzate.
      Si può supporre che la chiavetta hardware contenga una chiave crittografica che è usata per attivare il prodotto. Sia che si tratti si crittografia simmetrica, sia che si tratti di crittografia a chiave pubblica è possibile tentare vari tipi di attacchi, soprattutto perchè entrambe le parti (la chiavetta, e il software) sono sotto il tuo controllo.

      Non saprei suggerirti nulla ora come ora, perchè è un argomento che ho poco approfondito.
      Puoi provare a scoprire qualcosa di più sul sistema e poi tentare di forzarlo. Io comincerei dal software, dovrebbe essere la l’anello più facile da esaminare perchè puoi ottenere molte informazioni senza dover disporre di strumenti elettronici, ti basta un decompilatore o un debugger.

  7. Felice
    13 gennaio 2015 at 13:02

    Ciao Alessio,
    ho trovato molto interessante il tuo video su youtube e il relativo articolo. Ho craccato Gado con il tuo tutorial e ho capito la logica retrostante. Ora vorrei provare con un programma ad interfaccia grafica. Ho provato con Holly Debug ma non riesco a risalire alla stringa che fa apparire la finestra di errore.
    Ti premetto che sono abbastanza ignorante in materia e purtroppo non ho molto tempo per studiare anche se l’argomento mi affascina molto. Mi serve una soluzione che mi permetta di risolvere il problema in tempi rapidi.
    Mi sarebbe utile avere qualche suggerimento per capire come trovare quello che sto cercando.

    Grazie e complimenti per il tuo lavoro di divulgazione :)

  8. 11 agosto 2014 at 10:23

    ciao ma è possibile tramite Ollydbg ottenere ad es. account plus di bit che???

    • 11 agosto 2014 at 10:38

      Ciao,
      OllyDbg è un debugger. Permette di manipolare in tempo reale le istruzioni di un programma.
      Se sei bravo ed hai tempo e risorse da investire puoi capire come funziona una porzione di un programma e sfruttare la tua conoscenza per generare un seriale oppure puoi modificare il programma per fargli credere di avere la versione completa.

      Fa attenzione che tu hai il controllo completo di quello che accade sulla tua macchina, se l’account che vuoi ottenere è per un servizio online (ovvero le funzionalità risiedono su un server) non puoi forzare nulla con ollydbg, almeno nel 90% dei casi.

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Verifica anti-spam *