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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2012, 11:05   #1
Zombie_Killer
Новичок
Джуниор
 
Регистрация: 10.03.2012
Сообщений: 1
Лампочка Защита от хука

Доброго времени суток!

Имею клиент 1 онлайн игрушки, под него есть перехватчик пакетов, работать он может 2мя способами:
1. Простым инжектом dll'ки в процесс
2. "Внедрение Dll в процесс методом инжекции кода и настройки образа Dll в памяти"
Вообщем с 1м способом разобрался поигравшись с модулями процесса.
Вот не знаю как бороться со 2м методом, прошу помощи. Защиту делаю простой dll.
Вот код хука:
Код:
{
  Внедрение Dll в процесс методом инжекции кода и настройки образа Dll в памяти.
  Данный метод внедрения более скрытен, и не обнаруживается фаерволлами.
}
function InjectDllEx(Process: dword; Src: pointer): boolean;
type
  TDllLoadInfo = packed record
                  Module: pointer;
                  EntryPoint: pointer;
                 end;
var
  Lib: TLibInfo;
  BytesWritten: dword;
  ImageNtHeaders: PImageNtHeaders;
  pModule: pointer;
  Offset: dword;
  DllLoadInfo: TDllLoadInfo;
  hThread: dword;

 { процедура передачи управления на точку входа dll }
  procedure DllEntryPoint(lpParameter: pointer); stdcall;
  var
    LoadInfo: TDllLoadInfo;
  begin
    LoadInfo := TDllLoadInfo(lpParameter^);
    asm
      xor eax, eax
      push eax
      push DLL_PROCESS_ATTACH
      push LoadInfo.Module
      call LoadInfo.EntryPoint
    end;
  end;

begin
  Result := False;
  ImageNtHeaders := pointer(dword(Src) + dword(PImageDosHeader(Src)._lfanew));
  Offset := $10000000;
  repeat
    Inc(Offset, $10000);
    pModule := VirtualAlloc(pointer(ImageNtHeaders.OptionalHeader.ImageBase + Offset),
                            ImageNtHeaders.OptionalHeader.SizeOfImage,
                            MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if pModule <> nil then
    begin
      VirtualFree(pModule, 0, MEM_RELEASE);
      pModule := VirtualAllocEx(Process, pointer(ImageNtHeaders.OptionalHeader.
                                                 ImageBase + Offset),
                                                 ImageNtHeaders.OptionalHeader.
                                                 SizeOfImage,
                                                 MEM_COMMIT or MEM_RESERVE,
                                                 PAGE_EXECUTE_READWRITE);
    end;
  until ((pModule <> nil) or (Offset > $30000000));
  Lib := MapLibrary(Process, pModule, Src);
  if Lib.ImageBase = nil then Exit;
  DllLoadInfo.Module     := Lib.ImageBase;
  DllLoadInfo.EntryPoint := Lib.DllProcAddress;
  WriteProcessMemory(Process, pModule, Lib.ImageBase, Lib.ImageSize, BytesWritten);
  hThread := InjectThread(Process, @DllEntryPoint, @DllLoadInfo,
                          SizeOf(TDllLoadInfo), False);
  if hThread <> 0 then Result := True
end;

{ Внедрение в процесс образа текущей Dll (если вызвано из Dll) }
Function InjectThisDllEx(Process: dword): boolean;
begin
 Result := InjectDllEx(Process, pointer(hInstance));
end;
Есть варианты?

Последний раз редактировалось Stilet; 16.03.2012 в 08:37.
Zombie_Killer вне форума Ответить с цитированием
Старый 16.03.2012, 08:23   #2
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

для того чтобы защититься от инжекта надо защититься от изменения памяти со стороны других процессов. в простейшем случае это реализуется это перехватом функции NtOpenProcess на уровне ядра с запретом на выдачу хендла в случае если в атрибутах доступа указан флаг PROCESS_VM_WRITE, впрочем, эта простейшая мера позволяет защититься об большинства способов инжекта
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Метод Хука-Дживса drzod Общие вопросы Delphi 2 11.09.2011 13:43
Проблема с установкой хука DeFace Win Api 0 07.09.2011 08:06
Метод Хука-Дживса Энжи Помощь студентам 0 21.04.2010 23:41
правильное снятие хука majestic Win Api 1 11.01.2010 02:52
Функция-фильтр глобального хука. Katka Win Api 3 30.03.2009 10:57