OLLYDBG E VISUAL BASIC :

SIMULANDO HMEMCPY

Traduzione Italiana : DesTroYer

[email protected]

Published at: http://quequero.org

TEORIA DEL PUNTO HMEMCPY IN OLLYDBG IN XP

Chiariamo un po' il titolo, il tema è trovare nella macchina  un punto che si comporti in XP simile al HMEMCPY di Windows98 in OLLYDBG .Questo punto esiste ed è unico per ogni macchina, conviene perdere 5 minuti per trovarlo ed una volta trovato(ripeto solo una volta), possiamo avere un'opzione simile a hmemcpy per sempre sulla nostra machina, basta solo mettere un BPX in quel punto e  funzionerà tanto in DELPHI, in Visuale BASIC, in ASM in qualunque linguaggio esistente come la HMEMCPY originale.

Lo battezziamo Punto HMEMCPY per distinguerlo dalla HMEMCPY originale di W98, e perché un qualche nome deve avere quando lo menzioniamo nei futuri tutorials.

COME TROVARE IL PUNTO HMEMCPY IN UNA MACCHINA IN XP

Utilizzeremo per trovare il già famoso Punto HMEMCPY il crackme di cruehead poiché per trovarlo altri possono generare eccezioni questo è ideale, una volta trovato può usarsi con qualunque programma, ma per questo tute questo crackme è perfetto per trovare il punto.

Apriamo il Crackme di Cruehead in OLLY, useremo qualche Messagespy per trovarlo, cerchiamo SEARCH, LABEL, in CURRENT Module (CTRL-N) e cerchiamo l'api TranslateMessage.

Bene  facciamo clic destro CONDITIONAL LOG BREAKPOINT ON IMPORT, esce la famosa finestra che riempiamo di questa maniera, MSG==201, abilitiamo il check e in Pause PROGRAM-ON CONDITION (Ci sono però casi che con  MSG==201 non funziona, in questo caso scrivere MSG==202).

Facciamo partire il programma RUN (F9)

Una volta che appare la finestra del crackme riempiamo i campi con

Name: narvaja

Serial:       1A2B3C4D5E

CHE È UN SERIALE FACILE DA CERCARE IN MEMORIA E CHE NON SI RIPETE.

Premere il bottone OK e 'OLLYDBG a breakka nel BP condizionale che abbiamo immesso

Ora andiamo a View-Memory e lì facciamo clic tasto destro - search in tutta la memoria per vedere dove possa trovarsi il seriale che abbiamo inserito.

Troviamo il nostro seriale che cerchiamo, evidenziamo il seriale  e mettiamo un BP MEMORY ON ACCESS.

Fai ripartire il programma e dove Olly si ferma quello è il mio Punto HMEMCPY

77D29303 F3:A5 REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS>

Nella mia  macchina questo è il mio punto hmemcpy, usa il crackme di cruehead solo per trovarlo. Ora che sappiamo dove si trova utilizzeremo alcuni esempi affinché vediamo come utilizzarlo, ricordarsi di annotare la posizione..

UTILIZZO DEL PUNTO HMEMCPY CON ESEMPI

Incominciamo con uno facile e che non è tanto necessario il hmemcpy il crackme 2 di CoSH.

Lo carichiamo nell'OLLY diamo RUN, e appare la finestra per inserire il seriale,

In Windows 98 metteremmo in questo momento un HMEMCPY,  bene qui metteremo un BP in Punto HMEMCPY, come quello in user32, andiamo in VIEW-eseguibile, faccio doppio clic in user32 affinché appaia sullo schermo e lì goto espressione = 77d29303 che è il mio HMEMCPY nella mia macchina, e diamo RUN.

Nell'immagine sopra il posto del BP nel Punto HMEMCPY della mia macchina.

Run e premere  il bottone per accettare il seriale.

Olly brekka nel Punto HMEMCPY  e nell'immagine sotto vediamo quando brekka.

La prima volta che brekka è quando accetta il nome che abbiamo inserito e che vediamo nei registri in ESI il mio nome NARVAJA, RUN di nuovo affinché possiamo vedere quando il programma accetta il seriale.

seriale lo vediamo nei registri la dove Olly brekka poiché è un REP MOVS sappiamo che il seriale sarà messo in EDI cosicché nei registri evidenziamo EDI, FOLLOW In DUMP , steppiamo un poco fino a passare il REP come succedeva nel HMEMCPY di win98 ed abbiamo già la chiave conservata nel suo posto definitivo affinché la possa usare il programma nello stesso posto che la troviamo usando hmemcpy in W98.

Ora che abbiamo localizzato dove viene preso e immesso il seriale il crackme è una fesseria risolverlo, mettiamo lì un BPM nel seriale falso nel dump, Breakpoint memory on access, e diamo RUN

Per un paio di volte dopo arriviamo al punto di comparazione del seriale in:

Questo è stato il nostro primo esempio, il secondo non può risolversi senza forza bruta ed è il nivel3 di BrainCrack se proviamo a mettere il BP nel Punto HMEMCPY, Olly brekka ogni volta che inseriamo una cifra e vedremo dove guardare per seguirla nel caso in cui si potesse trovare la chiave senza bruteforce.

Facciamo partire il crackme ed appare la finestra come sopra, vado a view eseguibile USER32 doppio clic e metto il BP nel mio caso in 77d29303 che è il mio Punto HMEMCPY.

Do RUN e inseriamo come prima cifra  9 e vediamo che il controllo passa ad Olly fermandosi nel punto hmemcpy.

Sotto vediamo l'immagine di quando inseriamo la seconda cifra dando RUN di nuovo affinché si veda meglio.

In ESI si vede 99 che è quello che abbiamo inserito fino ad ora e come lo conserva sempre in EDI cosicché EDI, FOLLOW In DUMP, steppiamo fino a passare il REP di sotto e

Si vede nel DUMP il 39 39 che corrisponde a 99 che sono le due cifre che abbiamo immesso se fosse stato un crackme per trovare la chiave a mano metteremmo lì un BPM e segiremo di volta in volta in quanto  è difficile in questi crackmes che controllano lettera a lettera, sapere dove mettono la chiave.

Ultimo Esempio l'IDESK

L'Idesk è un programma fatto in DELPHI e compresso con UPX, nel mio FTP è il programma numero 3 del corso vecchio e l'ho  craccato in 5 minuti in Windows 98 con hmemcpy tuttavia in XP senza HMEMCPY si complica, non dico che sia impossibile ma l'avere hmemcpy lo facilita molto, Analizzandolo con DeDe questo non mostra nessuna informazione e con hmemcpy il crackme si imballa in 5 minuti.

L'apriamo in OLLY e gli diamo RUN e  configurimo l'utente di accesso accettiamo e

lì facciamo clic nella freccia per sotto

Quindi nel segno di domanda Circa IDESK e dopo in Registrare occhio che qui è alla rovescia cioè il seriale è il primo mentre il nome è il secondo quindi attenzione.

Bene sappiamo già come mettere un BP nel Punto HMEMCPY quindi non ripeterò come fare, premi su Registrar.

Bene utilizziamo la stessa procedura che abbiamo visto nel crackme precedente facciamo in EDI-FOLLOW In DUMP e steppiamo fino a passare il REP di sotto ed vediamo che viene preso il seriale.

Lo vediamo nel DUMP lo evidenziamo e mettiamo un BP MEMORY ON ACCESS diamo RUN.

Vediamo che il programma si ferma di nuovo nel hmemcpy per mettere il nome ed una seconda volta per tornare a mettere il seriale nello stesso posto.

Gli diamo RUN e si ferma qui nel programma che è dove prende la prima cifra del seriale  in una routine che ci fa vedere il valore hex in EAX del nostro seriale.

00402E0F 8A1E MOV BL,BYTE PTR DS:[ESI]

Usciamo steppando dal ret e la prima linea uscendo stiamo già nella routine di comparazione:

004C9DB6 A3 04B55200 MOV DWORD PTR DS:[52B504],EAX

004C9DBB A1 00B55200 MOV EAX,DWORD PTR DS:[52B500]

004C9DC0 3B05 04B55200 CMP EAX,DWORD PTR DS:[52B504]

In 4C9DC0 viene comparato F1ACA che è il valore hex di 989898 con 7Ce55

È il valore hex della chiave vera 511573.

Un'ultima cosa quelli che hanno una command bar possono digitarlo lì direttamente mettendo il Bp  del hmemcpy, senza dovere cercarlo in user32.

Ricardo Narvaja

Traduzione Italiana : DesTroYer

[email protected]