Frage

Windows hat die Fähigkeit, sich zu bewerben Scheiben Anwendungen. SHILS werden verwendet, um API -Aufrufe abzufangen und ihn zu ändern. Zum Beispiel können Unterlagen verwendet werden, um:

  • Ändern Sie die eingehenden Parameter
  • Lügen Sie über die Rückgabewerte
  • Ändern Sie es, um etwas anderes anzurufen

Das Anwendungskompatibilität nahm Sie können einige vorhandene Unterlow in Ihre eigene Bewerbung für einen eigenen Missbrauch beantragen. Hier ist ein Beispiel für eines, das Ihren API -Anruf ignoriert und stattdessen eine völlig andere API aufruft: stattdessen:

alt text

Ich brauche eine Scheibe, die nicht zu den Hunderten von SHIMS Microsoft ist, die bereits geschrieben wurden. Ich brauche einen benutzerdefinierten Shim.

In meinem Fall möchte ich Anrufe abfangen:

GetSystemMetrics(0x1000)

so dass es zurückkehrt 0. Ich kann keine Informationen finden, wie man Windows meine eigene DLL angibt, die die Behebung enthält, die ich benötige. Ich weiß nicht einmal, ob Sie kann Erstellen Sie benutzerdefinierte Scheiben.

Unterstützt Windows benutzerdefinierte Scheiben?

War es hilfreich?

Lösung

Mir ist keine andere Möglichkeit als Microsoft bekannt, eine Appcompat -Shim implementieren zu können.

Vielleicht möchten Sie untersuchen Umleitungen, Es kann die gewünschten Funktionalität liefern.

Andere Tipps

Sie müssen dies aus Raymond Chens Standpunkt sehen. Stellen Sie sich vor, es wäre möglich, dass jemand anderes als Microsoft Kompatibilitätsscheiben schreiben. Immer wenn Microsoft eine Veränderung vornimmt, müssen sie zusätzlich zu all ihren anderen Kompatibilitätsarbeit auch Scheiben für die Scheiben Dritter schreiben, die das Falsche getan haben. Die Rückwärtskompatibilität ist so schwer genug, wie es ist.

Es ist möglich, aber es erfordert etwas Arbeit.

Sie erzeugen die Anwendung mit einem eigenen Launcher -Programm, mit dem die Shim angewendet wird. Sie können dies tun, indem Sie Ihren Launcher den Prozess mit ausreichenden Berechtigungen erstellen, um seinen Speicher zu bearbeiten. Die meisten API-Funktionen beginnen mit einem Zwei-Byte-NOP, dem mehr NOPS vorangegangen ist. Sie können die Zwei-Byte-NOP in einen kurzen Sprung und die vorhergehenden NOPs in einen Weitsprung verwandeln, wo immer Sie wollen.

Eine alternative Lösung, die ich in der Vergangenheit verwendet habe, besteht darin, die ausführbare Datei als DLL zu laden. Dies kann jedoch mehr Arbeit verursachen, da je nachdem, wie pingelig die Anwendung ist. In meiner Situation musste ich die ausführbare Datei als DLL nur für Daten laden und alle meine eigenen Importe ausführen, aber leider war die vorherige Lösung für mich keine Option.

Ich habe auch einmal eine Haken-DLL geschrieben, die ähnliche Prinzipien verwendet, aber das ist nur eine Option, wenn Sie entweder die Quelle zum Laden der DLL oder wenn der Prozess DLL-Plug-Ins unterstützt.

Sie könnten immer Reverse Engineering verwenden, um es zu beheben :), lassen Sie mich wissen, ob Sie Hilfe benötigen

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