warum sollte es keinen Geben? der Injector an sich ist sehr leicht zu schreiben.....vielleicht 10 Zeilen code + bisschen was drumzu damits schön aussieht..... der hauptteil ist ja dann immer noch die dll
Originally posted by neji@Apr 13 2006, 22:00 warum sollte es keinen Geben? der Injector an sich ist sehr leicht zu schreiben.....vielleicht 10 Zeilen code + bisschen was drumzu damits schön aussieht..... der hauptteil ist ja dann immer noch die dll
Hmm, 10 Zeilen Code ?
Du musst speicher im angezielten Prozess allozieren, du musst Code in diesen Speicher reinschreiben,
du musst das Programm dazu bekommen deinen code auszuführen und dann musst du den IAT umschreiben...
Und wenn du das sowohl auf win 9x als auch 2k/xp laufen lassen willst musst du natürlich jeweils unterschiedlichen code schreiben...
Ich gebe zu, ich habe es bisher noch nicht gemacht, aber ich glaube trotzdem, dass 10 Zeilen etwas arg optimistisch ist.
nur rein um ne DLL in einem fremden Prozess zu laden und auszuführen braucht man nicht mehr Zeilen.
Klar, will man alles für 9x und NT lauffähig haben und wirklich Threadsicher machen , macht das natürlich etwas mehr Aufwand.
Aber wenn man sich einen universelle Library dafür schreibt, macht man sich diese Arbeit auch nur einmal und hat es zukünftig nur noch mit wenigen Zeilen Code zu tun
im Prinzip brauchst du nur etwa so etwas :
Code:
temp := VirtualAllocEX(pid,neededmemory);
if target <> nil then
begin
temp := virtualalloc(nil,neededmemory,MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if temp <> nil then
begin
CopyMemory(.....); //halt den Call für LoadLibraryA an den allocierten Speicher kopieren
WriteProcessMemory(......) // und anschließend in den Target Process schreiben.
end;
end;
EDIT :
hab mal was gebastelt...könnts ja mal testen. Sollte unter 9x und NT funktionieren (kommt natürlich noch auf den Code in der DLL an, die ihr injected)
zum Testen sind 2 dll's dabei, einmal ne testdll.dll, die nach dem injecten eine messagebox aufpoppen lässt mit dem Namen des Prozesses in dem die DLL grad inejcted ist und eine textouthook.dll die, wie der Name schon sagt, die Api TextOut Hooked und die Anzeigefarbe ändert...einfach testen, ihr seht dann schon was ich mein.
Zeilen hab ich jetzt nicht gezählt, hat aber ca 20 Minuten gedauert.
ich hab das in 1000e Units ausgelagert, hab keine Lust das alles wieder zusammen zu friemeln
aber hier mal die wichtigeste Funktion , was das injecten angeht
Code:
function InjectLibrary(dwProcessID: Cardinal; pLibraryName: PChar): Pointer; stdcall;
{Temporary code which will be injected in the target process.}
procedure AsmTempBegin; assembler;
asm
PUSH $12345678 // PUSH offset library name
CALL DWORD PTR [$00000000] // CALL LoadLibraryA
RET
end;
procedure AsmTempEnd; assembler; begin end;
var
dwProcessID2: DWord;
dwBytesWritten: DWord;
dwAsmSize: DWord;
dwMemoryNeeded: DWord;
pMemoryTarget: Pointer;
pMemoryTemp: Pointer;
pLoadLibraryA: Pointer;
nChange: PDWord;
s: String;
Begin
Result := nil;
pLoadLibraryA := GetProcAddress(LoadLibrary('kernel32.dll'), 'LoadLibraryA');
if (pLoadLibraryA = nil) then
Exit; {Cant get offset of API LoadLibraryA.}
dwProcessID2 := OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessID);
if (dwProcessID2 = 0) then
Exit; {Cant open the target process with all access rights.}
s := pLibraryName;
dwAsmSize := DWord(@AsmTempEnd) - DWord(@AsmTempBegin);
dwMemoryNeeded := DWord(Length(s)) + 1 + dwAsmSize + 4;
pMemoryTarget := VirtualAllocExX(dwProcessID2, dwMemoryNeeded);
if (pMemoryTarget = nil) then
begin
CloseHandle(dwProcessID2);
Exit; {Cant get memory for our injectioncode inside the target process.}
end;
pMemoryTemp := VirtualAlloc(nil, dwMemoryNeeded, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (pMemoryTemp = nil) then
begin
VirtualFreeExX(dwProcessID2,pMemoryTarget,dwMemoryNeeded,MEM_RELEASE);
CloseHandle(dwProcessID2);
Exit; {Cant get memory in our process for temporary used memory.}
end;
CopyMemory(pMemoryTemp, @AsmTempBegin, dwAsmSize);
{Setting the correct Adresses for the inject Code.}
nchange := Pointer(DWord(pMemoryTemp) + 1);
nchange^ := DWord(pMemoryTarget) + dwAsmSize + 4;
nchange := Pointer(DWord(pMemoryTemp) + 7);
nchange^ := DWord(pMemoryTarget) + dwAsmSize;
nchange := Pointer(DWord(pMemoryTemp) + dwAsmSize);
nchange^ := DWord(pLoadLibraryA);
{Writing the LoadLibraryA code from temporary memory into target memory.
If success then create a thread on target memory.
Return the address of the target memory.}
CopyMemory(Pointer(Cardinal(pMemoryTemp) + dwAsmSize + 4), @S[1], Length(S));
If WriteProcessMemory(dwProcessID2, pMemoryTarget, pMemoryTemp, dwMemoryNeeded, dwBytesWritten) And
CreateRemoteThreadX(dwProcessID, pMemoryTarget) Then
Result := pMemoryTarget;
VirtualFree(pMemoryTemp, dwMemoryNeeded, MEM_DECOMMIT);
CloseHandle(dwProcessID2);
end;
Suche Funktioniernden Injector (Search for a working injector) CA EU 09/08/2010 - Combat Arms - 13 Replies Kann Jemand einen Link von einem Funktionierenden Injector geben außer PerX suche schon ewig aba find keinen
Can somebody give me a link for a working Injector i search every time but still nothing found^^ pleas give link but no perx
sorry for bad english thx schon ma im vorraus
Xinject-Multi DLL.Injector {Better then OMFGZ DLL Injector.} Rep+Thank.(leeach) 01/09/2010 - Soldier Front Hacks, Bots, Cheats & Exploits - 5 Replies Hi Welcome to X1nject The Best Multi DLL injector.
Xinject-Multi DLL.Injector {Better then OMFGZ DLL Injector.}
What this dose?
Injects Any "X" amount off DLL'S into a Program.
Stable+Trust Worthy.
Easily Inject Your Faviroute Hacks.
Steps:Click Here For Mediafire Download Link + GzP Attachment Availble