Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2016, 22:30   #1
ram555x
Пользователь
 
Регистрация: 08.02.2009
Сообщений: 16
По умолчанию Инжект кода в чужой процесс без DLL

Всем привет, и всех с наступающим Новым Годом товарищи-программисты.
Понадобилось внести изменение в чужой процесс, а именно он в своей работе использует api функции setcursorpos и sendinput для выполнения клика в заданную область и возвращает курсор обратно на место, что не всегда удобно, ведь можно ж перехватить и изменить работу так, чтоб он реальный курсор не трогал и делал клик в нужное окно через тот же sendmessage, проблема лишь в реализации, инжект через dll мне не подошел из за проблем с х64 разрядностью, нашел пример инжекта без DLL, из знатоков кто может разъяснить, если этот код работоспособный то как им мне воспользоваться для решения моей проблемы, или может еще как иначе можно решить мою проблему.
Код:
 //******************************************************************************
//* 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.
ram555x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инжект кода в чужой процесс Malriser Общие вопросы C/C++ 13 19.02.2014 22:17
Отследить инжект dll в процесс ??? fucil Общие вопросы Delphi 5 26.01.2014 07:12
Загрузить библиотеку в внешний процесс - только инжект? calypso Win Api 15 27.02.2013 17:37
AppInit_DLLs и инжект в определенный процесс nls Win Api 2 01.02.2013 09:17
Инжект dll в игру artbotva Win Api 10 14.08.2012 11:24