CrackMe-Asm #3 - By Predator [SOLVED By Whivel]

Stato
Discussione chiusa ad ulteriori risposte.

Predator

Utente Storico
11 Giugno 2007
3,203
47
1,268
900
Ecco il mio terzo crackme scritto in assembler :)
ho dato un nome generico perchè non so come chiamarlo :D
Rulez:
fare in modo che appaia il messaggio "OK! Good work reverser :)" che è contenuto nel programma stesso, pertanto niente bari con hex editor :D

Fifficolta': 1 su 10 (causa bug che lo rende facile :( )

DOWNLOAD:
http://www.nexenteam.net/predator/reversing/crackme/CrackMe-Asm3.rar

Predator
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

Allora, a parte il fatto che io so pochissimo di reversig di crack_me(essendo abituato a reversare malware) ho più meno capito in che ordina chiama le api di sistema(credo):

1)fa un GetModuleHandle
2)Fa un CreateProcess
3)poi fa varie chiamate varie(alla memoria ecc)

Questo è interessante:
Codice:
aProva          db 'PROVA',0
aBase_exe       db 'base.exe',0
.aInt3EventAtX   db 'INT 3 Event at %X',0
aDebuggingTermi db 'Debugging Terminated',0
.aDebugger       db 'Debugger',0
aSystemKernelIn db 'System Kernel INT3 Event',0
aImpossibileApr db 'Impossibile aprire il processo in fase di debug',0
aImagebaseXh    db 'ImageBase: %Xh',0
aKernel32_dll   db 'kernel32.dll',0
aGetcommandline db 'GetCommandLineA',0
aGetmodulehandl db 'GetModuleHandleA',0
aCreateprocessa db 'CreateProcessA',0
aResumethread   db 'ResumeThread',0
aWriteprocessme db 'WriteProcessMemory',0
aExitprocess    db 'ExitProcess',0
aEnddialog      db 'EndDialog',0
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

ops ho lasciato cose inutili tipo
aProva db 'PROVA',0
aBase_exe db 'base.exe',0
.aInt3EventAtX db 'INT 3 Event at %X',0

spetta che elimino.. altrimenti protano solo confusione.
ok riuppato. scusa ma ho visto che quelle istruzioni stavano portando fuori strada.
in pratica inizialmente volevo mimetizzare le api poi ho detto "chi se ne frega", pertanto quelle stringhe sono ormai inutili.
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

si l'ho fatto in 2 occasioni, quando un amico fu appestato dovevo capire cosa faceva.
Ma non centra con il crackme :D
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

Aggiornamento:
ho trovato un bug nel mio crackme, che lo rende una puttanata da risolvere...
va bhe, lascio come sta pazienza :(
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

per i bari, stavi pensando a me^^ ahahahah



hai ragione fin troppo facile..... purtroppo non sapendo cosa volevi fare non so qual'è il baco, ma di sicuro un byte patchato (dopo il dumping, anche se non serviva) è poco, soprattutto con la facilità con cui si arriva....

Questo è il crackme dumpato e crackato
[attachment=809]

questo è il crackme crackato senza dump (come dice il nome centra lo xor)
[attachment=812]
 
RE: CrackMe-Asm #3 - By Predator [UNSOLVED]

Urka Whivel che lusso doppia soluzione, è il top che potevo sperare :D
 
Il bag consiste nel fatto che ho scazzato una istruzione e pertanto al GetThreadContext e la SetThreadContex non mi sono funzionati (perchè gli ho passato un valore a null), a causa di questo non ho potuto passare un parametro determinante in eax e non ho spostato l'entry point come invece desideravo, lasciandolo all'originale 401000, identico al file origine invece io l'avevo pensato modificato.
Questo ha tolto tutta una parte di ricostruzione.
Pazienza per questo crackme

Preddy
puoi verificarlo... dopo il get e set context non cambia nulla.
 
lo avevo notato infatti..... ma non ho dato molto peso......
l'entry point lo avresti voluto spostare nella call che fa lo xor?
 
lo xor lo fa dal programm origine, ma l'avrei voluto spostare per il dump. Cosi' che il dump anche se corretto sarebbe dovuto essere corretto. Inoltre non ha passato il context di eax che ha semplificato lo xor.
 
Predator: visto che hai fatto(a parte quel bug) un programma molto sicuro e molto perfezionato che ne diresti di rilasciarci il source? cosi ne apprenderei di più sull'assembly che è una programamzione che sto imparando da un po di tempo
 
bhe molto sicuro non direi! dovrei sistemare quel bug per far raggiungere il grado di difficolta' che desideravo (che non è poi tanta).
Qui sono al lavoro e non ho il sorgente a portata di mano cmq è facile da spiegare
ci sono due file uno è l'origine e uno incorporato come risorsa
il file origine crea un thread sospeso. Un thread di se' stesso.
rende scrivibile le aree della memoria con virutalprotect
poi legge le informazioni incorporate,ed inizia a scriverne il contenuto.
in pratica il processo corrente viene quasi completamente sostituito da uno nuovo.
eccetto per il dialogo. contenuto negli ultimi 4000 byte.
da qui sposta l'entry point dallo standar 401000 ad un altro (mi pare 40101D ma non ricordo bene) rilascia il processo appena creato, questo si decrypta grazie ad una banalissima operazione di xor,
uso un RET per simulare un jump e farlo ripartire a 401000.

pero' se non avessi scritto quei bug sarebbe andata diversament :D
Per uno che deve iniziare con l'assembler non è fattibile partire da argomenti di media difficolta', occorrono le basi. Cmq appena lo sistemo ti posso passare il sorgente in pvt.
 
ah..... io l'ho dumpato con l'attach..... quindi si era già decrittato LOL
l'ep l'ho azzeccato quindi ahahah
 
vabbè l'entry point per programmi del genere, il cui codice eseguibile si gira su una 50 di righe, non è molto difficile da trovare....
 
c'è la guida nell'apposita sezione.... -.-

cmq ti faccio i miei vivi complimenti whivel sei grande :)
 
stiffmeister93 ha detto:
Predator ha detto:
si effettivamente volendo bastano 5 minuti di pazienza per sfogliare tutte le righe ^^

raga mi potete spiegare cm si reversa??

Tu sei il tipo del link al sito porno, non pensavo ti facessero l'unban...cmq nei tuoi post ti ho già consigliato di leggere il regolamento, ora ti consiglio di leggerti la Lettera ai principianti e scoprirai che è buona educazione presentarsi prima di postare e scoprirai anke che prima di postare domande inutili è consigliato usare la funzione "Cerca".
 
stiffmeister93 ha detto:
raga mi potete spiegare cm si reversa??
prendi un programma che fa da debugger (esempio Ollydbg) e ci carichi dentro l'eseguibile che intendi reversare,
cosi' hai fatto il reversing di quel eseguibile.
 
Stato
Discussione chiusa ad ulteriori risposte.