Soluzione 2° corso |
|
|
9/9/99 |
by "Unlock" |
|
Published by Quequero |
||
Unlock, sei stato bravissimo e sei migliorato davvero tanto nonostante il tuo form sia sempre il più brutto :) e ci siano svariati errore, ti faccio i miei più sinceri complimenti, sono davvero contento...Hei unlock, la "E" maiuscola accentata si fa con alt+212...È facile :)))) |
|
|
| UIC's form |
|
UIC's form |
Difficoltà |
(X)NewBies ( )Intermedio ( )Avanzato ( )Master |
Raga rieccoci speriamo che questa volta QUE sia più buono :-( ( scherzo s'intende )
:))))))) E dai che non sono stato cattivo :)
Introduzione |
Forza proviamoci anche questa volta, il programma chiede un nome e un codice e noi scopriremo quello giusto :))))))
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Questo secondo programma è un pò più difficilino ma non ci scoraggeremo :)))))) una nota importante, non inserite nella prima casella un nome più lungo di tre caratteri perchè senò il programma va in crash, almeno sul mio pc :(((( Questo dipende dal fatto se avete un K5-6-7 altrimenti su intel non crasha NdQue
Essay |
1) Avviamo il programma due.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 ma inserendo 'aaa' nella prima
casella e '123' nella seconda. 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
:00401215 mov al, byte ptr
[ecx+0040219F] ; CARICA UNO ALLA VOLTA I CARATTERI
; PER VERIFICARE COSA C'E' NELLA
0040219F IN
SOFTICE
; SCRIVETE D 0040219F E PREMETE ENTER
:0040121B test eax,
eax
; CONTROLLA SE ABBIAMO LETTO TUTTI I
CARATTERI
:0040121D je
00401279
; SALTA SE ABBIAMO FINITO
:0040121F xor al,
cl
; DA QUI IN POI VENGONO ESEGUITE DELLE
OPERAZIONI
:00401221 mov edi,
ecx
; MATEMATICHE SUL CODICE DA NOI INSERITO
:00401223 mul edi
:00401225 sub al, 25
:00401227 add al, cl
:00401229 xor al, byte ptr [ecx+00402000]
:0040122F mov edx, 00402193
:00401234 mov ebx, dword ptr [0040219F]
:0040123A xor ebx, edx
:0040123C mov edx, 00402183
:00401241 xor ebx, edx
:00401243 add ebx, ecx
:00401245 add al, byte ptr [ecx+00402000]
:0040124B xor bl, byte ptr [ecx+00402000]
:00401251 shl al, 02
:00401254 ror al, 04
:00401257 shr bl, 03
:0040125A rol bl, 08
:0040125D xor bl, al
:0040125F xor bl, byte ptr [00402002]
:00401265 xor bl, cl
:00401267 rol bl, 08
:0040126A add bl, al
:0040126C sub al, 05
:0040126E sub bl, al
:00401270 mov byte ptr [ecx+0040218F],
al ; INSERISCE IL CODICE CALCOLATO NELLA MEMORIA
:00401276 inc ecx
:00401277 jmp
00401215
; RISALTA ALL'INIZIO
Una volta finata la procedura ci troveremo nel seguente codice:
:00401279 xor ecx,
ecx
; AZZERA ECX
:0040127B mov al, byte ptr
[ecx+0040218F] ; METTE IN AL IL PRIMO NUMERO hex CALCOLATO
; NELLA RUTINE PRECEDENTE
:00401281 test al,
al
; CONTROLLA SE ABBIAMO FINITO
:00401283 je
00401331
; SALTA SE ABBIAMO FINITO
:00401289 cmp al,
66
; QUESTE RIGHE DI CODICE CONTROLLANO CHE TUTTO
; SIA CORRETTO SE è COSI' VIENE ESEGUITO IL SALTO
; JL 00401326
Dunque mica è vero?? mica controllano che il codice sia
corretto!!! NdQue
:0040128B jg 0040131B
:00401291 cmp al, 30
:00401293 jl 00401326
E quindi ci troveremo qua:
:00401326 add al,
18
; SI RIMANE IN QUESTA PROCEDURA FINO A QUANDO
; CMP AL,30 NON E VERIFICATA E QUINDI SI SALTA
; ALLA LOCAZIONE 00401299
Ma ancora non l'avete capito? Questa routine serve per
trasformare il codice ottenuto in un carattere ASCII valido NdQue
:00401328 cmp al, 30
:0040132A jl 00401326
:0040132C jmp 00401299
Vedendo il codice sopra scritto si può dire che viene costruito il codice corretto da inserire nella seconda casella che verrà memorizzato in........ indovinate dove guardate il codice qui sotto riportato
:00401299 inc ecx
:0040129A mov byte ptr [ecx+004021A7],
al ; ECCO DOVE MEMORIZZA IL CODICE GIUSTO
:004012A0 jmp
0040127B
; ESEGUE IL PROSSIMO CARATTERE
Una volta finito questo loop trovremo nella locazione 004021A7 il codice corretto, voi direte come faccio a esserne così sicuro, guardate qua sotto............
:00401331 xor ecx, ecx
:00401333 mov al, byte ptr
[ecx+004021A7] ; CARICA IN AL IL CONTENUTO DI ECX+004021A7
:00401339 test al,
al
; CONTROLLA CHE AL NON SIA A 00h
:0040133B je
004012C8
; SALTA SE AL E' 00h
:0040133D mov ah, byte ptr
[ecx+004021A8] ; CARICA IN AH IL CONTENUTO DI ECX+004021A8
:00401343 je 004012C8
:00401345 cmp ah,
al
; CONFRONTA AL CON AH
:00401347 inc ecx
:00401348 inc edx
:00401349 jne
004012BA
; SALTA SE AL È DIVERSO DA AH
:004012BA mov byte ptr [ecx+00402173],
al ; MEMORIZZA IL CONTENUTO DI AL
:004012C0 mov byte ptr [ecx+00402174],
ah ; MEMORIZZA IL CONTENUTO DI AH
:004012C6 jmp
00401333
; CONTINUA
Al termine del loop il programma ci manderà alla locazione 004012C8 e qui ne vedremo
delle belle :))))))
Nella rutine sottostante il programma legge il codice da noi inserito con quello costruito
dal programma vediamo come.....
:004012C8 push 00000019
:004012CA push 004021A3
:004012CF push dword ptr [004020DB]
:004012D5 User32!GetWindowTextA
:004012DA xor ecx, ecx
:004012DC mov eax, dword ptr [ecx+004021A3]
; CARICA IN EAX IL CONTENUTO DI 004021A3
:004012E2 mov ebx, dword ptr [ecx+004021A8]
; CARICA IN EAX IL CONTENUTO DI 004021A8
:004012E8 inc ecx
:004012E9 cmp eax,
ebx
; CONFRONTA EAX CON EBX
:004012EB jne
004012A2
; SALTA SE IL CONFRONTO E' ERRATO
Prima di continuare con il programma diamo un'occhiata alla locazione 004021A3 con il
comando D 004021A3....
cosa vedete, e già proprio il numero che voi avete inserito quindi nell'altra locazione
di memoria cosa ci sarà......
0030:004021A3 31 32 33 00 12 ........... 123........
ahahahaha il codice corretto da inserire, fate un D 004021A8 e annotate i numeri che vi ho segnato in giallo qui sotto
0030:004021A8 39 32 33 00 00 ........... 923........
Cancellate tutti i breakpoint che avete inserito e premete F5 il programma vi dirà, CHE PIZZA!!!! :)))), che non siete registrati ma non importa perchè ora sapete che al nome aaa corrisponde il codice 923 provate a inserirli e premete REGISTER et voilà!
Vi domanderete che bello ho trovato un codice, ma se volessi cambiare nome da aaa a pio per
trovare il suo codice devo rifare tutto questo casino.
No basta creare un keymaker cioè un generatore di codici specifico
per questo programma, come fare credo che per chi sa scrivere in assembler è molto
semplice basta ripetere nel keymaker la procedura che il programma usa per creare il
codice
e il gioco è fatto, per altri linguaggi non saprei che dire :(((((
A dimenticavo la procedura che crea il codice per questo programma l'avete capita qual'è......no guardate i primi tre pezzi di codice all'inizio di tutto :)))))
qua cè il mio KEYMAKER
.code
XOR ECX,ECX ; AZZERA ECX
INIZIO:
CMP
ECX,03h
; CONFRONTA ECX 03 QUESTO SERVE SE UNA HA
; INSERITO DALLA TASTIERA GIA 3 CARATTERI
JZ
CODICE
; SALTA SE ECX E' = 03
MOV
AH,01h
; FUNZIONE 01 DELL' INT 21 ASPETTA UN TASTO
INT 21h
INC
ECX
; INCREMENTA ECX
CMP
AL,0Dh
; CONTROLLA SE è STATO PREMUTO L'ENTER
MOV BYTE PTR
[ECX+01h],AL
; METTE IL TASTO PREMUTO NELLA LOC. DI MEM ECX+01
JNZ
INIZIO
; SALTA
MOV
AH,02h
; FUNZIONE 02 DELL' INT 21 MOSTRA IL TASTO PREMUTO
MOV DL,AL
INT 21h
CODICE:
; CI TROVIAMO QUA QUANDO O È STATO PREMUTO ENTER
; O ABBIAMO INSERITO 3 CARATTERI
; DA QUA IN POI È LA STESSA PROCEDURA DEL PROGRAMMA
; CHE E UTILIZZATA PER CALCOLARE IL CODICE
XOR EAX,EAX
INC ECX
MOV BYTE PTR
[ECX+01h],00h
; CARICA DEI NUMERI IN MEMORIA CHE SONO STATI
; UTILIZZATI DAL PROGRAMMA E CHE SERVIRANNO
; PER CRIPTARE I CARATTERI DEL NOME DA NOI
; INSERITO
MOV BYTE PTR [00000010],12h
MOV BYTE PTR [00000011],45h
MOV BYTE PTR [00000012],209
MOV BYTE PTR [00000013],255
XOR ECX,ECX
MOV ESI,00000001h
RIPETI:
; RUTINE CHE ELABORA I CARATTERI DA NOI INSERITI
; E LI CRIPTA COME FA IL PROGRAMMA
MOV AL,[esi+00000001]
TEST EAX,EAX
JZ CALCOLACODICE
XOR AL,CL
MOV EDI,ECX
MUL EDI
SUB AL,25h
ADD AL,CL
XOR AL,BYTE PTR [ECX+00000010]
MOV EDX,00402193h
MOV EBX,DWORD PTR [00000002]
XOR EBX,EDX
MOV EDX,00402183h
XOR EBX,EDX
ADD EBX,ECX
ADD AL,BYTE PTR [ECX+00000010]
XOR BL,BYTE PTR [ECX+00000010]
SHL AL,02h
ROR AL,04h
SHR BL,03h
ROL BL,08h
XOR BL,AL
XOR BL,BYTE PTR [00000012]
XOR BL,CL
ROL BL,08h
ADD BL,AL
SUB AL,05h
SUB BL,AL
MOV BYTE PTR [ECX+00000020],AL
INC ECX
INC ESIi
JMP RIPETI
CALCOLACODICE:
xor eax,eax
MOV BYTE PTR [ECX+00000020],00h
MOV ecx,00000019
CONTINUA:
MOV AL,[ecx+00000001]
TEST EAX,EAX
JZ MOSTRACODICE
RICALCOLA:
add al,18h
cmp al,30h
JL RICALCOLA
mov byte ptr [ecx+00000001],al
INC ecx
JMP
CONTINUA
***************** QUA FINISCE LA PROCEDURA DI CALCOLO CODICE
COPIATA PARI PARI DAL PROGRAMMA
MOSTRACODICE:
; CI PREPARIAMO ALLA VISUALIZZAZIONE SUL MONITOR DEL CODICE
; CALCOLATO DAL PROGRAMMA
mov byte ptr [ecx+00000001],00h
mov ecx,13h
LETTURACODICE:
mov al,byte ptr
[ecx+00000001] ; CARICA IN AL UN CARATTERE ALLA VOLTA DEL CODICE
cmp
al,00h
; CONTROLLA FINE CODICE
jz
fine
; TERMINA IL PROGRAMMA
mov
dl,al
; FUNZIONE 02 DELL' INT 21 MOSTRA A VIDEO IL CARATTERE
mov ah,2h
int 21h
inc ecx
jmp
LETTURACODICE
; PASSA AL PROSSIMO CARATTERE
FINE:
END
Spero di essere stato abbastanza chiaro :)))) Unlock
|
Lo so di non essere bravo con le parole, e alcune volto faccio una grande confusione, e
per questo che sto facendo questi corsi per vedere se riesco a migliorare, come tutti del
resto, quindi raga portate pazienza :)))))))
Disclaimer |
Home
Anonimato Assembly
ContactMe CrackMe Links
NewBies News Forum Lezioni
Tools Tutorial