Вопрос Проблема с инжектом

Начинающий
Статус
Оффлайн
Регистрация
28 Июн 2023
Сообщения
5
Реакции[?]
0
Поинты[?]
0
Пишу на дельфи, нашёл функцию клиента, хочу заинжектить, инжектор ниже в спойлере
инжектор:
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
  aParamsSize: DWord);
var
  hThread: THandle;
  lpNumberOfBytes: SIZE_T;
  lpNumberOfBytesDword: DWord;
  ThreadAddr, ParamAddr: Pointer;
begin
  if ProcessID<>0 then
  begin
    // ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Также запишем параметры к ней
    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Создаем поток, в котором все это будет выполняться.
    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytesDword);

    // ---- Ожидаем завершения функции
    WaitForSingleObject(hThread, INFINITE);

    // ---- подчищаем за собой
    CloseHandle(hThread);
    VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
  end
end;
Cобсна игра валится на 23 строчке, с ошибкой по памяти
Пожалуйста, авторизуйтесь для просмотра ссылки.

ThreadAddr как раз равен тому адресу который указан в ошибке (видно в посте imgur)
Это защита от инжектов или у меня кривой инжектор?
 
Участник
Статус
Оффлайн
Регистрация
23 Апр 2022
Сообщения
694
Реакции[?]
326
Поинты[?]
12K
Пишу на дельфи, нашёл функцию клиента, хочу заинжектить, инжектор ниже в спойлере
инжектор:
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
  aParamsSize: DWord);
var
  hThread: THandle;
  lpNumberOfBytes: SIZE_T;
  lpNumberOfBytesDword: DWord;
  ThreadAddr, ParamAddr: Pointer;
begin
  if ProcessID<>0 then
  begin
    // ---- Выделяем место в памяти процесса, и записываем туда нашу функцию
    ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);

    // ---- Также запишем параметры к ней
    ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
    WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);

    // ---- Создаем поток, в котором все это будет выполняться.
    hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytesDword);

    // ---- Ожидаем завершения функции
    WaitForSingleObject(hThread, INFINITE);

    // ---- подчищаем за собой
    CloseHandle(hThread);
    VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
    VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
  end
end;
Cобсна игра валится на 23 строчке, с ошибкой по памяти
Пожалуйста, авторизуйтесь для просмотра ссылки.

ThreadAddr как раз равен тому адресу который указан в ошибке (видно в посте imgur)
Это защита от инжектов или у меня кривой инжектор?
PAGE_EXECUTE_READWRITE
 
Начинающий
Статус
Оффлайн
Регистрация
28 Июн 2023
Сообщения
5
Реакции[?]
0
Поинты[?]
0
Если кому интересно, разобрался. По итогу проблема была в самой функции которую я инжектил, а не в инжекторе. Инжектор рабочий, главное поменяйте PAGE_READWRITE на PAGE_EXECUTE_READWRITE
 
Последнее редактирование:
Сверху Снизу