Trasformiamo il WinZip 8.0
in un auto key-generator!!!!!!


04/05/2000

by "-->VanadiuM<--"

 
 

UIC's Home Page

Published by Quequero


Provoca il più bravo...

Desidero complimentarmi con te per tutta la buona voglia che ci hai messo, bravo, la gente che si impegna va sempre avanti...Un esempio è sicurament AndreaGeddon, colgo l'occasione per salutarlo.

... e morirai come uno schiavo! (Hackers)
UIC's form
Home page:  PRESTO
E-mail: [email protected]
IRC chan:   #cisco
UIC's form

Difficoltà

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

 

"Non sono ancora riuscito a capire come mai possono funzionare due seriali diversi per lo stesso nome! Difatti quello che ho trovato (per il mio nick) è 64341BB7 (e funziona benissimo), ma con un keymaker (che avevo per la versione 6.0-6.3-7.0-7.0 SR-1) ottengo il seriale 35927299 che funziona ugualmente."

Questa frase, scritta da me nel precedente tutorial, trova risposta nel fatto che il WinZip accetta due seriali diversi per lo stesso nome!

Mi permetto di aggiungere una piccola nota, come tu avevi constatato WinZip accettava due seriali, come mai? Semplice, il primo è di tipo esclusivamente numerico (654324546), mentre il secondo  in forma esadecimale (5465F2A654C)...NdQue


Avevamo trovato un seriale valido...non vi basta?
Allora creaiamo un auto key-generator!
Written by -->VanadiuM<--

Introduzione

In questo stesso sito, è presente una guida al cracking di WinZip 7 SR-1. Io invece vi propongo non una caccia al seriale (come abbiamo già fatto nel tute precedente), ma una trasformazione dell'eseguibile in un auto keygenerator.

Tools usati

SoftIce
-Hex Workshop

URL o FTP del programma

http://www.winzip.com
Notizie sul programma 
Chi non conosce WinZip, il miglior compressore/decpmpressoredi file zip e non solo. Per questo programmuzzo, otterremo un serial a 8 (otto :-) cifre che faremo apparire in una messagebox che abbia come titolo il nostro N. Utente e come testo il seriale.

Essay

Per prima cosa apriamo il WinZip e vedremo un brutto Nag-screen che ci informa (come se non lo sapessimo) di non essere utenti modello (e quindi registrati). Clickiamo su "enter registration code", inseriamo un nome a caso ed entrando in sice (con Ctrl + D) settiamo due breakpoint (non sappiamo quale delle due funzioni usa, anche se io lo so' ;-) sulle funzioni "getwindowtexta" e "getdlgitemtexta". Pigiamo il pulsante Ok ed eccoci in Sice. Usciamo dalla chiamata (F11), disabilitiamo i breakpoint (bd*) e diamo un'occhiata. Ci troviamo all'indirizzo 407F6D, ma non ci interessa (vengono solo presi i nostri dati) e steppiamo (F10) fino a 407FB5 dove notiamo un istruzione sospetta:

* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:00407F8F FF1528744700 Call dword ptr [00477428]
:00407F95 56 push esi
:00407F96 E8FF780300 call 0043F89A
:00407F9B 56 push esi
:00407F9C E822790300 call 0043F8C3
:00407FA1 803D78CD480000 cmp byte ptr [0048CD78], 00 <------ Verifica che la casella 1 non sia vuota
:00407FA8 59 pop ecx
:00407FA9 59 pop ecx
:00407FAA 7459 je 00408005 <------ Se è vuota, salta
:00407FAC 803DA4CD480000 cmp byte ptr [0048CDA4], 00 <------ Verifica che la casella 2 non sia vuota
:00407FB3 7450 je 00408005 <------ Se è vuota, salta
:00407FB5 E81BFAFFFF call 004079D5 <------ *Generazione e verifica seriale con risultato in eax*
:00407FBA 85C0 test eax, eax
:00407FBC 7447 je 00408005
:00407FBE 57 push edi

Prima di andare avanti, suggerirei di noppare la seconda verifica (407FAC) per ottenere il nostro seriale giusto anche senza inserirne una sbagliato, quindi "a 407FAC" e "nop nop nop nop nop nop nop" e poi invio! Steppiamo (F10) fino a "call 004079d5" ed entriamoci con F8. Ora dobbiamo trovare la locazione dove viene generato uno dei due seriali (validi entrambi), trovare qualche istruzione inutile (nel nostro caso rindondante) e sostituirla con il nostro codice per la messagebox! Per prima cosa, entrati nella call, troveremo molte istruzioni, e se VI va capite coma si genera il seriale, ma, per quanto mi riguarda, andrò avanti. Ecco il codice commentato da dove ci interessa:

:00407AEE 6A04 push 00000004
:00407AF0 50 push eax
:00407AF1 56 push esi
:00407AF2 E8C91B0600 call 004696C0
:00407AF7 83C40C add esp, 0000000C
:00407AFA 85C0 test eax, eax
:00407AFC 7522 jne 00407B20 <-- Da qui...
:00407AFE 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0]
:00407B04 6A04 push 00000004
:00407B06 50 push eax
:00407B07 68A8CD4800 push 0048CDA8
:00407B0C E8AF1B0600 call 004696C0
:00407B11 83C40C add esp, 0000000C
:00407B14 85C0 test eax, eax
:00407B16 7508 jne 00407B20
:00407B18 891DDC9F4800 mov dword ptr [00489FDC], ebx
:00407B1E EB07 jmp 00407B27
:00407B20 8325DC9F480000 and dword ptr [00489FDC], 00000000 <-- A qui, tutto può essere eliminato
:00407B27 682C010000 push 0000012C
:00407B2C 8D85C0FEFFFF lea eax, dword ptr [ebp+FFFFFEC0]
:00407B32 6A00 push 00000000
:00407B34 50 push eax
:00407B35 E8D6000600 call 00467C10
:00407B3A A1DC9F4800 mov eax, dword ptr [00489FDC]
:00407B3F 83C40C add esp, 0000000C

Hehe, proprio al caso nostro! Tanto spazio per poche (ma preziose) istruzioni necessarie ai nostri loschi scopi! Indi per cui propongo di noppare tutto! Quindi "a 407AFC" e "nop nop nop......nop nop nop" fino a 407B1F. Ora che abbiamo lo spazio: che ci mettiamo? Semplice, esaminiamo il codice precedente:

:00407ABF 8D85C0FEFFFF lea eax, dword ptr [ebp+140] <-- Calcola il seriale in eax
:00407AC5 50 push eax
:00407AC6 57 push edi
:00407AC7 E818010000 call 00407BE4
:00407ACC 8D85C0FEFFFF lea eax, dword ptr [ebp+140] <-- Ancora la stessa cosa
:00407AD2 56 push esi
:00407AD3 50 push eax
:00407AD4 E8F7170600 call 004692D0
:00407AD9 83C410 add esp, 00000010
:00407ADC F7D8 neg eax
:00407ADE 1BC0 sbb eax, eax
:00407AE0 40 inc eax
:00407AE1 A3DC9F4800 mov dword ptr [00489FDC], eax
:00407AE6 753F jne 00407B27

che facciamo? Elementare, nel punto vuoto che ci siamo "creati", eax non contiene più il seriale, e quindi il nostro codice sarà qualcosa del tipo:

lea eax,[ebp-140] <-- Ci ricalcoliamo il seriale in eax
push 20 <-- Stile della finestra (punto interrogativo e tasto Ok)
push edi <-- Locazione del nostro N. Utente
push eax <-- Locazione del seriale
push 00 <--Handle finestra genitrice, ma non ci serve, quindi: 0
call user32!MessageBoxA <-- Devo anche scrivere cos'è questo?

perfetto, lo scriviamo in softice ("a 407BFC" e poi le istruzioni), ci segnamo (su carta) il codice che scrive SoftIce, e lo trasferiamo nell'eseguibile per mezzo di un Hex editor (io ho usato Hex Workshop). Avremmo finito, ma ci sono ancora tre cose che non vanno: C'è anche la messagebox che ci dice che abbiamo sbagliato, si possono fare solo tre tentativi, e non si può ottenere il seriale valido senza inserirne uno fasullo. Cosa faremo noi? Fixeremo anche questi tre problemi! Per prima cosa rimettiamo il breakpoint su getdlgitemtexta, e riclickiamo su Ok, quindi riesaminiamo il codice:

* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:00407F6D FF1528744700 Call dword ptr [00477428]
<-- Prende il nome
:00407F73 57 push edi
:00407F74 E821790300 call 0043F89A
:00407F79 57 push edi
:00407F7A E844790300 call 0043F8C3
:00407F7F 59 pop ecx
:00407F80 BEA4CD4800 mov esi, 0048CDA4
:00407F85 59 pop ecx
:00407F86 6A0B push 0000000B
:00407F88 56 push esi
:00407F89 68810C0000 push 00000C81
:00407F8E 53 push ebx

* Reference To: USER32.GetDlgItemTextA, Ord:0104h
|
:00407F8F FF1528744700 Call dword ptr [00477428]
<-- Prende il seriale
:00407F95 56 push esi
:00407F96 E8FF780300 call 0043F89A
:00407F9B 56 push esi
:00407F9C E822790300 call 0043F8C3
:00407FA1 803D78CD480000 cmp byte ptr [0048CD78], 00
<-- Controlla che la casella nome non sia vuota
:00407FA8 59 pop ecx
:00407FA9 59 pop ecx
:00407FAA 7459 je 00408005
<-- Vuota? Sallta alla Beggar Off
:00407FAC 803DA4CD480000 cmp byte ptr [0048CDA4], 00
<-- Controlla che la casella serial non sia vuota
:00407FB3 7450 je 00408005
<-- Vuota? Salta alla Beggar Off
:00407FB5 E81BFAFFFF call 004079D5
:00407FBA 85C0 test eax, eax
:00407FBC 7447 je 00408005
:00407FBE 57 push edi
........................................
:00407FF6 85C0 test eax, eax
:00407FF8 7407 je 00408001
:00407FFA 50 push eax
:00407FFB FF1570704700 Call dword ptr [00477070]
:00408001 6A01 push 00000001
:00408003 EB30 jmp 00408035
:00408005 E89C020000 call 004082A6
<-- Il salto arriva qui!

* Possible Reference to String Resource ID=00654: "Incomplete or incorrect information"
|
:0040800A 688E020000 push 0000028E
:0040800F E8D9750300 call 0043F5ED
:00408014 50 push eax
:00408015 53 push ebx
:00408016 6A3D push 0000003D
:00408018 E808800200 call 00430025
<-- Call che genera la Beggar Off
:0040801D 83C410 add esp, 00000010
:00408020 FF05F87A4800 inc dword ptr [00487AF8]
:00408026 833DF87A480003 cmp dword ptr [00487AF8], 00000003
<-- Confronta il numero di tentativi con tre
:0040802D 0F85F9000000 jne 0040812C
<-- Se non sono tre, salta
:00408033 6A00 push 00000000

Allora: noppiamo il secondo salto alla Beggar Off (quello del seriale, ovvero da 407FAC a 407FB4), e la call che genera la Beggar Off (da 408018 a 40801C), in questo modo: se sbagliamo, non ci avvertirà dell'errore, e se non inseriamo il seriale fasullo, il programma ci darà ugualmente quello giusto! iamo ormai alla fine, e l'ultima cosa da fare è darci infinite possibilità di inserire il seriale, e per questo, ci basta cambiare il jne (in SoftIce è jnz) 0040812c in jmp! Ora riportiamo il codice nell'eseguibile con l'Hex editor eselviamo tutto! PROVATE!!!!!!!!!!!!!!!!!!!!!!!

Note finali

Questo è il mio secondo tutorial , realizzato un po' di tempo dopo l'uscita di WinZip 8.0 . Un po' di reverse Enginering non guasta mai! Spero che Quequero non mi maledica perchè ho fatto qualche errore, comunQue saluto tutti: D-master, Ninjanet (che nick da deficente che si è scelto!), Loide (e purtroppo questo non è il suo nick, ma è il suo nome), ekekko, e Andrea Santurbano!

-->VanadiuM<--

Disclaimer

Queste informazioni sono solo a scopo puramente didattico. Ne il sottoscritto, ne Quequero potranno essere condannati se con queste info farete calare di un punto le azioni della Niko Mak Computing. Noi non vi insegnamo a rubare i software, ma a capire come funzionano per comprendere il grande sforzo fatto dai programmatori per svilupparli.

 
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