Code/Dll Injection Tutorial

02/14/2010 19:17 flo8464#16
Quote:
Originally Posted by P-a-i-n View Post
du hast aber was vergessen das man im linker Unicode auf Multi byte zeichensatz stellen muss
sonst gibt es 2 fehler ;)
Im Linker? Es muss nur die Präprozessordefinition UNICODE entfernt werden, Visual Studio definiert es automatisch, da muss man die Projekteinstellungen editieren. Mit dem Linker hat das absolut nichts zu tun ;)

Quote:
#include "windows.h"//Für spätere Funktionen nötig
#include <iostream>//Für spätere Funktionen nötig

using namespace std;//Für spätere Funktionen nötig

int main(int argc, char* argv)//Programm Einstieg
Warum kommentierst du das? Wem das nicht klar ist, der hat Null Nutzen von dem Tutorial.
02/14/2010 19:36 P-a-i-n#17
bei VC++ ist das so
das benutz ich aber nicht groß ich mag da mehr notepad++
02/14/2010 20:19 flo8464#18
Quote:
Originally Posted by P-a-i-n View Post
bei VC++ ist das so
das benutz ich aber nicht groß ich mag da mehr notepad++
Du benutzt Notepad + makefiles statt einer IDE? Masochist ;)
02/15/2010 03:08 P-a-i-n#19
ich brauch keine ide ich arbeite nicht mit forms anwendungen mir reichen meine lib's und includes für eine dll :D
03/02/2010 16:25 Deathly Assassin#20
Quote:
Originally Posted by flo8464
Masochist
/sign
.. Arbeite auch kaum mit forms.. Eine IDE ist trotzdem wesentlich bequemer, übersichtlicher und erhöht so das Arbeitstempo um einen nicht unbeträchtlichen teil :pimp:
03/19/2010 23:54 POINT121#21
lol
05/26/2010 17:32 Lazeboy#22
hi
Ich habe mir das Tutorial angeguckt und versucht zu benutzen und es hat nicht funktioniert also hab ich geguckt warum nicht.

Code:
int main(int argc, char* argv)
{
    HANDLE hWnd, hProcess, AllocAdresse, hRemoteThread;
    DWORD PID;

    hWnd = FindWindow(0,"Untitled - Notepad");
    GetWindowThreadProcessId((HWND)hWnd, &PID);
    
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PID);

    AllocAdresse = VirtualAllocEx(hProcess, 0, sizeof(Path), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(hProcess, (void*)AllocAdresse, (void*)Path, sizeof(Path), 0);
    hRemoteThread=CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle("kernel32.dll"),"LoadLibraryA"), AllocAdresse, 0, 0);
    
	if(!hRemoteThread) MessageBox(0,0,0,0);

    WaitForSingleObject(hRemoteThread, INFINITE);

    VirtualFreeEx(hProcess, AllocAdresse, sizeof(Path), MEM_DECOMMIT);
    CloseHandle(hProcess);

return 0;
}
ich habe rausgefunden das der fehler beim Remotetrhead liegt könnt ihr mir da helfen?
11/13/2010 16:46 aj1987#23
sieht gut aus... nur dein angegebenes besispiel zu verwirklichen wäre interessanter... also eben die uhr ins menü einzubauen xD
ich verstehe zwar eine dll auszuführen sie zu injecten aber wie manipuliere/erweitere ich ein vorhandenes menü (jetzt mal zum beispiel)...?
dabei muss die dll ja "wissen" wie sie das eigentliche programm erweitern soll bzw wo sie das tun soll...
dazu vl auch n beispiel? wäre interessant...
und/oder vl n beispiel wo die funktionen einer dll erst später durch das programm aufgerufen wird.. also zb man klickt im programm auf "weiter" und anstelle des normalen programmablaufes wird dann eine funktion der dll aufgerufen...
12/08/2010 17:44 vredezbyrD#24
Erstmal thx für das geniale Tut!

Die DLL wird bei mir zwar erfolgreich injiziert (wenn ich sie löschen will,
meldet Windows dass sie vom Zielprozess verwendet wird), jedoch erscheint
keine MessageBox.

Ich hab auch bereits andere Injectors ausprobiert, jedoch wird der Code
der injizierten DLL nie ausgeführt...

Kann da jemand weiterhelfen?

mfg vredezbyrD

btw: Ich verwende Win7 x64 Home Premium und Codeblocks mit MinGW.
03/11/2011 00:50 newuser111#25
hey,

vielen dank für das großartige tutorial. mich würde allerdings ebenfalls interessieren wie man die dll per CreateRemoteThread() in einem 64-bit system injecten kann (die Funktion gibt immer 0 zurück).

danke.
03/11/2011 09:46 Terrorhahn#26
Super TuT danke
02/07/2013 00:57 Pyropanda#27
Ich hab mich mit dem Dll-Code ausernandergesetzt und gemerkt das es mit Copy&Paste nicht getan ist. Nachdem ich die Messagebox-strings zu wchar geändert habe, habe ich noch immer Fehlermeldungen,die ich nicht verstehe.

Daher würde ich euch bitten den Code so zu überarbeiten, damit er auch für die Dummies unter uns verwendbar ist - am Besten als Headerdatei-upload

Danke :)

Soweit bin ich selbst gekommen:
Das ist der Code ergänzt mit dem wchar...
Code:
#include "windows.h"

void InjNachricht()//der erstellte Thread
{
    MessageBox(0, L"Siehe da! Es klappt :P", L" Whohoo", 0);//4. Eine Message Box
}

int WINAPI DllMain(HINSTANCE hInst,DWORD reason,LPVOID reserved)//1. Beim öffnen der Dll wird diese funktion ausgeführt
{
    if(reason==DLL_PROCESS_ATTACH)//2. Falls der Grund des Aufrufes der DllMain-Funktion das Anhängen an ein Prozesses ist..
    {
        CreateThread(0, 0, (LPTHREAD_START_ROUTINE) InjNachricht, 0, 0, 0);//3.erstelle einen SubProzess, der die übergebene Funktion ausführt
    }
    return true;
}
08/14/2013 16:01 LuckyLuke#28
Anmerkung: Funktioniert nur bei 32bit Anwendungen.
12/13/2014 15:40 teto#29
Es geht so auch bei 64-Bit Anwendungen man muss sowohl den Injector als auch die DLL in 64-Bit Modus kompilieren. Dann funktioniert der Injector aber auch nur bei 64-Bit Programmen also brauch man für Anwendung mit unterschiedlicher Architektur auch unterschiedliche Injectoren.