Конференция "WinAPI" » Выгрузка WinApi перехватчика [D7, WinXP]
 
  • Сергей М. © (02.09.08 11:14) [120]

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


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

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

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

    Ну хорошо, а где протоколирование и анализ потоков, вызывающих аттач/детач ?
  • KygECHuK © (02.09.08 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 © (02.09.08 11:46) [122]
    Что-то всё с ног на голову. Кто такой сервер? Жертва? Почему жертва стала сервером?
  • KygECHuK © (02.09.08 11:52) [123]

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


    В библиотеке реализована и серверная часть перехватчика. она себя и внедряет в АП жертвы.
  • evvcom © (02.09.08 12:06) [124]

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

    Я догадался

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

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

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


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


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


    Тестировщик это в смысле я? :)
  • Сергей М. © (02.09.08 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;



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

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

    Теперь вновь ставль хук. Завершай целевой процесс. Что видишь в протоколе ?
  • Сергей М. © (02.09.08 12:22) [127]

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


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

    Хук-модуль у тебя должен выгружаться либо по завершению "жертвы" либо после вызова UnHook-ф-ции, и по барабану кто и откуда ее вызывает - хоть из "серверного процесса", хоть с серобуромалинового, хоть с Луны)
  • KygECHuK © (02.09.08 12:32) [128]

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


    мне тоже поборабану, ну человек спросил...
  • evvcom © (02.09.08 12:36) [129]

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

    Нет, это та прога, про которую ты говорил в начале... а, нет, та прога - жертва :)
  • KygECHuK © (02.09.08 12:45) [130]

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

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

    Жертва - АИС, не жертва - TestComplete. он же серверный процесс.
  • Сергей М. © (02.09.08 13:18) [131]

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


    Ты осознаешь, что в процессах АИС и ТестКомплит фигурируют два совершенно разных экз-ра твоего модуля ?
  • KygECHuK © (02.09.08 13:38) [132]

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


    Да, это так...
  • Сергей М. © (02.09.08 13:49) [133]
    Ну так что насчет [126] ?
  • KygECHuK © (02.09.08 13:54) [134]

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

    Ща гоняю, какойто фарш выходит.... сейчас разберусь и напишу
  • Сергей М. © (02.09.08 14:27) [135]

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


    Известно какой - из мух и котлет) ..
  • KygECHuK © (02.09.08 15:42) [136]
    Насчёт фарша, у меня ошибочно опредяется состояние ловушки, надо определять не по наличию модуля в процессе, а сделать специальный флаг.

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

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

    второй:

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

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

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

    На этот раз проверяд не по логу, а в Process Sxplorer'е
  • Сергей М. © (02.09.08 16:05) [137]

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


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

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


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


    Ну если ты нигде не вызываешь ни UnHook ни FreeLibrary, то кто еще может сделать это кроме системы по завершению целевого процесса ? Сторонний код, внедренный кем-то в то же АП и "пасущий" твой модуль чтобы навредить тебе, естественно, я не рассматриваю ..
  • KygECHuK © (02.09.08 16:30) [138]

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


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


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


    Постараюсь
  • evvcom © (02.09.08 16:30) [139]
    Я-то чего влез? Сам пишу подобное. У меня раньше была задача аналогичная, я ее решил локально. Теперь еще 2 похожие задачи нарисовались. Вот только процесс в одной из них уже не GUI. Вот и решил написать нечто универсальное. Сервис, чтобы работать могло и под учеткой простого смертного, универсальная dll-внедрялка через RemoteThread и собственно для каждой задачи своя dll, реализующая перехваченные функции. По ходу возникают разные проблемы, но они пока решаются, хотя и до завершения еще далеко :)
 
Конференция "WinAPI" » Выгрузка WinApi перехватчика [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0.001][p:0.001]