Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.10.25;
Скачать: CL | DM;

Вниз

Выгрузка WinApi перехватчика   Найти похожие ветки 

 
Сергей М. ©   (2008-09-02 11:14) [120]


> Как это..... Reserved... так обычно пишут


Обычно пишут писатели .. Ильф и Петров)..

Тебя ж не интересуют события создания/завершения потоков в целевом процессе, зачем же ты оставил эти кейсы ?

Это, конечно, непринципиально, наводит на мысль что ты не понимаешь что делаешь)

Ну хорошо, а где протоколирование и анализ потоков, вызывающих аттач/детач ?


 
KygECHuK ©   (2008-09-02 11:27) [121]


> Это, конечно, непринципиально, наводит на мысль что ты не
> понимаешь что делаешь)


Шерлок как вы это делаете? :)
Очень даже  не принципиально... Я еще очень много лишнего дописал в поисике ошибки. В ближайшее время все это будет убранно.


> Ну хорошо, а где протоколирование и анализ потоков, вызывающих
> аттач/детач ?


Никакого анализа потоков нет.


procedure TModuleScope.ManageModuleDetachment;
begin
//
// Проверка сообщения что оно из перехваченого приложения
//
if (not m_bIsThisServerProcess) then
begin
  // Извлекаем перехватчики
 FinalizeHookManagement();
 // Сервер исчо работает?
 if (0 <> m_phwndServer^) then
    // Посылаем сообщение серверу об отключении
  PostMessage(
   m_phwndServer^,
   UWM_HOOKTOOL_DLL_UNLOADED,
   0,
   GetCurrentProcessId()
   );
end else
begin
 m_pInjector.EjectModuleFromAllProcesses(m_pWhenZero.GetZeroHandle);
 LogMessage( "-------  Сервер становлен и все ловушки выгружены ------");
end;
end;



Вот по получении сообщения в серверной части и пишется сообщение в лог


 
evvcom ©   (2008-09-02 11:46) [122]

Что-то всё с ног на голову. Кто такой сервер? Жертва? Почему жертва стала сервером?


 
KygECHuK ©   (2008-09-02 11:52) [123]


> Что-то всё с ног на голову. Кто такой сервер? Жертва? Почему
> жертва стала сервером


В библиотеке реализована и серверная часть перехватчика. она себя и внедряет в АП жертвы.


 
evvcom ©   (2008-09-02 12:06) [124]


> В библиотеке реализована и серверная часть перехватчика

Я догадался

> она себя и внедряет в АП жертвы

так все-таки сервер рулит внедрением. Я обычно в LogMessage еще включаю и дату/время события. Зачем отрицание "(not m_bIsThisServerProcess)", почему бы его не убрать и then/else не поменять местами для уменьшения путаницы? Так получается, что не только хук снимается, но и на сервере dll завершается/выгружается? Это так тестировщик работает?


 
KygECHuK ©   (2008-09-02 12:16) [125]


>  Так получается, что не только хук снимается, но и на сервере
> dll завершается/выгружается?


Если библитека серверным процессом выгружается, то соответсвенно, выгружаюися и все прехватчики. и никак не наоборот.


> Это так тестировщик работает?


Тестировщик это в смысле я? :)


 
Сергей М. ©   (2008-09-02 12:17) [126]

Черт те что и сбоку бантик)... Серверы какие-то, соообщения какие-тио кому-то, эжекты какие-то из всех процессов ..

Выкинь нафих всю эту требуху хотя бы на время и органичься только протоколированием:

procedure DLLEntryPoint(Reason: DWORD);
begin
  case Reason of
    DLL_PROCESS_ATTACH: LogMessage("Process attach, tid = " + IntToStr(GetCurrentThreadId));
    DLL_PROCESS_DETACH: LogMessage("Process detach, tid = " + IntToStr(GetCurrentThreadId));
  end;
end;


При получении управления при инициализации хук-модуля СРАЗУ ЖЕ установи
IsMultiThread := True;

Теперь стартуй целевой процесс и устанвливай хук. Что видишь в протоколе ?

Теперь снимай хук. Что видишь в протоколе ?

Теперь вновь ставль хук. Завершай целевой процесс. Что видишь в протоколе ?


 
Сергей М. ©   (2008-09-02 12:22) [127]


> Если библитека серверным процессом выгружается


Не знаю я никаких твоих "серверных процессов" !)

Хук-модуль у тебя должен выгружаться либо по завершению "жертвы" либо после вызова UnHook-ф-ции, и по барабану кто и откуда ее вызывает - хоть из "серверного процесса", хоть с серобуромалинового, хоть с Луны)


 
KygECHuK ©   (2008-09-02 12:32) [128]


> Хук-модуль у тебя должен выгружаться либо по завершению
> "жертвы" либо после вызова UnHook-ф-ции, и по барабану кто
> и откуда ее вызывает - хоть из "серверного процесса", хоть
> с серобуромалинового, хоть с Луны)


мне тоже поборабану, ну человек спросил...


 
evvcom ©   (2008-09-02 12:36) [129]


> Тестировщик это в смысле я? :)

Нет, это та прога, про которую ты говорил в начале... а, нет, та прога - жертва :)


 
KygECHuK ©   (2008-09-02 12:45) [130]


> Нет, это та прога, про которую ты говорил в начале... а,
>  нет, та прога - жертва :)

ААА... брат по разуму!! Я его не понимаю, точно так же, как меня не понимают другие!!!! :))

Жертва - АИС, не жертва - TestComplete. он же серверный процесс.


 
Сергей М. ©   (2008-09-02 13:18) [131]


> Если библитека серверным процессом выгружается, то соответсвенно,
>  выгружаюися и все прехватчики


Ты осознаешь, что в процессах АИС и ТестКомплит фигурируют два совершенно разных экз-ра твоего модуля ?


 
KygECHuK ©   (2008-09-02 13:38) [132]


> Ты осознаешь, что в процессах АИС и ТестКомплит фигурируют
> два совершенно разных экз-ра твоего модуля ?


Да, это так...


 
Сергей М. ©   (2008-09-02 13:49) [133]

Ну так что насчет [126] ?


 
KygECHuK ©   (2008-09-02 13:54) [134]


> Ну так что насчет [126] ?

Ща гоняю, какойто фарш выходит.... сейчас разберусь и напишу


 
Сергей М. ©   (2008-09-02 14:27) [135]


> какойто фарш выходит


Известно какой - из мух и котлет) ..


 
KygECHuK ©   (2008-09-02 15:42) [136]

Насчёт фарша, у меня ошибочно опредяется состояние ловушки, надо определять не по наличию модуля в процессе, а сделать специальный флаг.

Сейчас написал тестовый проект чтоб иcпользовать его как сервер.
Сделал два режима
первый:
1 Жмакаем кнопку хук внедряется
2 что то делаем в жертве
3 Жмакаем другую кнопку хук извлекается

то есть всё как вы написали

второй:

Но существует необходимость оперативно пересылать данные после прехвата в форму сервера для чего я реши использовать WM_COPYDATA,

для этого я создал отдельный поток который внедряет хук и перерисовывает окно.
Вот в этом случае и происходит самостоятельная выгрызка библиотеки перехватчика, т. к. я её , выгрызку, нигде не вызываю.

А точно неявная выгрузка ловушки происходит только по завершению процесса?

На этот раз проверяд не по логу, а в Process Sxplorer"е


 
Сергей М. ©   (2008-09-02 16:05) [137]


> 1 Жмакаем кнопку хук внедряется
> 3 Жмакаем другую кнопку хук извлекается
>
> то есть всё как вы написали


Так ведь иначе и быть не может)

А все остальное, что ты нагородил вокруг этого огорода, к собственно огороду отношения не имеет - разгребай уж сам)


> А точно неявная выгрузка ловушки происходит только по завершению
> процесса?


Ну если ты нигде не вызываешь ни UnHook ни FreeLibrary, то кто еще может сделать это кроме системы по завершению целевого процесса ? Сторонний код, внедренный кем-то в то же АП и "пасущий" твой модуль чтобы навредить тебе, естественно, я не рассматриваю ..


 
KygECHuK ©   (2008-09-02 16:30) [138]


>  Сторонний код, внедренный кем-то в то же АП и "пасущий"
> твой модуль чтобы навредить тебе, естественно, я не рассматриваю
> ..


проверял на Notepad"е - нет там ничего партизанского


> разгребай уж сам)


Постараюсь


 
evvcom ©   (2008-09-02 16:30) [139]

Я-то чего влез? Сам пишу подобное. У меня раньше была задача аналогичная, я ее решил локально. Теперь еще 2 похожие задачи нарисовались. Вот только процесс в одной из них уже не GUI. Вот и решил написать нечто универсальное. Сервис, чтобы работать могло и под учеткой простого смертного, универсальная dll-внедрялка через RemoteThread и собственно для каждой задачи своя dll, реализующая перехваченные функции. По ходу возникают разные проблемы, но они пока решаются, хотя и до завершения еще далеко :)


 
KygECHuK ©   (2008-09-02 16:42) [140]


> завершения еще далеко :)


Желаю удачи, будут проблемы - поделюсь наболевшим..


 
evvcom ©   (2008-09-02 17:07) [141]

Да я и сам могу поделиться :)
DLL уже внедряется и выгружается без ошибок.
Сейчас пишу систему общения, протокол обмена информацией.
В той задаче с локальным решением устанавливались ловушки, а вот со съемом была проблема. IDA Pro тогда показал, что после загрузки плагинов, то приложение читало адрес перехваченной функции, сохраняло его в регистре и дальше уже в рабочем цикле выполняло call <Register>. Внутри этого цикла в итоге вызывалась и FreeLibrary для плагина. Так и пришлось тогда перехватывать еще и FreeLibrary и в случае выгрузки моей dll команду пропускать мимо ушей :)


 
Сергей М. ©   (2008-09-02 17:08) [142]


> проверял на Notepad"е - нет там ничего партизанского
>


Да я и не утверждаю, что тут партизаны шорох наводят)
Как раз наоборот - их появление тут крайне маловероятно, да и ты тоже вроде бы не оккупант, чтобы свои стратегические неудачи на партизанские вылазки сваливать)


 
KygECHuK ©   (2008-09-02 17:10) [143]

нашел причину, все дело в вспомогательном потоке, по его завершении выгружается перехватчик, всего делов. Дело не критчное. Ошибок не нашли. Акуна матата...


 
KygECHuK ©   (2008-09-02 17:16) [144]


> DLL уже внедряется и выгружается без ошибок.


У меня тоже до "полевого" применения ошибок не было, а вот потом...


 
evvcom ©   (2008-09-02 17:27) [145]

Кстати, с доп.потоками в dll. Может пригодится. На днях выяснил, что если создавать или завершать доп.поток внутри DLL_PROCESS_ATTACH/DETACH, то получим граблями, так как тогда должны одновременно выполняться коды DLL_THREAD_ATTACH/DETACH, а это запрещено системой. Причем DisableThreadLibraryCalls не спасает, т.к. связано это все же с выделением памяти под структуры потока.


 
evvcom ©   (2008-09-02 17:28) [146]


> У меня тоже до "полевого" применения ошибок не было, а вот
> потом...

Ну так я сразу на реальной жертве экспериментирую :-)


 
KygECHuK ©   (2008-09-02 17:33) [147]


> Ну так я сразу на реальной жертве экспериментирую :-)


Ну так выгрузку при CreatRemoteThread ты как организовал?


 
evvcom ©   (2008-09-02 17:57) [148]

загрузка CreatRemoteThread Loadlibrary
выгрузка CreatRemoteThread FreeLibrary
все как у Рихтера. Или ты что-то иное имеешь ввиду?


 
Leonid Troyanovsky ©   (2008-09-02 18:04) [149]


> KygECHuK ©   (02.09.08 15:42) [136]

> А точно неявная выгрузка ловушки происходит только по завершению
> процесса?

Хук - собственность потока, его создавшего,
освобождается вместе с ним.
И не сразу, а при свершении очередного отлавливаемого события.

--
Regards, LVT.


 
KygECHuK ©   (2008-09-02 19:09) [150]


> Хук - собственность потока, его создавшего, освобождается
> вместе с ним.И не сразу, а при свершении очередного отлавливаемого
> события.


Вот это я уже сам выяснил эвристически то-есть тыком :). Спасибо за подтверждение моей догадки.


> все как у Рихтера. Или ты что-то иное имеешь ввиду?

Надо бы мне его почитать, это веть книга? )


 
Сергей М. ©   (2008-09-02 19:29) [151]


> Надо бы мне его почитать, это веть книга? )


Нет, это зарубки на скальных образованиях Мезозоя.


 
KygECHuK ©   (2008-09-02 19:33) [152]


> Нет, это зарубки на скальных образованиях Мезозоя.


Жестко, а что так?


 
Сергей М. ©   (2008-09-02 20:11) [153]

Да просто устал я от твоего Монте-Карло, извини уж)


 
KygECHuK ©   (2008-09-02 20:21) [154]


> Да просто устал я от твоего Монте-Карло, извини уж)


Я вообще подумал что это про книгу котрая устарела )


 
KygECHuK ©   (2008-09-02 21:00) [155]

да и тема себя изчерпала


 
Сергей М. ©   (2008-09-02 21:04) [156]

Да и, похоже, ни о чем она была - как был у тебя вопрос про AV неразрешенным, так он таким и остался.


 
KygECHuK ©   (2008-09-02 21:08) [157]


> Да и, похоже, ни о чем она была - как был у тебя вопрос
> про AV неразрешенным, так он таким и остался.


нет, все получилось, я использовал ваш совет и AV больше нет.
Ище раз спасибо.


 
evvcom ©   (2008-09-03 08:17) [158]


> это веть книга? )

Джефри Рихтер. Windows для профессионалов.
Если не путаю, у Анатолия Подгорецкого на сайте есть.


 
KygECHuK ©   (2008-09-03 10:34) [159]


> Джефри Рихтер. Windows для профессионалов.Если не путаю,
>  у Анатолия Подгорецкого на сайте есть.

Спасибо посмотрю

> выгрузка CreatRemoteThread FreeLibrary


Ты её делаешь сразу без условий или с какими то либо задержками или синхронизацией?


 
evvcom ©   (2008-09-03 13:54) [160]

честно говоря, такую деталь не помню. Писал давно, да и по сути делал перевод с сишного примера Рихтера на паскаль, а под рукой сейчас исходника нет. Вечером посмотрю, если не забуду :)



Страницы: 1 2 3 4 5 вся ветка

Текущий архив: 2009.10.25;
Скачать: CL | DM;

Наверх




Память: 0.84 MB
Время: 0.041 c
15-1251145808
Юрий
2009-08-25 00:30
2009.10.25
С днем рождения ! 25 августа 2009 вторник


15-1250886604
Юрий
2009-08-22 00:30
2009.10.25
С днем рождения ! 22 августа 2009 суббота


15-1251430920
Slym
2009-08-28 07:42
2009.10.25
RDP через HTTP прокси


2-1251984161
LDV
2009-09-03 17:22
2009.10.25
TListBox - Color select item


2-1251718687
abun
2009-08-31 15:38
2009.10.25
icns - иконки для MAC