Zoom Icon

Corso UIC Avanzato 01 Unlock

From UIC Archive

UIC Avanzato 01 Unlock

Contents


Corso UIC Avanzato 01 Unlock
Author: Unlock
Email: Email
Website: Home page
Date: 01/09/1999 (dd/mm/yyyy)
Level: Working brain required
Language: Italian Flag Italian.gif
Comments:



Tools

SoftIce ver 4.00 (le versione non è importante)


Link e Riferimenti

Questo è il Corsi UIC Avanzati n°01 disponibile alla pagina Corsi per Studenti


Introduzione

Partiamo con questa prima lezione di UIC sperando che chi è alle prime armi non si scoraggi :))))))


Notizie sul Programma

È la prima lezione della UIC


Essay

1) Avviamo il programma uno.exe, ci chiederà due info per poterlo registrare 2) Inseriamo quello che vogliamo nelle due caselle 3) Clicchiamo il tasto "REGISTER", il programma da un messaggio di errata registrazione

Sappiamo che Windows legge le informazioni da noi inserite nelle caselle con la funzione GETWINDOWTEXTA. Premiamo Ctrl+D e saremo in SoftICE, inseriamo un breakpoint proprio alla chiamata della funzione GETWINDOWTEXTA scrivendo bpx GETWINDOWTEXTA e premendo enter, ora ripremiamo Ctrl+D per ritornare a windows. Ripetiamo i punti da 1 a 3. Al momento dell'esecuzione del punto 3 il breakpoint viene eseguito, premiamo il tasto F12 (che serve a ritornare all' istruzione successiva alla chiamata della funzione GETWINDOWTEXTA) e ci troveremo il seguente codice

016F:00401205   CALL USER32!GETWINDOWTEXTA 
     0040120A   MOV EAX,00402165 
     0040120F   PUSH 08 
     00401211   PUSH  00402169 
     00401216   PUSH DWORD PTR [00402088] 
     0040121C   CALL USER32!GETWINDOWTEXTA 
     00401221   MOV EBX, 00402169 
     00401226   MOV EDX, EAX 
     00401228   XOR ECX, ECX

In questo punto il programma legge le informazioni e le memorizza in aree di memoria. Proseguiamo nel DEBUG del programma con il tasto F 10 e troveremo il seguente codice:

 016F:0040122A   MOV AL, [ECX+00402165] 
      00401230   ADD AL, 12 
      00401232   XOR AL, CL 
      00401234   ADD AL, 15 
      00401236   ADD AL, 02 
      00401238   MOV EBX, 00402169 
      0040123D   MOV AH, [ECX+EBX] 
      00401240   CMP  AL, AH 
      00401242   JNZ 00401311 ************* 
      00401248   INC ECX 
      00401249   INC EAX 
      0040124A   CMP ECX, 03 
      0040124D   JNZ 0040122A

In questo codice vengono prelevati i caratteri da noi inseriti, e memorizzati dal programma nell'area di memoria 00402165 (corrispondente alla prima casella bianca) e confrontati con quelli memorizzati nell'area di memoria 00402169 (corrispondente alla seconda casella bianca). Teoricamente da questo confronto si potrebbe trovare la chiave esatta e quindi inserirla senza modificare il codice del programma; in realtà il calcolo della chiave genera dei simboli strani quindi è più semplice modificare il codice del programma. Il salto condizionato da modificare è quello nella locazione di memoria 00401242 JNZ 00401311, per fare questo in SoftICE scrivere: A [spazio] 016F: 00401242 e premere enter. In questo modo SoftICE ci permette di cambiare il codice e quindi possiamo trasformare JNZ in JZ, si fa questo perché l' istruzione CMP AL,AH setta un flag a 1 se il confronto non è corretto, che è il nostro caso poiché abbiamo inserito una "fesseria"! Questa piccola routine viene eseguita per tre volte dopo di che si ha un altro controllo, questo lo possiamo notare premendo sempre il tasto F 10 (dopo avere modificato il salto).

 016F:004012A9   MOV AL, [ECX+00402165] 
      004012AF   XOR AL, 16 
      004012B1   ADD AL, 45 
      004012B3   ADD AL, CL 
      004012B5   XOR AL, CL 
      004012B7   MOV BL, [ECX+00402169] 
      004012BD   CMP AL,BL] 
      004012BF   JNZ 00401311 ************* 
      004012C1   INC ECX 
      004012C2   CMP ECX, 08 
      004012C5   JNZ 004012A9

Questo codice ripete il controllo di un altro pezzo di chiave di registrazione per 5 volte quindi c'è il solito confronto e il solito salto JNZ che andrà modificato come il precedente.

Pensate d'avere finito ?????? Non è così !!!!!!!!!!

Dopo avere modificato anche questo salto proseguite di nuovo con il tasto F10 e apparirà il seguente codice:

016F:00401308 CALL 00401351

    0040130D   CMP AL, 01 
    0040130F   JZ 00401338

Se, quando arrivate sull' istruzione CALL, premete il tasto F 10 NON FATELO!!!, il programma vi dirà che la chiave da voi inserita è errata; quindi qui c'è un ulteriore controllo della chiave di reg. bisogna entrare nella routine e vedere cosa controlla; per fare ciò si preme il tasto F8. A questo punto si visualizzerà il seguente codice:

016F:00401351 MOV EBX,00402169

    00401356   MOV EDX, EAX 
    00401358   XOR ECX, ECX 
    0040135A   MOV AL, [ECX+00402165] 
    00401360   ADD AL, 12 
    00401362   XOR AL, CL 
    00401364   ADD AL, 15 
    00401366   ADD AL, 02 
    00401368   MOV AH, [ECX+00402169] 
    0040136E   CMP AL, AH 
    00401370   JNZ 00401311 ************* 
    00401372   INC ECX 
    00401373   INC EAX 
    00401374   CMP ECX, 03 
    00401377   JNZ 0040135A 
    00401379   MOV AL, [ECX+00402165 
    0040137F   XOR AL, 16 
    00401381   ADD AL, 44 
    00401383   ADD AL, CL 
    00401385   XOR AL, CL 
    00401387   MOV AH, [ECX+ 00402169] 
    0040138D   CMP AL, AH 
    0040138F   JNZ 0040139B ************* 
    00401391   INC ECX 
    00401392   CMP ECX, 8 
    00401395   JNZ 00401379 
    00401397   MOV AL, 01 
    00401399   JMP 0040139F 
    0040139B   MOV AL, 00 
    0040139D   JMP 0040139F

Questo codice ricontrolla quello che noi abbiamo inserito nelle caselle di registrazione e, se il controllo è corretto, inserisce in AL il numero 01 se no mette 00. Anche qui noi dobbiamo fare credere al programma che i dati inseriti siano corretti, quindi dovremo modificare i salti contrassegnati dagli asterischi da JNZ a JZ con lo stesso metodo usato in precedenza. Scrivere in SoftICE A [SPAZIO] 016F : 00401370 e premere enter e 016F : 0040138F e premere enter.

Premere F5 in SoftICE per fare ripartire il programma et voilà!

Spero di essere stato abbastanza chiaro :)))) Unlock


Note Finali

Un rigraziamento a tutti gli amici di crack-it


Disclaimer

I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.

Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevole e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.