|
Вопрос # 6 647/ вопрос открыт / |
|
Доброго времени суток и с наступающим Новым Годом уважаемые эксперты!
Помогите разобраться с кодом инжектинга без dll, как с помощью него если он пригоден для этих целей отловить функции API от выбранного чужого процесса, хотя б того же messagebox с изменением текста.
Приложение: Переключить в обычный режим- //******************************************************************************
- //* UNIT: UNT_InjectNoDLL
- //* AUTOR: Fakedo0r
- //******************************************************************************
- Unit UNT_InjectNoDLL;
- //******************************************************************************
- //DECLARACION DE LIBRERIAS / CLASES
- //******************************************************************************
- Interface
-
- Uses
- Winapi.Windows, TLHelp32, PsAPI, ShellAPI;
- //******************************************************************************
- //DECLARACION DE ESTRUCTURAS
- //******************************************************************************
- Type
- PTINJECT = ^TINJECT;
-
- TINJECT = Record
- __ShellExecute: Function(HWND: HWND; Operation, FileName, Parameters,
- Directory: PWideChar; ShowCmd: Integer): HINST; Stdcall;
-
- cExe: Array [0 .. MAX_PATH] Of Char;
- cOper: Array [0 .. MAX_PATH] Of Char;
- End;
- //******************************************************************************
- //DECLARACION DE FUNCIONES / PROCEDIMIENTOS
- //******************************************************************************
- Procedure Inyectada(tInj: PTINJECT); Stdcall;
- Procedure Inyectora;
- Function AllocAndCopyMem(hProcess: THandle; ptBuffer: Pointer;
- iBuffSize: Int64): Pointer;
- //******************************************************************************
- Implementation
- //******************************************************************************
- //<--- LA FUNCION QUE VAMOS A INYECTAR --->
- //******************************************************************************
- Procedure Inyectada(tInj: PTINJECT); Stdcall;
- Begin
- tInj.__ShellExecute(0, tInj.cOper, tInj.cExe, Nil, Nil, 1);
- End;
- //******************************************************************************
- //<--- LA FUNCION QUE OPERA LA INYECCION --->
- //******************************************************************************
- Procedure Inyectora;
- Var
- uTamFun: UINT;
- dwPID: DWORD;
- dwExitCode: DWORD;
- hThread: THandle;
- hProcess: THandle;
- ptStruct: Pointer;
- ptEsp: Pointer;
- tProcEntry: TProcessEntry32;
- tInj: TINJECT;
- Begin
- uTamFun := 0;
- dwExitCode := 0;
- hProcess := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
- tProcEntry.dwSize := Sizeof(tProcEntry);
-
- If Process32First(hProcess, tProcEntry) Then
- Begin
- Repeat
- If tProcEntry.szExeFile = 'explorer.exe' Then
- Begin
- dwPID := tProcEntry.th32ProcessID;
- Break;
- End;
- Until Not Process32Next(hProcess, tProcEntry);
- End;
-
- CloseHandle(hProcess);
-
- // obtenemos el handle del proceso
- hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, dwPID);
-
- // obtenemos el puntero del api
- @tInj.__ShellExecute := GetProcAddress(LoadLibrary('Shell32.dll'),
- 'ShellExecuteW');
-
- // copiamos los datos en las variables
- lstrcpy(tInj.cExe, PChar('D:1.exe'));
- lstrcpy(tInj.cOper, PChar('open'));
-
- // reservamos y copiamos nuestra estructura a la memoria
- ptStruct := AllocAndCopyMem(hProcess, @tInj, Sizeof(TINJECT));
-
- // calculamos el tama?o de nuestra funcion
- uTamFun := UINT(@Inyectora) - UINT(@Inyectada);
-
- // reservamos y copiamos nuestra funcion a la memoria
- ptEsp := AllocAndCopyMem(hProcess, @Inyectada, uTamFun);
-
- // creamos el hilo remoto
- hThread := CreateRemoteThread(hProcess, Nil, 0, ptEsp, ptStruct, 0,
- PDWORD(Nil)^);
-
- If hThread <> 0 Then
- Begin
- // esperamos hasta que se cree el hilo
- WaitForSingleObject(hThread, INFINITE);
- // obtenemos el estado de terminacion del hilo
- GetExitCodeThread(hThread, dwExitCode);
- // liberamos el handle del hilo creado
- CloseHandle(hThread);
- // liberamos el espacio en el proceso
- VirtualFreeEx(hProcess, ptStruct, 0, MEM_RELEASE);
- VirtualFreeEx(hProcess, ptEsp, 0, MEM_RELEASE);
- End;
-
- // liberamos el handle del proceso
- CloseHandle(hProcess);
- End;
- //******************************************************************************
- //<--- RESERVA ESPACIO Y ESCRIBE EN LA MEMORIA --->
- //******************************************************************************
- Function AllocAndCopyMem(hProcess: THandle; ptBuffer: Pointer;
- iBuffSize: Int64): Pointer;
- Var
- iBytesWritten: SIZE_T;
- Begin
- iBytesWritten := 0;
- // reservamos espacio
- Result := VirtualAllocEx(hProcess, Nil, iBuffSize, MEM_COMMIT Or MEM_RESERVE,
- PAGE_EXECUTE_READWRITE);
- // escribimos
- WriteProcessMemory(hProcess, Result, ptBuffer, iBuffSize, iBytesWritten);
- End;
-
- End.
 |
Вопрос задал: sergei (статус: Посетитель)
Вопрос отправлен: 28 декабря 2016, 02:17
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|