Текущий архив: 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.81 MB
Время: 0.056 c