Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #71, НОЯБРЬ 2004 г.

Паразит для 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. Для этого мы просто создадим еще один новый указатель, уже на то, что нам надо, и присвоим ему значение старого:

Назад на стр. 071-110-2  Содержание  Вперед на стр. 071-110-4