Hallo zusammen,
wenn ich ein Programm mit OllyDbg öffne, zeigt er mir ja den Assembler Code an, der sich aus den Opcodes ergibt. Mich interessiert jetzt, wie Olly das macht, gibt es da ein System hinter?
Angenommen ich möchte alle push eax in push ecx umwandeln, dann kann ich ja nicht einfach in dem Programm nach allen vorkommen von 0x50 suchen und gegen 0x51 ersetzen. Schließlich könnte der Wert auch zu einem Jump oder etwas anderem gehören. Demnach müsste ich das erste Byte der Opcodes doch einlesen und entscheiden, wie viele weitere Bytes noch zum Mnemonic vom ersten Byte gehören. Falls es sich um ein Mnemonic handelt, dass nur aus einem Byte besteht und dem Wert 50 entspricht, könnte ich es in 51 umwandeln.
Oder Angenommen, ich möchte alle CALL aufrufe auflisten. Da besteht das selbe Problem. Demnach müsste ich die Opcodes analysieren und herausfinden, zu welchem Mnemonic sie gehören. Wie würdet ihr das angehen?
gruß seux
wenn ich ein Programm mit OllyDbg öffne, zeigt er mir ja den Assembler Code an, der sich aus den Opcodes ergibt. Mich interessiert jetzt, wie Olly das macht, gibt es da ein System hinter?
Angenommen ich möchte alle push eax in push ecx umwandeln, dann kann ich ja nicht einfach in dem Programm nach allen vorkommen von 0x50 suchen und gegen 0x51 ersetzen. Schließlich könnte der Wert auch zu einem Jump oder etwas anderem gehören. Demnach müsste ich das erste Byte der Opcodes doch einlesen und entscheiden, wie viele weitere Bytes noch zum Mnemonic vom ersten Byte gehören. Falls es sich um ein Mnemonic handelt, dass nur aus einem Byte besteht und dem Wert 50 entspricht, könnte ich es in 51 umwandeln.
Oder Angenommen, ich möchte alle CALL aufrufe auflisten. Da besteht das selbe Problem. Demnach müsste ich die Opcodes analysieren und herausfinden, zu welchem Mnemonic sie gehören. Wie würdet ihr das angehen?
gruß seux