DLL Injecting, API Hooking

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
Pobierz.

Gdyby coś było niewiadome, to pisać, albo wejść na MSDN i wyczytać opis funkcji(chociaż myślę, że nie będzie problemów z odczytaniem kodu, bo prawie każda linijka jest opisana).

PS:

Kod:
.386
.model flat, stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib
includelib SRT.lib; biblioteka zamieszczona poniżej

xVirtualAllocEx PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
xCreateRemoteThread PROTO :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD

.data;deklarujemy
szKernel32 byte 'kernel32.dll', 0
szLoadLibrary byte 'LoadLibrary', 0
szTarget byte 'Notepad', 0
szDll byte 'hide.dll', 0

.data?
hModule dword ?
hProcess dword ?
dwSize dword ?
dwPid dword ?
dwBytesWritten dword ?
dwTid dword ?

.code
_entrypoint:
invoke FindWindow, addr szTarget, 0; szukamy okna
invoke GetWindowThreadProcessId, eax, addr dwPid; funkcja pobiera identyfikator wątku
invoke OpenProcess, PROCESS_ALL_ACCESS, FALSE, dwPid; otwiera istniejący obiekt procesu
mov hProcess, eax
invoke xVirtualAllocEx, hProcess, 0, sizeof szDll, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE; funkcja inicjalizuje pamięć..
mov hModule, eax
invoke WriteProcessMemory, hProcess, hModule, addr szDll, sizeof szDll, addr dwBytesWritten; zapisuje dane z obszarem pamięci w określonym procesie
invoke GetModuleHandle, addr szKernel32; pobierz uchwyt
invoke GetProcAddress, eax, addr szLoadLibrary; pobiera adres eksportowanych funkcji
invoke xCreateRemoteThread, hProcess, 0, 0, eax, hModule, 0, addr dwTid; tworzy wątek, który, działa w wirtualnej przestrzeni adresowej innego procesu
invoke ExitProcess, 0; koniec
end _entrypoint

Pobierz SRT.lib

Jeśli ktoś ma jakieś przykłady, w dowolnym języku na ten temat, to pisać!
 

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
Tutaj nie trzeba być śmiały, całość masz umieszczoną w paczce AFX Code Hook. Jeśli domagasz się przykładu, oto on:

Kod:
var // deklarujemy
Pid : Cardinal;
dll_name : String;
pDLL_name : Pointer;
hProzess,bw : Cardinal;
hRemote_Thread : Cardinal;
begin
dll_name := 'C:\die.dll'; // nazwa DLL'a
PID := 3052; // 3052 = PID = Notatnik

hProzess:= OpenProcess(PROCESS_ALL_ACCESS, false, PID); // otwieramy proces
pdll_name := VirtualAllocEx(hProzess, 0, length(dll_name), MEM_COMMIT,PAGE_EXECUTE_READWRITE); // funkcja inicjalizuje pamięć
WriteProcessMemory(hProzess, pdll_name, PChar(dll_name), length(dll_name), bw); // zapisuje dane z obszarem pamięci w innym procesie
CreateRemoteThread(hProzess, nil, 0, GetProcAddress(GetModuleHandle('kernel32.dll'),'LoadLibraryA'), pDLL_name, 0, hRemote_Thread); // tworzymy wątek, który działa w wirtualnej przestrzeni innego programu
CloseHandle(hProzess); // zamykamy uchwyt
end;

W/w przykład DLL Injection, używa CreateRemoteThread. Można inaczej też to zrobić, na przykład za pomocą globalnego hook'a..
 

0wn3r

Były Moderator
Dołączył
Marzec 10, 2007
Posty
1330
<


Kod:
uses tlhelp32
procedure UninjectDll(dllname : String; PID : Integer);
var
hProc : Cardinal;
hSnap : Cardinal;
module : moduleEntry32;
modstring : String;
hModule : PByte;
hremThread : Cardinal;
begin

hSnap := CreateToolHelp32Snapshot(TH32CS_SNAPMODULE,PID);
module.dwSize := sizeof(MODULEENTRY32);
If Module32First(hSnap,module) = True then begin
  While Module32Next(hSnap,module) do begin

      If module.szModule = dllname Then begin
        hModule := module.modBaseAddr;
      end;
  end;
end;

hProc := OpenProcess(PROCESS_ALL_ACCESS,false,PID);
CreateRemoteThread(hProc,nil,0,
                  GetProcAddress(GetModuleHandle('Kernel32.dll'), 'FreeLibrary')
                  ,hModule,0,hremThread);
CloseHandle(hProc);
CloseHAndle(hSnap);
end;

DLL UnInjection.
 

grzonu

Były Moderator
Dołączył
Grudzień 26, 2006
Posty
1390
ja mam duzo przykladow wlasnej roboty na dysku ale w c++ jak skoncze cala robote z tym bo poki co to "nieskladne kawałki kodu".
 
Do góry Bottom