Frage

Ich suche ein Stück abandonware mit einigem Code patchen.

Die Software ist auf Kohlenstoffbasis, also kann ich nicht einen Inputmanager verwenden (zumindest, ich glaube nicht, ich kann). Meine Idee war es, einen dylib Bezug auf die mach-o-Header hinzufügen möchte, und starten Sie einen neuen Thread, wenn die Initialisierungsroutine aufgerufen werden.

Ich habe mit den mach-o-Header mit einem Hexeditor fügen Sie den entsprechenden Ladebefehl (LC_ LOAD_DYLIB) muckte um.

otool berichtet, was ich zu erwarten, so dass ich bin ziemlich sicher, dass die Datei korrekt formatiert ist.

Load command 63
          cmd LC_LOAD_DYLIB
      cmdsize 60
         name @executable_path/libAltInput.dylib (offset 24)
   time stamp 1183743291 Fri Jul  6 19:34:51 2007
      current version 0.0.0
compatibility version 0.0.0

Um jedoch die binären Start gibt mir die folgenden Fehler

dyld: bad external relocation length

Alles, was ich denke, kann dies bedeutet, ist, dass ich die LC_ SYMTAB oder LC_ DYNSYMTAB Abschnitte ...

ändern

Wer irgendwelche Ideen?

War es hilfreich?

Lösung

Ich bin nicht ganz sicher, was Sie erreichen wollen, aber der einfachste Weg, dies zu tun, ist wahrscheinlich ein Gewinde in dem mach Aufgabe zu injizieren, nachdem es beginnt. Eine große Quelle von Informationen auf diese Weise (wie auch Code ausgeführt wird, es zu tun) finden Sie hier: http: // Rentzsch .com / mach_inject / .

Einige Einschränkungen, die Sie beachten sollten:

  1. das mach task_for_pid () -Aufruf notwendig die Mach Port, um die Aufgabe zu bekommen jetzt privleged und erfordert Genehmigung zu nennen. Der Grund dafür ist ziemlich selbstverständlich, aber wenn man auf die Freigabe etwas mit injizierte Code Planung wurden, sollten Sie sich dessen bewusst sein.
  2. Ihr Code wird in demselben Prozessbereich wie die ursprüngliche Anwendung, sondern auf einem separaten Thread ausgeführt werden. Sie werden daher haben vollen Zugriff auf die Anwendung jedoch, wenn es nicht faden bewusst sehr vorsichtig sein, über die Verwendung und Bearbeitung von Daten von außerhalb Ihres injizierte Code. Offensichtlich alle multithreaded Fragen werden hier verstärkt werden, da die Original-Code nie bewusst Ihre Ergänzungen war.

Andere Tipps

Die einfachste Lösung, die beinhaltet nicht die binäre Patchen einfach auf die DYLD_INSERT_LIBRARIES Umgebungsvariable verwenden und dann die Anwendung ausführen.

set DYLD_INSERT_LIBRARIES to /my/path/libAltInput.dylib

Ich gehe davon aus, den Grund der dynamische Linker einen Fehler gemeldet, weil viele Felder in der Mach-O-Dateiformat-Adressen enthalten als vom Anfang der Datei angegebenen Offset so einen weiteren Ladebefehl hinzugefügt würde jede Adresse ungültig. Zum Beispiel finden Sie in den symoff und stroff Einträge in der Mac OS X ABI Mach-O-Dateiformat Referenz .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top