Named Pipe von injected DLL zu Programm



  • Moin,...

    kurz und knapp: in meinem Programm starte ich eine Named Pipe, dann injecte ich eine DLL in meinen Editor welche wiederum auf meine Named Pipe connecten soll. Dies schlägt aber fehl mit dem Fehler "Der angegebene Pfadname ist ungültig"... der ist aber genau gleich wie beim erstellen. Und wenn ich statt meiner injected DLL das ganze in einer seperaten Task starte funktioniert auch alles ohne Probleme. Das heisst eine andere Task = kein Problem... eine injizierte DLL = findet meine Pipe nicht beim Namen.

    Kann mir da jemand weiter helfen?! Wär supii!

    Gruß serverHorst



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ (auch C++0x) in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Zeig mal Namen und Art und Weise wie Du die Pipe anlegst.
    Welche Rechte hast Du für die Pipe angegeben?
    Läuft Dein Programm als Admin und der Editor nicht?



  • das wäre in meinem Programm:

    #define PIPENAME "\\\\.\\pipe\\dllConnection"
    hPipe = CreateNamedPipe(PIPENAME, PIPE_ACCESS_DUPLEX, PIPE_TYPE_MESSAGE | PIPE_WAIT, 1, 1024, 1024, 5000, NULL);
    if( ConnectNamedPipe(hPipe, NULL) ) {
    /*...*/
    }
    

    und das wäre in der DLL:
    [code]
    #define PIPENAME "\\\.\\pipe\\dllConnection"
    if(!WaitNamedPipe((LPCWSTR)PIPENAME, NMPWAIT_WAIT_FOREVER)) {
    /.../
    }

    wie das mit den Adminrechte ist weiss ich gar nich so richtig. Mein Programm start ich normal aus VisualC++ und die DLL läuft eben im Editor den ich auch normal aus dem Windows Startmenü starte...
    Der SecurityParameter ist NULL was dann die Defaultsicherheitseinstellungen sind. Das könnte womöglich das Problem sein...



  • Ok Adminrechte hat der Editor nicht, wenn ich ihn nämlich mit Adminrechten starte funktioniert meine DLL Injection nicht mehr...



  • Siehe: UIPI


  • Mod

    Was sagt GetLastError, Du hast den Text genannt aber mich würde die error ID interessieren.
    Welches OS?
    Du verwendest einen NULL DACL, das ist nicht gut. Lies mal:
    http://msdn.microsoft.com/en-us/library/aa379286(v=vs.85).aspx

    BTW: Warum verwendest Du nicht einfach CreateFile und machst den WaitNamedPipe nur wenn es notwendig wird, sprich wenn ERROR_PIPE_BUSY auftritt.



  • Win7
    Problem mit der ErrorId ist dass der Fehler ja nur in der DLL auftritt wo ich nicht so einfach Ausgaben machen kann (außer du nennst mir einen Weg ;)), dh ich geb das ganze immer über MessageBoxen aus. Und meine DWORD Errorid lässt sich nicht simple in LPCWSTR casten.

    Bzgl der NULL DACL... NULL bedeutet in dem Sinne jeder kann alles, hab ich das richtig verstanden?! Sicherheit spielt in meinem Fall keine Rolle, von demher würd ich das einfach unbeachtet lassen.

    CreateFile funktioniert ebenso wenig: "Das System findet die angegebene Datei nicht"



  • @Martin: Du wolltest wohl auf das hier verweisen:
    http://blog.m-ri.de/index.php/2007/02/21/uac-und-createnamedpipe-mit-lpsecurityattributesnull/

    AFAIK erlaubt eine NULL DACL nur Zugriff im selber UIPI-Level oder darüber...


  • Mod

    Jochen Kalmbach schrieb:

    @Martin: Du wolltest wohl auf das hier verweisen:
    http://blog.m-ri.de/index.php/2007/02/21/uac-und-createnamedpipe-mit-lpsecurityattributesnull/

    AFAIK erlaubt eine NULL DACL nur Zugriff im selber UIPI-Level oder darüber...

    Genau so ist es!



  • Ok das heisst ich muss nur noch den Securityparameter richtig setzen und alles müsste so funktionieren wie ich das gerne hätte?!
    Dann muss ich jetzt erst mal bei den Securitysachen durchchecken, denn wenn ich mir dieses Beispiel http://msdn.microsoft.com/en-us/library/aa446595(v=vs.85).aspx so ankucke wird mir leicht schwindelig. Ist es wirklich von Nöten so viel Code für so bisschen Securitykrams zusammen zuwerkeln?!?!?!


  • Mod

    Nur wenn Du auch Meldungen bekommst, die die Sicherheit betreffen.



  • Es wird vermutlich deutlich einfacher sein, das ganze mittels Nachrichten (RegisterWindowMessage()) und einem file mapping zu gestallten ...


  • Mod

    fileMappinger schrieb:

    Es wird vermutlich deutlich einfacher sein, das ganze mittels Nachrichten (RegisterWindowMessage()) und einem file mapping zu gestallten ...

    Hängt ganz davon ab, was man machen will. Wenn man auch die Kommunikation zwischen Rechnern später möchte ist der Pipes Ansatz prima.



  • Hängt ganz davon ab, was man machen will. Wenn man auch die Kommunikation zwischen Rechnern später möchte ist der Pipes Ansatz prima.

    Nein eigentlich soll die Kommunikation nur zwischen meinem Prozess und der injizierten DLL stattfinden.

    Werd mir gleich mal die Nachrichten anschauen, danke für den Tipp.



  • Habe mir die mögliche Lösung mit den Messages mal angeschaut.

    In der SendMessage Funktion muss ja ein WindowHandle angegeben werden, wenn ich hier aber richtige lese (MSDN) dann tritt doch bzgl UIPI das gleiche Problem auf oder?

    Message sending is subject to UIPI. The thread of a process can send messages only to message queues of threads in processes of lesser or equal integrity level.

    Hab ich da ein Denkfehler?

    Jetzt sitz ich schon seit 2-3 Tagen nur an dieser "eigentlich" simplen Kommunikation, steh ich derzeit aufm Schlauch oder ist die Interprozesskommunikation unter Windows wirklich so schwer zu erlernen?!



  • serverhorst schrieb:

    Ok Adminrechte hat der Editor nicht, wenn ich ihn nämlich mit Adminrechten starte funktioniert meine DLL Injection nicht mehr...

    Omfg starte Editor und Programm als Admin, dann funktioniert auch das Pipen. Oder was kapier ich da nicht 😕

    Und warum sollte die Injection dann nicht mehr funktionieren... Frickelalarm



  • UIPI greift sowohl für Messages als auch Pipes. Nur bei den Pipes kannst Du eben die Security explizit setzen.

    Das ganz ist nur relevant, wen nDu zwischen Applikationen mit unterschieldichen UIPI-Level kommunizieren willst (also z.B: Service und UI)



  • Omfg starte Editor und Programm als Admin, dann funktioniert auch das Pipen. Oder was kapier ich da nicht 😕

    Und warum sollte die Injection dann nicht mehr funktionieren... Frickelalarm

    wenns so einfach wäre du eumel... der Editor ist natürlich nur zu Testzwecken mein Programm für die Injection, später kann die Task der Injection variieren, somit auch die Adminrechte. Und das von mir geschriebene Programm wird nicht als Admin gestartet. Punkt!

    Das ganz ist nur relevant, wen nDu zwischen Applikationen mit unterschieldichen UIPI-Level kommunizieren willst (also z.B: Service und UI)

    Also nochmal zu Wiederholung, mit der richtigen Securityeinstellung beim Erstellen meiner Pipe kann ich die UIPI-Level unbeachtet lassen?
    Ist es denn auch möglich ein anderes Programm in Sachen Sicherheit herrunter zustufen? Hatte da mal irgendwas mit Tokens gelesen,...

    Aufjedenfall mal Danke für eure Hilfe!

    Gruß serverHorst


  • Mod

    Dann setze DACL und UIPI level und gut ist.
    In meinen Artikel ist ein Sample und die Erklärung ist auch vollständig, dass hat nichts mit Frickeln zu tun.


Anmelden zum Antworten