Паразит для IE Николай GorluM Хакер, номер #071, стр. 071-110-3 m_spWebBrowser2-> get_LocationURL(&wstr); где wstr – это указатель на массив двухбайтовых символов, в который наш метод занесет свое значение. От нас потребуется только проверить с помощью функции strcmpW (юникод-версия), Яндекс ли это. Если да, то ругаемся и топаем на google с помощью метода Navigate – уже второго нашего использования объектной модели браузера. У этого метода куча параметров, заполнять которые нам вовсе не нужно, достаточно в первый поместить указатель на unicode-строку, содержащую урл гугла: m_spWebBrowser2-> Navigate(TEXT("http://www.google.com"),0,0,0,0); Просто, не правда ли? Естественно, что полученный url можно записывать куда-нибудь в файл, используя или winapi-функции, или услуги MFC, но об этом ты уже наверняка читал в других статьях этой рубрики. Если не додумаешься до реализации сам, прочти в Спеце материал «Атака на Windows», там это довольно подробно описано, а статьи про работу с файлами на API есть на том же xakep.ru. Регистрация в системе На этом процесс создания BHO не останавливается, поскольку полученный объект нам еще нужно как-то зарегистрировать в системе. Если всмотреться с помощью regmon в работу чужого плагина для осла, можно увидеть, что он создает в реестре в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\ новую пустую папку с именем CLSID объекта, а в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Classes создает такую же, но уже с описанием DLL и названием BHO. Во время создания нашего проекта в студии также появился файл с расширением rgs. Этот файл будет добавлен в ресурсы, он описывает действия, которые нужно совершить программе regsvr32 для того, чтобы зарегистрироваться в системе. Чтобы наш BHO работал, надо немного этот файлик подкорректировать. Первое, что сделаем, - поменяем CLSID ключа TypeLib на те же ключи, что в файле выше. Второе – добавим в файл еще один ключ, который студия не предусмотрела и без которого наш BHO не будет подгружаться к IE: HKLM {SOFTWARE {Microsoft {Windows {CurrentVersion {Explorer {'Browser Helper Objects' {ForceRemove {94C5A8E6-0E10-4C84-B0ED-44343034BBDA} = s 'YA2GOOGLE' }}}}}}} Теперь, после компиляции, стоит только запустить regsvr32 с ключами /s /c и путем к нашей DLL, как сразу начнет действовать Browser Helper Object. Больше Функций – больше вкуса! Действительно, одним получением урла сыт не будешь. Давай научимся делать еще что-нибудь! Если в студии в нашем сорце набрать m_spWebBrowser2-> , появится нехилый списочек методов этого класса, и они все представляют некоторый интерес. Допустим, мы хотим получить доступ к коду странички и как-то его подкорректировать или взять оттуда какое-либо значение. Это реализуется с помощью метода get_Document. Параметром ему нужно передать указатель на объект интерфейса IDispatch. Сделать это очень легко: CComPtr<IDispatch> pDisp; m_spWebBrowser2-> get_Document(&pDisp); Далее мы должны сказать, что этот указатель вовсе не на диспатч, а на IHTMLDocument2. Для этого мы просто создадим еще один новый указатель, уже на то, что нам надо, и присвоим ему значение старого: |