C#/C++ dll injection / hooking

  • Hey StageTwo Coder,


    Ich bin dabei eine 32-bit DLL in einen 32-bit Prozess auf einem 64-bit System zu injecten.
    Die DLL enthält einen hook.


    So nun zu meinem Problem. Ich kann die DLL zwar erfolgreich injecten (MessageBox erscheint), jedoch wird der hook nicht durchgeführt.
    Ich finde das sehr mysteriös, denn wenn ich einen in C++ geschriebenen Injector nehme, dann funktioniert das ganze und der hook greift.
    Habe schon etliche C# Injectoren aus dem Internet getestet und keiner geht. Mein eigener auch nicht.


    Habt ihr einen Rat?


    Kuh :)


    Code:

  • Es ist eine C++ DLL. Ich versuche sie von einem C# Programm aus in einen Prozess zu injecten. Das klappt auch, wie oben beschrieben, aber der hook wird einfach nicht ausgeführt.
    Und ich versteh einfach nicht wieso. C++ Injectoren klappen ohne weiteres.


    Kuh :)


    Wenn mal wer drüberschauen möchte: 535 889 443 | 7968

  • Hier mal meine Klasse vom alten Silkroad Zeug , die hat immer 100% funktioniert(DoInject(Process,DLLPath)). Da ist evtl noch unützes Zeug dabei, hatte jetzt keine Lust was rauszustreichen

  • Vielen Dank! Ich werds testen.


    E: Geht leider auch nicht. Heißt nicht, dass es generell nicht geht. Eher im Gegenteil. Liegt zu 100% an mir.
    Ich vermute zur Zeit, dass es an der DLL liegt. Vielleicht liegt es an VS11. Ich werde mir mal die 2008er Version von C++ laden und mich dann wieder melden und berichten.


    E2: Nope. Geht nicht.


    E3: Hab den Übeltäter gefunden. VS11 (C#) ist anscheinend bugged. Mit VS10 (C#) geht es ohne Probleme, bei gleichem Code. Kann geschlossen werden. Vielen Dank für die Bemühungen :)

  • Ich meinte auch nicht die DLL die du in den Prozess injecten willst, sondern eine DLL die eine Funktion beinhaltet zum injecten einer DLL. Dann musst du nicht die ganzen WinApi Funktionen importieren (dabei kann man auch einiges falsch machen). So hast du dann eine native C++ DLL die das injecten für dich übernimmt. Ist meiner Erfahrung nach auch um einiges zuverlässiger als das injecten per c# (Kann auch sein, dass mein Code damals zum injecten in c# nicht ganz fehlerfrei war).

  • Ah ja, hab das wohl falsch verstanden :)


    Hab diesen Thread mal wieder öffnen lassen, weil es doch am Code lag und nicht an VS11.
    ThreadState des Prozesses war auf Sleep gesetzt :'o