Pull to refresh

Убиваем «колокольчик» от Google Chrome в трее

Reading time2 min
Views68K
hackers
С недавних пор в Google Chrome появилась новая фича с названием оповещения. Время от времени, при непонятных обстоятельствах в системном трее появляется колокольчик, и всё. То есть если не настроить его вручную он там просто занимает место не выполняя никаких функций. А чтобы он там появился достаточно например развернуть на полный экран видео в ютубе, убрать его потом нельзя, только закрыть хром. Поиск способов как убрать его правильно успехом не увенчался. Способы вроде и работали но потом колокольчик снова появлялся в трее, и раздражал. В один вечер он сильно достал, и пришлось взяться за тяжёлую артиллерию.

IDA, Hiew, обрезание колокольчика


Первый делом смотрим где лежит сам Google Crhome, я посмотрел по ярлыку лежит он, как выяснилось, в %USERPROFILE%\AppData\Local\Google\Chrome\Application и судя по всему лежит две версии прошлая и текущая. Сейчас нам нужен каталог 35.0.1916.114 в нём лежит много dll'ок, но мне почему то сразу приглянулась chrome.dll Копируем её куда нибудь в удобное место открываем в IDA, и начинаем ждать, 28 мегабайт это довольно внушительно. Пока мы ждём, немного подумаем что искать дальше. В общем вариантов не много, а точней один(для Win) API функция Shell_NotifyIcon из shell32.dll её и будем искать. Итак, пока мы думали, IDA уже проанализировала файл. Переходим на вкладку Import и ищем там нужную нам функцию

Нам повезло функция импортируется. И для её вызова будет использован адрес 0x371d7c0 в целом IDA нам уже больше не нужна. Итак у нас есть адрес по которому импортирована нужная нам функция. Тут сразу возникает идея заменить все вызовы этой функции на NOP однако стоит вспомнить как происходит вызов WinApi функций. Ага вот и заморочка стэк мы должны очистить сами, ну да ладно посмотрим что можно сделать. Открываем dll в Hiew, переключаем его в режим Asm(Два раза нажать Enter) и начинаем поиск вызова функции путем поиска известного уже нам адреса в файле тут есть не забываем при этом что в x86 адреса числа пишутся в обратном порядке, от младшего байта к старшему то есть искать надо не 371d7c0 а c0d77103. Что в общем и находим
Итак мы имеем FF 15 C0 D7 71 03 6 байт для вызова функции, нам их нужно заменить очисткой стека и на всякий будем честны с хромом обнулением регистра EAX. Последнее надо чтобы хром понял что ему почему то не удалось добавить иконку в трей. Функция Shell_NotifyIcon принимает два параметра, значит со стека надо будет убрать тоже два параметра. Я решил использовать для этого два вызова pop eax, c последующим обнулением EAX через XOR EAX, EAX после чего остаются ещё два байта, которые забил NOP.

В итоге получаем следующее нужно поменять последовательность байт FF15C0D77103 на 585833C09090 что делается просто поиском и заменой. Таких вызовов оказалось семь. После чего копируем обработаную нами dll'ку на законное место(предварительно закрыв все Google Chrome). Запускаем Chrome пытаемся добиться появления колокольчика разворотом YouTuba на полный экран, но ничего не выходит, колокольчика больше нет, итог победа.
PS. Мне самому не очень нравится такой способ, я надеюсь что Google введёт штатную возможность отключения данного функционала, ну а пока и так сойдёт.
Tags:
Hubs:
+23
Comments43

Articles

Change theme settings