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
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