Как хукнуть функции браузера?

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 5 сен 2017.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    А точнее - Firefox'a.
    Тут балуюсь FingerPrint'ами, которые может оставить/получить браузер. И вроде как почти все так или иначе получается отключить или подменить кроме rect'ов. Проверить вот тут.
    Вроде юзается функция object.getClientRects()
    Собственно вопрос, как и где перехватить эту функцию чтобы подсунуть другие данные.

    Благодарю за внимание.
     
  2. comrade

    comrade Константин Ёпрст

    Публикаций:
    0
    Mozilla предостовляет доступ к private symbols к компилированым бинарникам от firefox. Качаем символы, из них узнаём положение сей функции. Подцепиваем стандартными методами: prologue detour (переписываем первые инструкции сей функции на jmp на перехват) или vtable hooking (если сей функции является виртуальной, переписываем ей function pointer в vtbl структуре). Последний метод более надёжный и лёгкий (на пример, можно использовать InterlockedCompareExchangePtr для корректной установки перехвата в присутствие параллельных потоков, вкл. возможность что они читает тот самый vtable function pointer одновременно с его перехватом.
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    А попроще никак? :) Чтоб не зависить версий браузера. ..на уровне winapi ставить хук.
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Flasher,

    ТЗ не корректно. В данном случае следует посмотреть начинку целевой апи и найти возможность фильтрации без изменения её кода. Или как то изменить cfg вызывающего кода, что бы выполнение прошло на нужный указатель.

    Всегда код адресуется непосредственно, на колбек имеется прямой указатель. При этом можно внести поправки в этот указатель, изменить его.

    Ну а код менять - забудьте про это, это нельзя делать.
     
  5. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Почему? Все так делают уже десятки лет и работает, как часы.
     
  6. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Я со старого компа зашёл вчера на Ютуб. А он мне пишет
    - вы не можете пользоваться ютубом ваш Фаирфокс устарел.
    Теперь надо ОС менять, пароль не помню.
     
  7. Minzdrav

    Minzdrav Well-Known Member

    Публикаций:
    0
    Через ГРУБ вспомнил что можно пароль сбросить.
    Переустановил фаерфокс, зашло на Ютуб. Вобще
    обнаглели. Линкс не устарел а фаерфокс устарел.
    Как он вообще устареть может?
     
  8. RET

    RET Well-Known Member

    Публикаций:
    17
    ТС, все там сводится к GDI обычному
     
  9. Flasher

    Flasher Member

    Публикаций:
    0
    Ковырять еще не начал, да и плохо это у меня получается. А куда копать? В сторону Firefox\xul.dll (который кстати весит почти 50мб)?
    Попытался через KiFastSystemCallRet глянуть вызываются-ли:
    Код (Text):
    1. NtGdiConvertMetafileRect
    2. NtGdiCreateRectRgn
    3. NtGdiCreateRoundRectRgn
    4. NtGdiExcludeClipRect
    5. NtGdiGetBoundsRect
    6. NtGdiIntersectClipRect
    7. NtGdiRectangle
    8. NtGdiRectInRegion
    9. NtGdiRectVisible
    10. NtGdiRoundRect
    11. NtGdiSetBoundsRect
    12. NtGdiSetRectRgn
    13. NtUserDrawAnimatedRects
    14. NtUserGetMenuItemRect
    15. NtUserGetUpdateRect
    16. NtUserInvalidateRect
    17. NtUserValidateRect
    Но тишина.

    А это слишком нагло будет попросить назвать к каким именно gdi сводится дело? ))
     
  10. RET

    RET Well-Known Member

    Публикаций:
    17
    Да типа TextOut ExtTextOut и иже с ними. Но может и директХ там, я точно не припомю, недавно для Оперы делал, там GDI
     
  11. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    RET,

    Вывод текста в gdi может быть не явным, тоесть формируется спец запрос и при вызове любого сервиса выводится текст. Сделано для быстрой обработки, что бы не вызывать много раз ядро.
     
  12. RET

    RET Well-Known Member

    Публикаций:
    17
    Ну там хардкор с шадовом точно не юзают
     
  13. RET

    RET Well-Known Member

    Публикаций:
    17
    В опере к примеру берется TextOutW стандартный, там клиентректы не надо
     
  14. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    RET,

    TextOut() именно и использует batching, запрос на вывод формируется в памяти(TEB) и функция возвращает управление без вызова сервисов. Тогда пакет будет обработан при следующем вызове любого сервиса. Так как тс смотрит по сервисному логу, то вполне вероятно что там и не будет ожидаемых сервисов.
     
  15. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Вот например посмотрел стандартный блокнот 7-ки, сервис который выводит текст в ShowCaret(): NtUserShowCaret, так как это первый сервис, который был вызван после TextOut().