DDL Injection
-
Hallo ich lese hier immer wieder etwas über "DDL Injection" aber was genau macht man da und wofür braucht man das ?
-
Eine einfache Methode um Code in einen (fremden) Prozess einzuschleusen.
Dies könnte so aussehen:- Speicher im fremden Prozess allozieren
- Vollen Pfad der DLL reinschreiben
- CreateRemoteThread() mit der Adresse von LoadLibraryA() und dem eben allozierten Speicher als Parameter aufrufen
- Auf den Thread warten & alles Aufräumen
-
Und wofür macht man das?
-
Clash schrieb:
um Code in einen (fremden) Prozess einzuschleusen
-
Ja ok ^^
Aber was hab ich davon wenn ich Code wo anders einschleuse ?
Irgendwie hört sich das nach nicht legalen Aktionen an^^
-
man könnte zum Beispiel ein Plugin für Notepad schreiben, das eine Webseite aus dem Internet lädt und dann den Quellcode im Programm anzeigt. Der Nutzen sei bei dem Beispiel zwar dahingestellt, aber es ist ja nur ein Beispiel.
greetz KN4CK3R
-
Die Bits in deinem RAM gehören dir.
-
Clash schrieb:
Die Bits in deinem RAM gehören dir.
guter Spruch *gemerkt*

greetz KN4CK3R
-
ddl schrieb:
Irgendwie hört sich das nach nicht legalen Aktionen an^^
Jupp. Es gibt sehr wenig legale Anwendungsbereiche.
Ein Grund, dass ich solche Threads meistens gar nicht beachte
Meistens geht es um das Hacken von Spielen, um das (evtl. illegale) Abfangen von Tastatureingaben.
Allerdings werden DLLs auch injeziert wenn es um globale Hooks geht. Hier gibt es manchmal vernünftige Anwendungsbereiche.
Manchmal möchte man Programmen ene Zusatzfunktion verpassen, die es aufwertet... (oder aber auch nicht).In jedem Fall nimmt in diesen Foren DLL-Injection und Hooks
Just my 2 cents.
-
Hört sich ganz interessant an, aber ich will nix Ilegales machen kann man auch in so einfache Programme Injecten ?
z.b.
#include <iostream> int main() { std::cout<<"hallo"; return 0; }Weil dann schau ich mir das auch mal an (:
Ach nochwas muss man für die Sachen gut Assembler können?
-
Nochmal: Du darfst mit deinen Bits machen was du willst.
Zu deinen Fragen: Ja und Nein
-
versteh ich nich.

-
ddl schrieb:
versteh ich nich.

Clash will Dir sagen:
Solange Du auf Deinem Rechner (in Deinem RAM, mit Deinen Bytes, Bits etc.) arbeitest, machst Du nix illegales.
Auch in so einfache Programme kann man Code injecten.
Assemblerkenntnisse sind nicht erforderlich.
-
achso ok^^
-
Kennt jemand ein Tut zu sowas?^^
-
// INJECTION // // HANDLE processHandle = OpenProcess(...); // string moduleFullPath = "C:\\....\\my.dll"; void* remoteMemoryHandle = VirtualAllocEx(processHandle, 0, moduleFullPath.size(), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(processHandle, remoteMemoryHandle, moduleFullPath.c_str(), moduleFullPath.size(), 0); FARPROC loadLibraryAddress = GetProcAddress(GetModuleHandle("KERNEL32"), "LoadLibraryA"); void* remoteThreadHandle = CreateRemoteThread(processHandle, 0, 0, reinterpret_cast<PTHREAD_START_ROUTINE>(loadLibraryAddress), remoteMemoryHandle, 0, 0); WaitForSingleObject(remoteThreadHandle, INFINITE); CloseHandle(remoteThreadHandle); VirtualFreeEx(processHandle, remoteMemoryHandle, 0, MEM_RELEASE);// EJECTION // // HANDLE processHandle = OpenProcess(...); // HMODULE moduleHandle = Module32First, Module32Next, ... FARPROC freeLibraryAddress = GetProcAddress(GetModuleHandle("KERNEL32"), "FreeLibrary"); void* remoteThreadHandle = CreateRemoteThread(processHandle, 0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(freeLibraryAddress), moduleHandle, 0, 0); WaitForSingleObject(remoteThreadHandle, INFINITE); CloseHandle(remoteThreadHandle);
-
@clash:
du hast die abschluß-null vergessen

-
Meinst du "sizeof(x.c_str()) != x.size()" ?
Stimmt, dummer Fehler.
Hmm, hat trotzdem immer funktioniert. Glück gehabt?