Mit python .exe patchen?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

cruzz hat geschrieben:Okay danke für die opcodes... aber wie finde ich offset?
Durch Zerlegen/Deassemblieren des Binaries: https://en.wikibooks.org/wiki/X86_Disas ... able_Files
cruzz
User
Beiträge: 16
Registriert: Sonntag 5. Juli 2015, 14:55

Ich bin mit Google auf das Programm "IDA Pro Free" gestoßen.
Finde aber nichts dass mir weiter hilft. Möchte mich jetzt aber nicht geschlagen geben.
Kann mir noch jemand Tipps geben wie ich Offsets finde?

Finde nur sowas wie "push offset byte_10136CF" ... Kann aber mit sowas nichts anfangen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@cruzz:
Wenn Du das händisch machen möchtest, musst Du die Binärformate und deren Implikation auf das Speicherlayout beim Laden von Executables nachvollziehen (und rückwärtig anwenden). Links zum Einlesen habe ich Dir gegeben. Wenn Du diesen Aufwand scheust, gehts nur mit fertigen Tools wie OllyDbg und Konsorten. Ein Grundverständnis dessen, was da eigentlich passiert, ist damit aber auch nötig.
cruzz
User
Beiträge: 16
Registriert: Sonntag 5. Juli 2015, 14:55

okay...
Hab es jetzt soweit geschafft dass das Richtige an der richtigen Stelle steht -
aber leider sonst gar nichts :?
Liegt wahrscheinlich daran dass ich nicht mit den offsets klar komme.
Aber eine richtige Anleitung dafür gibt es ja irgendwie nicht.

Code: Alles auswählen

with open('calc.exe', 'wb') as f:
        f.seek(71796)
        f.write('jp')
Oder kann es sein dass noch ein Write-Befehl fehlt der alles andere auch noch rein haut?
BlackJack

@cruzz: Ich habe ja den Eindruck das Dir mehr als das mit den Offsets fehlt und Du nicht wirklich weisst was Du da machst. Wenn man den Programmteil eines Binärprogramms für eine bestimmte Prozessorarchitektur patchen möchte, dann sollte man Ahnung von Maschinensprache im Allgemeinen, dem Befehlssatz für die Prozessorarchitektur für die man ein Programm patchen möchte im besonderen, und natürlich vom Datenlayout der Datei für das Betriebssystem oder das Ladeprogramm haben. Und die Schnittstelle für Systemaufrufe muss man auch kennen wenn man solche aufrufen möchte. Also wissen wie die Argumente übergeben werden und wie der Aufruf selbst passieren muss. Das sind alles Sachen die man nicht mal eben so in ein paar Tagen lernt wenn man mit so etwas vorher noch nie etwas zu tun hatte. Normalerweise fängt man bei so etwas mit dem lernen von Assembler an.
cruzz
User
Beiträge: 16
Registriert: Sonntag 5. Juli 2015, 14:55

Verstehe jetzt nicht das Problem. Ist doch alles richtig im HexEditor. Nur d alles andere auch überschrieben wird. Das lässt sich doch sicher vermeiden.( und schon wäre ich glücklich :D ). Solange es funktioniert ist es doch gut. Ich muss ja nicht unbedingt alles perfekt und auf die beste Weise machen.
assem. beherrsche ich die Grundlagen, genauso ist das mit Python.

Ich mein ja nur, wenn ich es "per Hand"(HexEditor) rein schreibe funktioniert es ja auch :)

Wäre es nicht möglich zu sagen:

Code: Alles auswählen

   1 = kopierte bytes von 0 bis 1234
   2 = bytes
   3 = kopierte bytes von 1235 bist 9999(Ende)
   Datei = 1 + 2 + 3
Ich probiere das vielleicht morgen mal aus :)
Zuletzt geändert von cruzz am Dienstag 7. Juli 2015, 23:11, insgesamt 3-mal geändert.
BlackJack

@cruzz: Wie kann denn im Hexeditor alles richtig sein wenn die Datei überschrieben wird‽

Das Problem ist der Modus in dem Du die Datei öffnest. 'wb' ist öffnen zum schreiben im Binärmodus *mit löschen des kompletten Dateiinhalts*.
cruzz
User
Beiträge: 16
Registriert: Sonntag 5. Juli 2015, 14:55

ja ich verstehe aber nicht warum das alles überschrieben wird :)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

@cruzz: es gibt verschiedene Modi, mit der man eine Datei öffnen kann. Du hast einen gewählt, der sagt, lösche den gesamten Dateiinhalt.
cruzz
User
Beiträge: 16
Registriert: Sonntag 5. Juli 2015, 14:55

ok ich werde mich belesen. Danke für eure Hilfe!
Ich denke dass ich das kleine Problem alleine hin bekomme. :lol:
MFG cruz
Antworten