DLL in EXE einbinden



  • hoi

    kann mir jemand sagen, wie man eine DLL in eine EXE Datei "einbindet"?
    Ich hab in der Schule mal dieses 3D-Pinball von MS gespielt und mein Freund hat dazu zwei Dateien benötigt:

    • eine .DLL
    • eine .EXE Datei, die die DLL Datei ladet

    und natürlich das Space Cadet 3D-Spiel von Micrtosoft.

    Die DLL und EXE müssen miteinander in einem Ordner liegen .. den DLL Source hab ich und ine .EXE auch, aber ich möchte die .EXE selber gestalten, da steht nähmlich "made by Thomas S. aus der 4B" und ich möchte es natürlich anders gestalten und das made by .. weglöschen.

    Zusammenfassung

    Ich möchte auch so eine .EXE machen, die die DLL ladet.

    Sinn und Zweck

    Also zu Beginn möchte ich einmal die Punkte und die Leben(HP) anzeigen lassen, sobald ich die .EXE starte. Den Source hab ich schon, nur brauch ich ein Codebeispiel, wo gezeigt wird, wie ich die DLL in die Exe sozusagen "einbinden" kann.

    Zuerst möchte ich das Fenster finden:

    HWND fenster = NULL; while(fenster == NULL) { fenster = FindWindow(NULL, "3D-Pinball für Windows – Space Cadet"); Sleep(100); } cout << "Pinball wurde gefunden!" << endl;
    // DLL dem Programm bekanntmachen, damit ich die Funktionen von ihr benutzen kann^^
    

    So und wie sag ich der .EXE Datei nun,dass ich die DLL laden möchte?

    Mit freundlichen grüßen. roland 😉



  • Hmm, nen cheat basteln oder wie oder was? - Gehts ums Thema "DLL-Injection" wo google etliches zu ausspuckt und du suchst den passenden Suchbegriff?



  • geeky schrieb:

    Hmm, nen cheat basteln oder wie oder was? - Gehts ums Thema "DLL-Injection" wo google etliches zu ausspuckt und du suchst den passenden Suchbegriff?

    ja ich möchte so in der Art bei Pinball schummeln, ich hoffe,dass dies bei diesem Spiel erlaubt ist 😮

    ich will es nähmlich für kleine Scherze bei einem Freund verwenden ^^

    zum DLL-Iniect oder wie das heißt, ich hab das zwar nur für andere Spiele (glaub ich zumindest) gefunden, die hab ich ja garnicht. Ich möchte das aber wenns geht, in einer DLL speichern, weil man extern drauf zugreift oder wie man so schön sagt 😉

    Mit freundlichen grüßen. roland 🕶



  • Drück' dich bitte mal etwas deutlicher aus! Ich verstehe nicht, was du überhaupt machen willst.



  • tenchou schrieb:

    Drück' dich bitte mal etwas deutlicher aus! Ich verstehe nicht, was du überhaupt machen willst.

    ich will in der EXE-DATEI die DLL INJECTEN.

    Nur bräuchte ich einen fertigen Code(kann auch mit Copyright sein), der das macht.

    Ich bitte euch nur mir einen fertigen Code von der Cpp datei zu schreiben, der die DLL injected.

    Mit freundlichen grüßen. roland



  • Roland87 schrieb:

    tenchou schrieb:

    Drück' dich bitte mal etwas deutlicher aus! Ich verstehe nicht, was du überhaupt machen willst.

    ich will in der EXE-DATEI die DLL INJECTEN.

    Nur bräuchte ich einen fertigen Code(kann auch mit Copyright sein), der das macht.

    Ich bitte euch nur mir einen fertigen Code von der Cpp datei zu schreiben, der die DLL injected.

    Mit freundlichen grüßen. roland

    Für 25 Euro mach ich 's.



  • gosha16 schrieb:

    Roland87 schrieb:

    tenchou schrieb:

    Drück' dich bitte mal etwas deutlicher aus! Ich verstehe nicht, was du überhaupt machen willst.

    ich will in der EXE-DATEI die DLL INJECTEN.

    Nur bräuchte ich einen fertigen Code(kann auch mit Copyright sein), der das macht.

    Ich bitte euch nur mir einen fertigen Code von der Cpp datei zu schreiben, der die DLL injected.

    Mit freundlichen grüßen. roland

    Für 25 Euro mach ich 's.

    hab ja den Code schon, will ihn doch nur verbessert haben.

    er funktioniert nur nicht.

    deswegen hab ich euch gebeten mir den vollständigen code zu schreiben, weil ich nur eine DLLInject Funktion hab und in der Main eine DWORD und noch eine Variable und dann noch FindWindoW UnD dort ruf ich die funktion auf.



  • Bau doch sonst einen Turm aus Lego, wenn das mit dem Pinball nicht klappt.



  • tenchou schrieb:

    Bau doch sonst einen Turm aus Lego, wenn das mit dem Pinball nicht klappt.

    kannst du mir bitte einen code schreiben, der eine dll injected und dann noch sagen,was ich in der main schreiben muss, damit er es injected?

    sowas wie

    HWND fenster = NULL;
    while(fenster == NULL)
    {
    fenster = FindWindow(...);
    Sleep(100);
    }
    

    kann ich ja schon, aber was ich danach mache weiß ich leider nicht 😞

    ich bitte dich nur um hilfe 😞

    mit freundlichen grüßen. roland



  • 1.
          #include <string>
       2.
          #include <windows.h>
       3.
    
       4.
          #define MAXWAIT 10000
       5.
    
       6.
          bool insertDll(DWORD procID, std::string dll)
       7.
          {
       8.
              //Find the address of the LoadLibrary api, luckily for us, it is loaded in the same address for every process
       9.
              HMODULE hLocKernel32 = GetModuleHandle("Kernel32");
      10.
              FARPROC hLocLoadLibrary = GetProcAddress(hLocKernel32, "LoadLibraryA");
      11.
    
      12.
              //Adjust token privileges to open system processes
      13.
              HANDLE hToken;
      14.
              TOKEN_PRIVILEGES tkp;
      15.
              if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
      16.
              {
      17.
                  LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tkp.Privileges[0].Luid);
      18.
                  tkp.PrivilegeCount = 1;
      19.
                  tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
      20.
                  AdjustTokenPrivileges(hToken, 0, &tkp, sizeof(tkp), NULL, NULL);
      21.
              }
      22.
    
      23.
              //Open the process with all access
      24.
              HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);
      25.
    
      26.
              //Allocate memory to hold the path to the Dll File in the process's memory
      27.
              dll += '\0';
      28.
              LPVOID hRemoteMem = VirtualAllocEx(hProc, NULL, dll.size(), MEM_COMMIT, PAGE_READWRITE);
      29.
    
      30.
              //Write the path to the Dll File in the location just created
      31.
              DWORD numBytesWritten;
      32.
              WriteProcessMemory(hProc, hRemoteMem, dll.c_str(), dll.size(), &numBytesWritten);
      33.
    
      34.
              //Create a remote thread that starts begins at the LoadLibrary function and is passed are memory pointer
      35.
              HANDLE hRemoteThread = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)hLocLoadLibrary, hRemoteMem, 0, NULL);
      36.
    
      37.
              cout << hRemoteThread << endl;
      38.
    
      39.
              //Wait for the thread to finish
      40.
              bool res = false;
      41.
              if (hRemoteThread)
      42.
                  res = (bool)WaitForSingleObject(hRemoteThread, MAXWAIT) != WAIT_TIMEOUT;
      43.
    
      44.
              //Free the memory created on the other process
      45.
              VirtualFreeEx(hProc, hRemoteMem, dll.size(), MEM_RELEASE);
      46.
    
      47.
              //Release the handle to the other process
      48.
              CloseHandle(hProc);
      49.
    
      50.
              return res;
      51.
          }
    

    Mehr hilfe kannst du jetzt nun wirklich nicht erwarten...



  • error C2664: 'GetModuleHandleW': Konvertierung des Parameters 1 von 'const char [9]' in 'LPCWSTR' nicht möglich
    1>        Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    1>main.cpp(58) : warning C4800: 'DWORD': Variable wird auf booleschen Wert ('True' oder 'False') gesetzt (Auswirkungen auf Leistungsverhalten möglich)
    1>main.cpp(58) : warning C4806: '!=': unsichere Operation: kein Wert vom Typ 'bool' erweitert auf Typ 'long' kann mit der angegebenen Konstante
    

    geht nicht.



  • Also wenn du nicht fähig bist, zu erkennen, dass du dein Programm im UNICODE-Modus kompilierst und MULTIBYTE der Funktion übergibst (_T() verwenden!!), dann ist dir nicht zu helfen... 😉
    rya.


Anmelden zum Antworten