Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Anti API hook, Как обойти защиту от перехвата API 
:(
    Опции темы
xkor
  Дата 8.1.2007, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: нет
Всего: 4



Здраствуйте!,
Столкнулся я недавно с одной странной проблемой при перехвате API, программа в которой я пытаюсь поставить хук на connect (с другими функциями тоже самое собсно) из ws2_32.dll мигом закрывается как только внедряемая мной длл производит хук. Использую я для перехвата и внедрения модуль advApiHook который я думаю знают многие.
И вот самое интересное что меня и обескураживает так это что закрывается программа моментально после записи всего одного байта:
Код

function HookCode(TargetProc, NewProc: pointer; var OldProc: pointer): boolean;
var
  Address: dword;
  OldProtect: dword;
  OldFunction: pointer;
  Proc: pointer;
begin
  Result := False;
  try
    Proc := TargetProc;
    //вычисляем адрес относительного (jmp near) перехода на новую функцию
    Address := dword(NewProc) - dword(Proc) - 5;
    VirtualProtect(Proc, 5, PAGE_EXECUTE_READWRITE, OldProtect);
    //создаем буффер для true функции
    GetMem(OldFunction, 255);
    //копируем первые 4 байта функции
    dword(OldFunction^) := dword(Proc);
    byte(pointer(dword(OldFunction) + 4)^) := SaveOldFunction(Proc, pointer(dword(OldFunction) + 5));
    //byte(pointer(dword(OldFunction) + 4)^) - длина сохраненного участка


    //закрывается сразу после следующей строки!
    byte(Proc^) := $e9; //устанавливаем переход


    dword(pointer(dword(Proc) + 1)^) := Address;
    VirtualProtect(Proc, 5, OldProtect, OldProtect);
    OldProc := pointer(dword(OldFunction) + 5);
  except
    Exit;
  end;
  Result := True;
end;

я сначала думал что приложение запускает поток с проверкой на хук, но когда я добавил в дллку остановку всех нитей кроме собсно вызывающей ничего неизменилось, приложоние по прежнему закрывается как только выполниться byte(Proc^) := $e9;
причем неважно как и на что я меняю byte(Proc^), программа закрывается сразу при любом изменении этого байта  smile 

может у кого есть идеи как как это реализовано, а то я абсолютно недогоняю как разработчики такого достигли...
кста в оригинальной версии приложения всё пашет на ура, а эта версия переделана какимито умельцами которые даже сорцев неимели, но нужно перехватить именно в этой версии
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
dumb
Дата 8.1.2007, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 7
Всего: 158



похоже просто по исключению выпадает на блок except. ты проверял, что возвращает VirtualProtect(а саму ее проверял на "перехваченность")? а после ее выполнения проверял статус изменяемого тобой куска?

Цитата(xkor @  8.1.2007,  03:48 Найти цитируемый пост)
а эта версия переделана какимито умельцами которые даже сорцев неимели

про протекторы слышал что-нибудь?
PM MAIL   Вверх
W4FhLF
Дата 8.1.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Да, может быть там ExeCryptor висит, он такие штучки на корню пресекает. 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xkor
Дата 8.1.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 8.1.2007
Где: Питер

Репутация: нет
Всего: 4



проблему решил совершенно неожиданным способом, просто решил проверить выполняется ли первое VirtualProtect и в результате длл стала абсолютно нормально всё перехватывать))), правда теперь какаято трабла с пересылкой пакетов но думаю это из за изменений в моей проге в работе с пакетами..., счас всё верну и наверняка заработает)
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.