Notepad mit Standart Text

Hi,

also da ich noch nicht in der lage dazu war die stelle im windows ( xp ) notepad zu finden in der der text gespeicher wird habe ich mir gedacht ich mache es so:

- Den Text im Programm speichern
- Jump aus dem Programmcode in meinen
- Alle register pushen die benutzt werden
- Schleife -> So lange wie zaehler < textlänge sende Postmessage WM_KeyUP/DOWN mit TestBase + Zähler
- Poppe register
- Springe zurück



das habe ich jetzt soweit versucht, ich springe zu meinem code an dieser stelle

Code:
0100750B     E9 80120000    JMP notepad_.01008790

jetzt schließt sich aber sofort das programm nach dem start :(, zudem zeigt mir mein Stack Window bei dem buchstaben 'o' von Hallo an das der Key 6F benutzt wird, ( DEZ 111 ) also nicht o...
 
Was passt am Titel nicht?

Zum Problem: Nimm einen Opensource Editor, der wäre einfacher zu erweitern. Oder lege dir eine Batch-datei an die als Default deinen Standardtext öffnet und hänge diese in den %PATH%.
 
es geht nicht um die sache das ichs unbedingt mit nem standard text will o.o, ich wills nur hinkriegen ^^ so als kleine assembler übung
 
Mein Rechner kann damit nichts anfangen:
Code:
01008796     E8 962F807B                  CALL kernel32.7C80B731
da meine API Adressen woanders liegen ;). Falls Du Vista hast, entsteht bei Dir dasselbe Problem (DLL Basen sollten bei Vista randomisiert sein, wodurch solche "Direktpatchs" auch auf dem eigenen Rechner nicht mehr stimmen.

Hint: OllyDbg löst automatisch API Adressen auf und schreibt da die Namen hin. Man kann auch selbst sowas schreiben "CALL GetModuleHandleA" und bekommt eine schöne Anzeige präsentiert:
Code:
01008796     E8 062F807B                  CALL kernel32.GetModuleHandleA
wenn man allerdings die Opcodes genauer betrachtet, sieht man, dass es ein "direkter" Call ist: E8 062F807B (little endian -> 7B802f06).
Problem: API Adressen sind auf unterschiedlichen Rechnern auch unterschiedlich. Lösung: indirekten Call und IAT nutzen. Sowas: CALL DWORD PTR[ADRESSE].
Beispiel mit Notepad:
Man möchte GetModuleHandleA Aufrufen. Also lässt man sich von Olly alle vorhandenen APIs auflisten (STRG+N). Sieht die Zielapi in der Liste:
Code:
010010CC  .text Import  KERNEL32.GetModuleHandleA
Die Adresse links ist der IAT Eintrag (Import Adress Table) und beinhaltet die richtige Adresse der API Funktion. Die IAT wird bei jedem Start der Anwendung vom PE Loader ausgefüllt und enthält daher stehts aktuelle Adressen. Wenn man also einen indirekten Call ausführt
Code:
CALL DWORD PTR DS:[10010CC]
funktioniert das auch auf anderen Rechnern.

Wozu das ganze: Dein Beispiel ist nicht systemübergreifend ;) (und sollte unter Vista an sich schon zum Fehler führen) . Wenn Du willst, dass andere bei der Fehlersuche helfen solltest Du schon sorgen, dass man zumindest die APIs nicht erraten muss :)
 
Ah danke, das beantwortet schonmal was dieses IAT was ich gelesen hab ist, werd mich mal näher damit befassen ^^ schonmal vielen dank :D

-- Edit: Hab grad gesehen das sind die imports der exe, gibt es zur IAT referenzen die du empfehlen kannst wenn ich zum beispiel imports hinzufügen will?
 
Zurück
Oben