patchen / cracken - einige fragen eines beginners.

hallo.

seit gestern befasse ich mich ein wenig mit dem thema "crackmes" - es ist wirklich sehr interessant und ich habe schon einiges geschaft. allerdings werden sich die meisten vorstellen koennen dass man in einem tag nicht so grosse fortschritte macht auch wenn man mit maschinensprache und C schon einige erfahrungen gemacht hat.

ich habe nun auf crackmes.de einige crackmes runtergeladen (einfachste stufe) und erstmal als kleine uebung mit dem patchen begonnen. wie die meinsten sich denken koennen ist das recht einfach denn man muss eigentlich nur ein jne oder je an der richtigen stelle in das gegenteilige umaendern ;-)

und da waeren wir auch schon bei dem hauptproblem, so wie ich das ganze verstanden habe braucht man dazu nur ollydbg. ich mache das ein wenig komplizierter:

zuerst erstelle ich mir mit objdump (aus dem mingw) einen hexdump (objdump -s datei.exe) und dann einen disassemblierten code (objdump -s datei.exe). diese zweil komandos leite ich dann in einzelne dateien um (nennen wir sie mal crackme-hexdump.txt und crackme-code.s, die namen sollten fuer sich sprechen).

So, bisher war es noch ganz einfach und ueberschaubar, hoffe ich.
Der naechste schritt ist dann dass ich im hexdump den string suche der ausgegeben wird wenn ein falscher serial eingegeben wurde ("wrong serial") der sich an adresse 0x123456 befindet. Wenn dieser string gefundn wurde oeffne ich die code-datei und suche nach der stelle an der diese adresse verwendet wird:

push 0x123456
call 0x404321

Was diese zeilen zu sagen haben ist klar, da wird die message ausgegeben, dass der eingegebene serial nicht funktioniert. wenn man die sprung-anweisung sucht die und zu der funktion bringt und sie ins gegenteilige aendert hat man die anweisung auch recht einfach gepatcht. also was diesen vorgang betrifft liege ich recht sicher. jedoch habe ich eine frage: geht das auch unkomplizierter?

so wie ich das bisher verstanden habe ist der funktionsumfang von ollydbg sehr gross und es muss sichr eine funktion in dem programm geben die einem hilft diese stelle zu finden in der der serial geprueft usw wird indem ollydbg einem sagt an welcher stelle das programm zur zeit steht bei der die eingabe abgefrag wird. etc.

Bisher blieb mir zum patchen nur meine oben genannte selbst improvisierte methode an der ich ollydbg nur benutze um die sprung-anweisung zu manipolieren (aber das koennte man auch mit einem hex-editor, deswegen vermute ich mal dass olly vllt ein paar tricks drauf hat die mir das weniger kompliziert machen)


danke fuer die geduld die ihr aufbringen musstet um diesne nicht ganz so kurzen post zu lesen. hoffe es ist jemand da der mir ein paar infos geben kann.

lg, koko
 
Ja, mit OllyDbg geht das in der Tat einfacher:
Im CPU-Fenster(wo der Code steht) Rechtsklick->Search for->all referenced text strings. Dann einfach auf den gewünschten String doppelklicken und man ist an der Stelle wo er verwendet wird. Nun muss man sich dort ein wenig nach dem bedingten Jump umsehen.
Dies klappt natürlich nur bei eher einfach gestrickten CrackMes, bei die gesuchten Strings("falsche/richtige Serial") auf diese Weise auffindbar sind und die Fehlermeldung nicht irgendwo weit entfernt von der Prüfung ausgegeben wird.
Eine andere Methode wäre es, nach der Stelle zu suchen, an der die Eingaben eingelesen werden. Bei Windows-Apps mit GUI sollte man Breakpoints auf APIs wie GetWindowTextA, GetDlgItemTextA oder SendMessageA setzen.
Bei Konsolenanwendungen müsste man sich nach Calls zu fgets/scanf/etc. umschauen(Man muss aber noch mit IDA(google "ida freeware") eine Signatur für die verwendete Standardbibliothek anwenden, wenn diese Funktionen statisch gelinkt wurden. Einige Kompiler wie MinGw verwenden aber auch die Funktionen aus der msvcrt.dll was diesen Schritt überflüssig macht)
 
Hallo!

Bin auch gaaanz neu auf dem Gebiet... habe mir gerade den Ollydbg geladen... schaut doch ganz nett aus ;-)

habe ein Programm, welches, wenn man über ein PullDown-Element was anderes aufwählt (COM-Schnittstelle) eben auf diese eine Verbindung aufbauen will...
ich suche hier schon ca. 6h herum und finde es einfach nicht... das prog ist einfach zu Groß (~5MB) um alles durchzuschauen...

hat jemand ne idee, nach was man hier am Besten sucht oder wie man da vorgeht?

Wäre für jeden Tip dankbar....

Liebe Grüsse
Jörg the beginner
 
@BloddyJörgi: Speicher durchschen wäre eine Idee aber wenn es ein Zahlenwert ist, wird es eher was mit Bedingungen sein, gegen die die eingegebene Nummer geprüft wird.

Ja cracken ist schon interessant und Ollydbg ein wirklich gutes Programm aber schaut euch ruhig um, IDA ist auch ganz nett.
 
YEAH... ich habs geschat *feiern tu*

habe herausgefunden dass es ein Delphi Prog ist und habe denn das "DeDe" angewand ... habe irgendwo davon gelesen, dass man das machen soll.... was das alles an Infos ausgiebt *Hut ab*

ca. 8h vor dem Rechner später... => es ist geschafft...
 
Zurück
Oben