|
Soluzione al 6° corso
newbies |
|
08/09/2000 |
by §ensõs |
|
|
Published by Quequero |
|
Ogni problema nasce non con una, ma
infinite soluzioni |
Cerco di dare una soluzione completa passo - passo in modo che tutti, anche i meno esperti possano risolvere questa lezione... Però queste cose le dovresti scrivere 6 cm più sotto, questa è la mia zona franca, il mio piccolo eden, la mia baita isolata, il mio ceppo virale sconosciuto, la mia gomma di scorta, la mia capanna dello zio Tom, la mia stanza nel convento di clausura, ma è sempre invaso da voi.....Arrrrr :))) |
Non basta dire "ole'" per uccidere un toro... |
UIC's form
|
|
UIC's form |
Difficoltà |
(x)NewBies ( )Intermedio ( )Avanzato ( )Master |
|
Ciao a tuzz! Provo a esporre la mia soluzione x questo sesto corso...
Soluzione al 6° corso newbies
Registry sniffing
Written by §ensõs
Tools usati |
Tools usati: Soft-Ice, RegMon, Regedit (di windoze), Calcolatrice (di windoze), Carta, Penna... cervello! :)
Notizie sul programma |
Il programma e' suddiviso in 4 livelli a soluzione successiva, cioe' si accede ai successivo solo se si e' risolto il prededente; regole del gioco: no patch, soluzione dei primi due livelli senza Soft-ice.
Essay |
LIVELLO 1: semplice chiave
* Reference To: ADVAPI32.RegQueryValueExA, Ord:0136h
|
:0040178F FF1594524000 Call dword ptr [00405294]
:00401795 85C0 test eax, eax
:00401797 7415 je 004017AE <-salta se ha trovato il vlore
:00401799 6A10 push 00000010
* Possible StringData Ref from Data Obj ->"Mi spiace non sei l'eletto"
|
:0040179B 6828444000 push 00404428
* Possible StringData Ref from Data Obj ->"Posso solo indicarti la soglia"
|
:004017A0 68D4434000 push 004043D4
:004017A5 8BCE mov ecx, esi
* Reference To: MFC42.MFC42:NoName0088, Ord:1080h
|
:004017A7 E882040000 Call 00401C2E
:004017AC EB5D jmp 0040180B
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401797(C)
|
:004017AE 57 push edi <-arriviamo qui
:004017AF 33FF xor edi, edi <-azzera edi
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004017E5(C)
|
:004017B1 8A041F mov al, byte ptr [edi+ebx] <-valore trovato
:004017B4 8A4C3C18 mov cl, byte ptr [esp+edi+18] <-valore aspettato
:004017B8 3AC1 cmp al, cl <-confronto dei valori
:004017BA 752D jne 004017E9 <-se coincidono continua
:004017BC 83FF07 cmp edi, 00000007 <-ne hai confrontati 8 (il conteggio parte da 0!!) ?
:004017BF 7520 jne 004017E1 <-NO salta, SI vai avanti
Ok, (disabilito i breakpoint con il comando 'bd *'); in 4017B1 il programma carica in AL il primo byte/carattere del valore contenuto nella variablie 'WelcomeToTheRealWorld', ricordate che avevamo inserito 'ciao'? Quindi in AL ci dovrebbe essere 63, che corrisconde al valore esadecimele del carattere 'c'; interessante visualizzare il contenuto della memoria nella locazione EDI+EBX con il comando 'd edi+ebi' che visualizzara, appunto, 'ciao'; nella riga successiva 4017B1 il programma carica in CL un valore, che nella riga 4017B8 viene confontato con il precedente.... ma cosa mai vorra' confrontare il programma? Il valore esatto per caso? Esatto!!! Ma guardiamo cosa contiene la locazione ESP+EDI+18 con il comando 'd esp+edi+18'... umh... 'Trinityy' che guarda caso e' proprio 8 caratteri!! (attenzione la riga 4017BC confonta EDI con 7 ma il conteggio e' partito da 0!!! 0-7 sono otto valori!!)
Ø SOLUZIONE modifico il valore della variabile 'WelcomeToTheRealWorld' in 'Trinityy'... Sei l'eletto! Hai sconfitto Matrix
Livello 4: poco piu' del 3
Clicco su 'Chiave + codice + algo' e controllo il RegMon: leggo un a chiamata a una chiave 'HKCU\AndreaGedoon\Sergej\Rachmaninov' NOTFOUND..
Ø SOLUZIONE: aggiungo le due chiavi in successione, prima 'Sergej' dentro 'HKCU\AndreaGeddon' e poi 'Rachmaninov' dentro 'HKCU\AndreaGedoon\Sergej'
Ø Clicco su 'chiave + codice + algo' e monitorizzo RegMon; adesso c'e' una ricerca alla variabile 'HKCU\AndreaGedoon\Sergej\Rachmaninov\QualBuonVento' non trovata...
Ø SOLUZIONE: aggiungo la variabile e le assegno un valore dummy tipo 'ciao'
Ø Ok, e' ora di riattivare i breakpoint con il comando 'be *'... clicco su 'chiave + codice + algo', Ice dovrebbe poppare e dopo aver premuto F12 rieccomi dentro 'sesto.exe' in questo punto:
* Reference To: ADVAPI32.RegQueryValueExA, Ord:0136h
|
:00401898 FF1594524000 Call dword ptr [00405294]
:0040189E 85C0 test eax, eax
:004018A0 7411 je 004018B3 <-salta se ha tovato il valore
:004018A2 6A10 push 00000010
* Possible StringData Ref from Data Obj ->"E' l'ora del te?"
|
:004018A4 6808464000 push 00404608
* Possible StringData Ref from Data Obj ->"Decisamente il quadro non "
|
:004018A9 68D4454000 push 004045D4
:004018AE E9B3000000 jmp 00401966
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004018A0(C)
|
:004018B3 8BFE mov edi, esi <-eccoci qui
:004018B5 83C9FF or ecx, FFFFFFFF
:004018B8 33C0 xor eax, eax
:004018BA 33D2 xor edx, edx
:004018BC F2 repnz
:004018BD AE scasb
:004018BE F7D1 not ecx
:004018C0 49 dec ecx<-ritorna la lunghezza della stringa inseria in 'QualBuonVento'
:004018C1 7419 je 004018DC<-se e' 0 salta
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004018DA(C)
|
:004018C3 8A0432 mov al, byte ptr [edx+esi]<-metti in AL un carattere della stringa: ESI punta all'inizio della stringa, EDI asume i valori da 0 alla lunghezza della stringa e fa da indice
:004018C6 8BFE mov edi, esi <-mette in EDI l'indirizzo della stringa
:004018C8 02C2 add al, dl <-somma al valore del carattere quello del proprio indice
:004018CA 83C9FF or ecx, FFFFFFFF
:004018CD 880432 mov byte ptr [edx+esi], al<-sovrascive in memoria il contenuto della stringa con il nuovo valore
:004018D0 33C0 xor eax, eax <-azzera eax
:004018D2 42 inc edx <-incremente l'indice
:004018D3 F2 repnz
:004018D4 AE scasb
:004018D5 F7D1 not ecx
:004018D7 49 dec ecx <-ecx contiene la lunghezza della stringa
:004018D8 3BD1 cmp edx, ecx<-confronta l'indice con la lunghezza della stringa
:004018DA 72E7 jb 004018C3<-fin che e' minore salta
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004018C1(C)
|
:004018DC 8BFE mov edi, esi<-metti in edi l'indirizzo della stringa
:004018DE 83C9FF or ecx, FFFFFFFF
:004018E1 33C0 xor eax, eax<-azzera eax
:004018E3 33D2 xor edx, edx<-azzera edx
:004018E5 F2 repnz
:004018E6 AE scasb
:004018E7 F7D1 not ecx
:004018E9 49 dec ecx<-ecx contiene il valore della lunghezza della stringa
:004018EA 7416 je 00401902<-se e' nullo salta
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401900(C)
|
:004018EC 8A0432 mov al, byte ptr [edx+esi]<-metti in AL un carattere della stringa: ESI contiene l'indirizzo dell'inizio della stringa, EDI fa da indice
:004018EF 8BFE mov edi, esi<-metti in edi l'indirizzo della stringa
:004018F1 02D8 add bl, al<- BL = BL + AL cioe' volta per volta vengono sommati tutti i valori dei caratteri della stringa e salvati in BL
:004018F3 83C9FF or ecx, FFFFFFFF
:004018F6 33C0 xor eax, eax<-azzera eax
:004018F8 42 inc edx<-incrementa l'indice EDX
:004018F9 F2 repnz
:004018FA AE scasb
:004018FB F7D1 not ecx
:004018FD 49 dec ecx<-ecx contiene la lunghezza della stringa
:004018FE 3BD1 cmp edx, ecx<-confronta l'indice con la lunghezza della stringa (sono arrivato in fondo?)
:00401900 72EA jb 004018EC<- fin che e' minore salta
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004018EA(C)
|
:00401902 80FBD1 cmp bl, D1<-confronta il valore ottenuto da tutte le somme con D1 (209 in decimale)
:00401905 7553 jne 0040195A<- se e' diverso salta
:00401907 6A30 push 00000030<-se e' giusto SEI UN BUON CRACKER!
* Possible StringData Ref from Data Obj ->"Good work Mr. Cracker"
|
:00401909 68BC454000 push 004045BC
Figoli!!! Eccoci quasi in fondo! Allora, in due parole cosa fa questo codice? Prende la stringa contenuta nella variabile 'QualBuonVento' e tra la riga 4018C3 e la riga 4018DA ne codifica il valore sommando a ciascun valore dei caratteri quello del' indice della loro posizione cioe' es:
stringa: c i a o (ascii = 63, 69, 61, 6f) indice : 0 1 2 3 ottengo: c j c r (ascii = 63+0=63, 69+1=79, 61+2=63, 6f+3=72)
Poi tra la riga 4018EC e la riga 401900 questi valori vengono sommati tra loro, es:
sommo i valori di cjcr: 63+79+63+72=1b1
stringa di partenza: § e n s õ s - (a7,65,6e,73,f5,73,2d) indici : 0 1 2 3 4 5 6 ottengo : a7,66,70,76,f9,78,33 sommo : 397 calolo il carattere mancante che fa tornare i conti : 3d1-397 = 3a - 7 (tolgo l'indice) = 33 (51d = '3') ole' : §ensõs-3
Riporto anche il fiel .reg che risolve completamente il crackme... e' un riassunto!
------------------------taglia qui e nomina 'sens.reg'------------------
REGEDIT4
[HKEY_CURRENT_USER\AndreaGeddon]
[HKEY_CURRENT_USER\AndreaGeddon\1]
[HKEY_CURRENT_USER\AndreaGeddon\1\2]
[HKEY_CURRENT_USER\AndreaGeddon\1\2\4]
[HKEY_CURRENT_USER\AndreaGeddon\WhatIsTheMatrix]
"WelcomeToTheRealWorld"="Trinityy"
[HKEY_CURRENT_USER\AndreaGeddon\Sergej]
[HKEY_CURRENT_USER\AndreaGeddon\Sergej\Rachmaninov]
"QualBuonVento"="§ensõs-3"
--------------------------taglia qui--------------------------------------
by §ensõs ®2000
|
Spero di non aver scritto cagate!!! Sono un NewBies, hi hi hi! E' da pochissimo che sono iscritto alla UIC e da poco che frequento anche i canali #hackmaniaci e #crack-it e devo ringraziare tutti x la loro infinita disponibilita' e gentilezza! Azz! Pensavo di trovare pesone ostili in canali cosi' specifici e un po' underground... invece ho capito che la cosa che rende queste persone cosi' speciali e' l'infinita sete di conoscenza, la voglia di migliorarsi continuamente e di confrontarsi in tutto quel che riguarda il magnifico modo dell'informatica. Ma cosa ci va a fare la gente in #chat-20?!! ;) ciauz!
Disclaimer |