Trovare il seriale giusto in Teleport Pro 1.38

Data

by "Pippo81 "

 

29/12/2005

UIC's Home Page

Published by Quequero

Nel fosco fin del secolo morente, sull'orizzonte cupo e desolato,

Grazie pippo!

gi� spunta l'alba minacciosamente, del d� fatato

 

Home page  : http://quequero.org

 

Difficolt�

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

 

 

Introduzione

Teleport Pro � un programma molto utile che permette di scaricarsi interi siti, come ce ne sono tanti di programmi del genere. Teleport Pro per� presenta altre funzioni molti utili come cercare un file di un certo tipo all'interno di un sito, o cercare una parola chiave ecc...Cliccando sul meno Help, e poi su Register ci viene chiesto di inserire un nome e un serial riicavato dal nome. 

Tools usati

OllyDbg   Leggero e intuitivo, ci basta e ci avanza per trovare il seriale.

URL o FTP del programma

http://www.tenmax.com/pro12.exe

Essay

Allora, innanzitutto ci cerchiamo un GetWindowTexta o un GetDlgItem. Di GetWindowTexta ce ne sono parecchi, io per sicurezza ho messo un breakpoint su tutti, per trovare quello giusto. Dopo aver inserito un nome (Paperino) e un seriale a caso (123456789), Olly breakka sul GetWindowTexta in :452674. Da il programma entra in diverse call, fino ad arrivare a quella ci interessa, all' indirizzo :42D5C5, che chiama un'altra routine, che ne chiama un'altra ancora che sembra essere interessante. Chiamiamo Serial il seriale inserito da noi.

004339E0        PUSH EBP inizia la routine
........

00433A41  MOV EAX,DWORD PTR SS:[EBP+10] carica in EAX la lunghezza di Serial
XXXXXXXX  TEST  EAX,EAX
00433A46  JL pro.00433BD5
esce dalla routine se � zero
XXXXXXXX  CMP EAX,1
00433A4F  JE pro.00433BD5 esce lo stesso se � 1
XXXXXXXX  CMP EAX,24
00433A58  JG pro.00433BD5 o se � maggiore di 24

.......
00433A9D  MOV BL,BYTE PTR DS:[ESI+1] carica in BL il primo carattere di Serial
00433ADC  MOVSX ECX,BL  muove BL in ECX
00433ADF  SUB ECX,30  decrementa ECX di 30
XXXXXXXX  JMP SHORT pro.00433B16
XXXXXXXX  CMP ECX,DWORD PTR SS:[EBP+10] compara ECX con 0A  
XXXXXXXX  JNB SHORT pro.00433B51 esce se � maggiore

ed ecco la parte pi� interessante:
 
00433B3B  IMUL ESI,DWORD PTR SS:[EBP+10] moltiplica ESI per 0A (10 in decimale)
00433B3F  ADD ESI,ECX aggiunge a ESI il carattere
XXXXXXXX  MOV DWORD PTR SS:[EBP-8],ESI
XXXXXXXX  MOV EAX,DWORD PTR SS:[EBP-4]
XXXXXXXX  INC DWORD PTR SS:[EBP-4]
00433B4A  MOV BL,BYTE PTR DS:[EAX]
muove in BL il prossimo carattere
00433B4C  JMP pro.00433AB5
ricomincia
Insomma, prende i caratteri del Serial decrementati di 30, li moltiplica per 0A, aggiunge il carattere successivo, rimoltiplica il tutto per 0A, aggiunge il carattere successivo, e cos� via fino alla fine. Tutto ci� serve semplicemente al computer per prendere la stringa di testo del Serial e trasformarla in esadecimale. Il risultato di queste operazioni con il numero da me inserito (123456789) � 75BCD15, ovvero 123456789 in decimale!
Ma andiamo avanti con Ctrl+F9 fino a ritornare alla sequenza principale del programma ed arriviamo all'indirizzo 42D5C5 dove c'� un'altra chiamata. Entriamoci dentro con F7. Chiamo Nome il noi inserito da me.

0042DFB2  PUSH EDI 
0042DFB3  MOV EDI,DWORD PTR SS:[ESP+8] muove in EDI Nome
0042DFB7  TEST EDI,EDI lo testa
0042DFB9  JE SHORT pro.0042DFC4 e fa uscire se � zero
XXXXXXXX  PUSH EDI
0042DFBC  CALL pro.00433750 chiamata che restituisce in EAX la lunghezza di nome
XXXXXXXX  POP ECX
0042DFC2  JMP SHORT pro.0042DFC6
XXXXXXXX  XOR EAX,EAX
0042DFC6  CMP EAX,5 confronta la lunghezza con 5
0042DFC9  JNB SHORT pro.0042DFCF ed esce dalla routine se � minore
XXXXXXXX  XOR EAX,EAX
XXXXXXXX  POP EDI
XXXXXXXX  RETN
XXXXXXXX  PUSH EBX
XXXXXXXX  PUSH ESI
0042DFD1  MOV ESI,5DFEE4A4 muove in ESI il numero 5DFEE4A4
0042DFD6  XOR EBX,EBX azzera EBX
XXXXXXXX  TEST EDI,EDI
XXXXXXXX  JE SHORT pro.0042DFE5
XXXXXXXX  PUSH EDI
0042DFDD  CALL pro.00433750 riporta in EAX la lunghezza di Nome
XXXXXXXX  POP ECX
0042DFE3  JMP SHORT pro.0042DFE7
XXXXXXXX  XOR EAX,EAX
0042DFE7  ADD EAX,-4 diminuisce EAX di 4
0042DFEA  CMP EBX,EAX confronta EBX con EAX
0042DFEC  JNB SHORT pro.0042DFFA esce dalla routine se non � minore
0042DFEE  XOR ESI,DWORD PTR DS:[EBX+EDI] xora ESI con i quattro caratteri di Nome
XXXXXXXX  TEST BL,40
XXXXXXXX  JE SHORT pro.0042DFF7
XXXXXXXX  INC EBX
0042DFF7  INC EBX incrementa EBX
0042DFF8  JMP SHORT pro.0042DFD8 riparte da 0042DFD8
0042DFFA  MOV EAX,ESI muove il numero zorato in EAX
XXXXXXXX  POP ESI
XXXXXXXX  POP EBX
XXXXXXXX  POP EDI
0042DFFF  RETN


Insomma, prende i primi 4 caratteri del nome e li xora con 5DFEE4A4, rixora il tutto con i secondi 4 caratteri del nome (dal secondo al quinto) e cos� via fino al penultimo blocco di 4 caratteri (si ferma al penultimo blocco perch� a quel punto EBX (che viene incrementato ogni volta) � diventato uguale ad EAX (la lunghezza del nome decrementata di 4) e il JNB all'indirizzo 0042DFEC fa uscire dalla routine.
Dopo questo, steppando con F7, subito dopo il RETURN dalla CALL, all'indirizzo 0042D5F8 c'� un CMP tra il numero ottenuto da Nome e quello ottenuto da Serial. Due righe pi� gi� c'� un JNZ che fa saltare al messaggio di errore se non sono uguali.
Quindi, per trovare il seriale giusto basta o prendere il numero in EAX al CMP finale (indirizzo 0042D5F8) e metterlo in decimale, oppure, senza n� aprire un debugger n� programmare un Keygen, calcolarselo con la calcolatrice di Windows:
P   a   p   e   r   i   n  o
50 61 70 65 72 69 6E 6F
xor 5DFEE4A4 con 65706150 = ris1
xor ris1 con 72657061 = ris2
xor ris2 con 69726570 = ris3
xor ris3 con 6E697265 = seriale esatto in esadecimale
                                                                                                                 Pippo

Note finali

Immagino sia possibile anche crackare il programma forzando qualche jump o qualcosa del genere, per� di sicuro non basta cambiare il JNZ prima del messaggio di congratulazioni, perch� Nome e Serial vengono salvati sul registro di configurazione di Windows e all'avvio del programma vengono presi e vengono rieseguiti i controlli esaminati qua sopra.
Spero sia tutto chiaro

Disclaimer

Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial.