Lezione 7 UIC - cuteftp 3.5.5


10-03-2000

by "syscalo"

 

 

UIC's Home Page

Published by Quequero

 

Il tutorial indubbiamente è bello, solo che non è spiegato in modo molto approfondito, ma cmq so che syscalo ultimamente ha avuto problemi, ma cmq è da lodare visto che è l'unico che si è degnato di scrivere una soluzione

 
UIC's form
Home page: http://syscalo.cjb.net
E-mail: x4sys@iname.com
UIC's form

Difficoltà

( )NewBies (X)Intermedio ( )Avanzato ( )Master

 

In questa lezione e' vietato il patching del programma! Insomma o ce lo registriamo per bene o lasciamo stare.


Lezione 7 UIC - cuteftp 3.5.5
Written by syscalo

Introduzione

Niente introduzione, oggi partiamo subito.

Tools usati

- Ida Pro: decompilatore.
- Regmon: programma per vedere a quali chiavi del registro accede un programma.
- Regedit: programma per modificare le chiavi del registro (lo trovate nella vostra cartella di windows :).

URL o FTP del programma

Il programma è reperibile presso il sito:  www.globalscape.com o sul sito di Quequero proprio Qui

Notizie sul programma 

Il programma serve a gestire il download dei file tramite FTP.

Essay

Il programma per controllare la registrazione utilizza delle chiavi nel registro. Per individuare quali sono e' sufficiente utilizzare tools tipo regmon; cmq per i piu' sfaticati la chiave e': HKEY_CLASSES_ROOT\Rl. I nomi dei valori letti sono 1 e 3. Create con il regedit queste chiavi e assegnategli valori casuali.
Il programma ha una particolarita': il valore finale di confronto viene generato sempre diverso se la lunghezza delle chiavi non e' corretta. La chiave 3 deve essere di 48h byte; io ne ho usata una tutta di 1.
Vediamo la parte del confronto finale e poi analizziamo come vengono generati i valori.
 
0048690A   mov   ecx, 8   numero di volte che deve essere ripetuto il rep cmpsd
0048690F   lea   edi, [esp+0C4h+var_94]   carica in edi l'indirizzo del valore ottenuto elaborando la chiave 1
00486913   lea   esi, [esp+0C4h+var_54]   carica in esi l'indirizzo del valore ottenuto elaborando la chiave 3
00486917   xor   eax, eax   azzera eax
00486919   rep   cmpsd   confronta 4 byte alla volta per 8 volte
0048691B   pop   edi  
0048691C   pop   esi  
0048691D   jz   short 0048697D   se e' settato il flag zero (tutti 32 i byte confrontati sono uguali) salta => registrazione corretta. Volendo crackare il programma basterebbe modificare il jz in un jmp e tutto sarebbe risolto!
 
Andiamo a vedere solo come viene ottenuto il valore di confronto dalla chiave 1 e poi andremo a realizzarla in base al valore generato dalla chiave 3.
Ecco la parte di programma interessata:
 
00480329   push   ecx   indirizzo destinazione - qui salva i byte elaborati dalla subroutine all'indirizzo 00486AB0
0048032A   push   edx   indirizzo sorgente - contiene i byte letti dalla chiave 1
0048032B   call   00486AB0 chiama la subroutine che elabora la chiave 1
 
Ora spiego come funziona la procedura all'indirizzo 00486AB0:
Prende il valore corrispondente al codice ascii esadecimale del carattere ma tenendo solo la parte bassa: cioe' se abbiamo la lettera B (codice ascii 42) il valore che troveremo dopo e' 2; se abbiamo c (codice ascii 63) il valore sara' 3; se abbiamo o (codice ascii 6F) avremo F; se abbiamo 7 (codice ascii 37) avremo 7 e cosi' via. I byte cosi' ottenuti non vengono piu' elaborati e vengono usati direttamente nel confronto finale.
Adesso che e' chiaro come viene generato il valore possiamo creare la chiave 1; per fare cio' dobbiamo utilizzare un approccio live, cioe' dobbiamo fare eseguire il programma da un debugger (softice, o il turbo debugger del tasm, o qualsiasi altro) fino al momento del confronto finale e annotarci (o fare un dump) di 32 byte partendo dal primo dell'elaborazione della chiave 3, in sostanza il valore puntato da esi.
Fatto questo e' molto semplice costruire la chiave 1: basta scegliere il carattere che abbia come parte bassa del proprio codice ascii il valore dell'elaborazione della chiave 3 appena annotato.
Faccio l'esempio sui primi 4 byte:
 
Valore elab chiave 3: 7 F C 9
Valore chiave 1: 7 O L 9
 
Ok, non vi resta che costruire la chiave 1 come spiegato e il programma risulta registrato.
 
-=bye to all=-
syscalo

Disclaimer

Se volete usare questo programma registratelo!

 
UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    CrackMe   ContactMe   Forum   Iscrizione      
       Lezioni    Links   Linux   NewBies   News   Playstation        
  Tools   Tutorial   Search   UIC Faq

UIC