Dll-Injektion & Explorer
-
Jo, du nutzt irgendwelche Frickeleien anstatt was fertiges, sicheres, einfaches.
-
Ja, weil ich halt die Funktionsweise verstehen will...

Und externe Bibliotheken versuche ich eigentlich auch immer zu vermeiden
-
Schlechte Angewohnheit :p
(Hab früher auch so gedacht)
-
Ich habe jetzt zwar eine andere Umsetzung, aber mich würde halt interessieren, warum dieser Fehler auftritt...
Wenn mein (Haupt-)Programm immer im Hintergrund läuft und auf Anfrage in die gerade gestarteten Prozesse injiziert klappt es ja. Nur wenn mein (Haupt-)Programm beendet wird, dann werden die Anfragen nicht mehr bearbeitet und alle gestarteten Prozesse werden eingefroren (da sie vom Hauptprogramm nicht mehr 'aufgetaut' werden)

-
DarkShadow44 schrieb:
Ja, weil ich halt die Funktionsweise verstehen will...

Und externe Bibliotheken versuche ich eigentlich auch immer zu vermeidenFalscher Ansatz!
1. Kann es sein, dass Du niemals auf eine richtig gute Lösung kommst.
2. Kann es sein, dass es Leute gibt die es besser machen, weil Siemehr davon verstehen.
3. Lernt man IMHO am meisten wenn man den Source Code anderer "guter" Entwickler liest.Bei Detours ist der Source-Code dabei. Wenn Du verstehen willst wie man es richtig macht lies diesen Source Code.
-
3. Lernt man IMHO am meisten wenn man den Source Code anderer "guter" Entwickler liest.
Bei Detours ist der Source-Code dabei. Wenn Du verstehen willst wie man es richtig macht lies diesen Source Code.
Schon, aber dabei gibt es halt gleich alles auf einmal. Ich meine, ein kleines Beispiel wäre ja einfach, aber das sind halt gleich 200KB Code auf einen Schlag.

Da tue ich mich dann schon etwas schwer das zu durchsteigen...'Mein' Beispiel ist ja auch aus einem Tutotial, es klappt ja auch. Nur explorer.exe macht Probleme.
Und da jeder Code wohl etwas anders funktioniert, würde mich halt interessieren, was genau bei dem von mir gepostetem Beispiel falsch ist.
Lg,
Dark
-
explorer.exe ruft (bzw. lässt aufrufen via shell32.dll) CreateProcessW mit dwCreationFlags u.a. mit CREATE_SUSPENDED auf.
Folglich ist in dem "neuen" Prozess noch nicht mal kernel32.dll geladen, sondern nur die exe und vielleicht noch ntdll.dll.
Also muß ja in "CreateProcessW2" alles, besonders "inject", nach Aufruf von CreateProcessW schief gehen.
-
3. Lernt man IMHO am meisten wenn man den Source Code anderer "guter" Entwickler liest.
LANGWEILLIG das kann ja jeder !
Selbst ist der gute Programmierer !

-
@HellShadow
Und wenn mein Programm einen Prozess startet klappt das ? Ich meine, ich rufe ja sofort die inject-Methode auf - es klappt wunderbar... oder zumindest stürzt das programm nicht ab und mein code wird ausgeführt
Jetzt bin ich schon ein bischen verwirrt...

-
In einem mit CREATE_SUSPENDED gestarteten Prozess funktionieren viele "bewährte" Sachen nicht, z.B. der ganze Toolhelpsnapshot-Kram.
Versuch einfach mal das Flag zu löschen:
BOOL __stdcall CreateProcessW2( ... { // CREATE_SUSPENDED 0x00000004 dwCreationFlags &= ~4; BOOL b=CreateProcessW( ... }
-
Kleiner Nachtrag: Deine inject-Methode setzt voraus, daß kernel32.dll bereits geladen ist (wg. LoadLibrary, GetProcAddress). Das ist aber in einem mit CREATE_SUSPENDED gestarteten Prozess (noch) nicht der Fall.
Irgendwo in den Untiefen der shell33.dll ruft explorer.exe auch ResumeThread auf.

-
Doch. ntdll.dll und kernel32.dll sind dann bereits geladen.