Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Вниз

Выгрузка 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.10.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.82 MB
Время: 0.05 c
15-1250873376
TUser
2009-08-21 20:49
2009.10.25
Прогноз цен


2-1251683194
Johnnnn
2009-08-31 05:46
2009.10.25
Цветной текст ДЛЯ richedit?


2-1250865488
Л.Д.
2009-08-21 18:38
2009.10.25
TListView


2-1251291344
Alexey
2009-08-26 16:55
2009.10.25
Удаление элемента из динамического массива


2-1251465886
stas
2009-08-28 17:24
2009.10.25
Сообщение о успешной установке сервиса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский