-
> Как это..... Reserved... так обычно пишут
Обычно пишут писатели .. Ильф и Петров)..
Тебя ж не интересуют события создания/завершения потоков в целевом процессе, зачем же ты оставил эти кейсы ?
Это, конечно, непринципиально, наводит на мысль что ты не понимаешь что делаешь)
Ну хорошо, а где протоколирование и анализ потоков, вызывающих аттач/детач ?
-
> Это, конечно, непринципиально, наводит на мысль что ты не > понимаешь что делаешь)
Шерлок как вы это делаете? :) Очень даже не принципиально... Я еще очень много лишнего дописал в поисике ошибки. В ближайшее время все это будет убранно. > Ну хорошо, а где протоколирование и анализ потоков, вызывающих > аттач/детач ?
Никакого анализа потоков нет.
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;
Вот по получении сообщения в серверной части и пишется сообщение в лог
-
Что-то всё с ног на голову. Кто такой сервер? Жертва? Почему жертва стала сервером?
-
> Что-то всё с ног на голову. Кто такой сервер? Жертва? Почему > жертва стала сервером
В библиотеке реализована и серверная часть перехватчика. она себя и внедряет в АП жертвы.
-
> В библиотеке реализована и серверная часть перехватчика
Я догадался
> она себя и внедряет в АП жертвы
так все-таки сервер рулит внедрением. Я обычно в LogMessage еще включаю и дату/время события. Зачем отрицание "(not m_bIsThisServerProcess)", почему бы его не убрать и then/else не поменять местами для уменьшения путаницы? Так получается, что не только хук снимается, но и на сервере dll завершается/выгружается? Это так тестировщик работает?
-
> Так получается, что не только хук снимается, но и на сервере > dll завершается/выгружается?
Если библитека серверным процессом выгружается, то соответсвенно, выгружаюися и все прехватчики. и никак не наоборот.
> Это так тестировщик работает?
Тестировщик это в смысле я? :)
-
Черт те что и сбоку бантик)... Серверы какие-то, соообщения какие-тио кому-то, эжекты какие-то из всех процессов .. Выкинь нафих всю эту требуху хотя бы на время и органичься только протоколированием: 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; Теперь стартуй целевой процесс и устанвливай хук. Что видишь в протоколе ? Теперь снимай хук. Что видишь в протоколе ? Теперь вновь ставль хук. Завершай целевой процесс. Что видишь в протоколе ?
-
> Если библитека серверным процессом выгружается
Не знаю я никаких твоих "серверных процессов" !)
Хук-модуль у тебя должен выгружаться либо по завершению "жертвы" либо после вызова UnHook-ф-ции, и по барабану кто и откуда ее вызывает - хоть из "серверного процесса", хоть с серобуромалинового, хоть с Луны)
-
> Хук-модуль у тебя должен выгружаться либо по завершению > "жертвы" либо после вызова UnHook-ф-ции, и по барабану кто > и откуда ее вызывает - хоть из "серверного процесса", хоть > с серобуромалинового, хоть с Луны)
мне тоже поборабану, ну человек спросил...
-
> Тестировщик это в смысле я? :)
Нет, это та прога, про которую ты говорил в начале... а, нет, та прога - жертва :)
-
> Нет, это та прога, про которую ты говорил в начале... а, > нет, та прога - жертва :)
ААА... брат по разуму!! Я его не понимаю, точно так же, как меня не понимают другие!!!! :))
Жертва - АИС, не жертва - TestComplete. он же серверный процесс.
-
> Если библитека серверным процессом выгружается, то соответсвенно, > выгружаюися и все прехватчики
Ты осознаешь, что в процессах АИС и ТестКомплит фигурируют два совершенно разных экз-ра твоего модуля ?
-
> Ты осознаешь, что в процессах АИС и ТестКомплит фигурируют > два совершенно разных экз-ра твоего модуля ?
Да, это так...
-
Ну так что насчет [126] ?
-
> Ну так что насчет [126] ?
Ща гоняю, какойто фарш выходит.... сейчас разберусь и напишу
-
> какойто фарш выходит
Известно какой - из мух и котлет) ..
-
Насчёт фарша, у меня ошибочно опредяется состояние ловушки, надо определять не по наличию модуля в процессе, а сделать специальный флаг.
Сейчас написал тестовый проект чтоб иcпользовать его как сервер. Сделал два режима первый: 1 Жмакаем кнопку хук внедряется 2 что то делаем в жертве 3 Жмакаем другую кнопку хук извлекается
то есть всё как вы написали
второй:
Но существует необходимость оперативно пересылать данные после прехвата в форму сервера для чего я реши использовать WM_COPYDATA,
для этого я создал отдельный поток который внедряет хук и перерисовывает окно. Вот в этом случае и происходит самостоятельная выгрызка библиотеки перехватчика, т. к. я её , выгрызку, нигде не вызываю.
А точно неявная выгрузка ловушки происходит только по завершению процесса?
На этот раз проверяд не по логу, а в Process Sxplorer'е
-
> 1 Жмакаем кнопку хук внедряется > 3 Жмакаем другую кнопку хук извлекается > > то есть всё как вы написали
Так ведь иначе и быть не может)
А все остальное, что ты нагородил вокруг этого огорода, к собственно огороду отношения не имеет - разгребай уж сам)
> А точно неявная выгрузка ловушки происходит только по завершению > процесса?
Ну если ты нигде не вызываешь ни UnHook ни FreeLibrary, то кто еще может сделать это кроме системы по завершению целевого процесса ? Сторонний код, внедренный кем-то в то же АП и "пасущий" твой модуль чтобы навредить тебе, естественно, я не рассматриваю ..
-
> Сторонний код, внедренный кем-то в то же АП и "пасущий" > твой модуль чтобы навредить тебе, естественно, я не рассматриваю > ..
проверял на Notepad'е - нет там ничего партизанского
> разгребай уж сам)
Постараюсь
-
Я-то чего влез? Сам пишу подобное. У меня раньше была задача аналогичная, я ее решил локально. Теперь еще 2 похожие задачи нарисовались. Вот только процесс в одной из них уже не GUI. Вот и решил написать нечто универсальное. Сервис, чтобы работать могло и под учеткой простого смертного, универсальная dll-внедрялка через RemoteThread и собственно для каждой задачи своя dll, реализующая перехваченные функции. По ходу возникают разные проблемы, но они пока решаются, хотя и до завершения еще далеко :)
|