Blog. Just Blog

Убираем рекламу из uTorrent

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы uTorrent
Скриншот программы uTorrent

Для пополнения своей видеотеки я уже давно пользуюсь бесплатным торрент-клиентом uTorrent, но вот уже два обновления подряд начали показывать рекламный баннер. Я, конечно, понимаю, что при такой популярности программы было бы странным не попытаться поиметь с нее бабла, но... Мне категорически не нравится реклама в программах в любом виде. Сейчас будем возвращать uTorrent его былое великолепие.

Скачиваем дистрибутив, устанавливаем, запускаем. Рекламный баннер в главном окне программы появляется не сразу же, а через некоторое время после запуска. Но его мерзость от этого ничуть не уменьшается. Посмотрим на исполняемый файл. Судя по названиям секций, он упакован UPX, однако сам UPX с распаковкой не справляется:

Файл не распаковывается UPX
Файл не распаковывается UPX

Видимо дело в том, что к файлу после упаковки еще прикреплены сертификаты. Но с распаковкой прекрасно справляется универсальный распаковщик UPX от китайских товарищей.

UpxUnpacker 0.2UpxUnpacker 0.2

UpxUnpacker.0.2.zip (124,910 bytes)

Для борьбы с баннером надо узнать хоть что-нибудь о нем. Для этого воспользуемся моей программой WinDowzer, и с ее помощью узнаем, что название класса окна баннера "AdBar". Теперь надо поискать в исполняемом файле что-нибудь, связанное с этой строкой. В ресурсах ничего похожего нет, зато где-то в середине файла находится единственное вхождение искомой строки в юникоде:

Строка с названием класса окна
Строка с названием класса окна

Следующий шаг - надо найти код, который ссылается на эту строку. Это, естественно, делается в дизассемблере, в который вы уже отправили распакованный файл. Еще не отправили? Тогда сделайте это незамедлительно. Нашему взору открывается длиннющая процедура:
  1. .text:0047402F                 sub     esp, 74h
  2. .text:00474032                 push    ebx
  3. .text:00474033                 push    esi
  4. .text:00474034                 mov     esi, ecx
  5. .text:00474036                 xor     ebx, ebx
  6. .text:00474038                 cmp     [esi+104h], ebx
  7. .text:0047403E                 jnz     loc_4743D9
  8. .text:00474044                 cmp     [esi+10Ch], ebx
  9. .text:0047404A                 jnz     loc_4743D9
  10. .text:00474050                 cmp     [esi+110h], ebx
  11. .text:00474056                 jnz     loc_4743D9
  12. .text:0047405C                 cmp     [esi+114h], ebx
  13. .text:00474062                 jnz     loc_4743D9
  14. .text:00474068                 push    ebp
  15. .text:00474069                 push    edi
  16. ; Указатель на строку AdBar
  17. .text:0047406A                 push    offset aAdbar   ; lParam
  18. .text:0047406F                 push    ebx             ; wParam
  19. .text:00474070                 push    0Ch             ; Msg
  20. .text:00474072                 push    dword ptr [esi+4] ; hWnd
  21. .text:00474075                 call    ds:SendMessageW
  22. .text:0047407B                 mov     ebp, 236h
  23. ...
Куча кода, который, судя по вызываемым функциям WinApi, отрисовывает окно баннера и добавляет его к основному окну программы. И, что самое интересное, сама эта функция вызывается вот из такого кода:
  1. .text:0047549D loc_47549D:
  2. .text:0047549D                 cmp     eax, 808Ah
  3. .text:004754A2                 jnz     short loc_4754AB
  4. .text:004754A4                 push    edx
  5. .text:004754A5                 call    sub_47402F
  6. .text:004754AA                 retn
До и после этого блока точно такие же вызовы, которые отличаются только числом в операторе сравнения и вызываемой функцией в случае его совпадения. Если вы немного разбираетесь в программировании, то без труда опознаете оператор "case" или несколько последовательных конструкций "if-then-else". Попробуем пропатчить uTorrent, чтобы условие инициализации баннера никогда не сработало. Для этого меняем условный переход по адресу 004754A2. Сохраняем изменения, запускаем. На первый взгляд все нормально, но в момент, когда баннер должен появляться, программа падает с ошибкой:

Окно ошибки
Окно ошибки

Было бы логично предположить, что после инициализации баннера с ним должны выполняться какие-то действия. А раз окно баннера не было создано, то попытки программы взаимодействовать с ним приводят к падению. Снова предположим, что раз код инициализации баннера равняется 808Ah, то код взаимодействия с баннером должен быть похожим. Как я говорил выше, прямо под блоком вызова инициализации есть похожий блок, в котором проверяется код, отличающийся от кода инициализации только на единицу:
  1. .text:004754AB loc_4754AB:
  2. .text:004754AB                 cmp     eax, 8089h
  3. .text:004754B0                 jnz     short loc_4754B9
  4. .text:004754B2                 push    edx
  5. .text:004754B3                 call    sub_474FBC
  6. .text:004754B8                 retn
Тут вызывается не менее громоздкая процедура, которая, в принципе, может быть чем угодно. Если бы не кусочек кода в середине, который выдает ее с потрохами:
  1. ...
  2. .text:00475279                 call    dword ptr [eax+4]
  3. .text:0047527C                 push    eax
  4. .text:0047527D                 push    [ebp+arg_0]
  5. .text:00475280                 push    offset aLadwindowRefre
  6. ; "\n--LAdWindow refreshing ad group %d for"...
  7. .text:00475285                 call    nullsub_2
  8. .text:0047528A                 mov     ecx, [ebp+xLeft]
  9. .text:0047528D                 add     esp, 14h
  10. .text:00475290                 call    sub_403145
  11. ...
Значит вся эта процедура так же как-то связана с обновлением баннера. По аналогии с первым патчем меняем условный переход по адресу 004754B0 на безусловный. Сохраняем изменения, запускаем. На этот раз рекламный баннер пропал навсегда, а uTorrent прекрасно работает без всяких вылетов.

Рекламного баннера больше нет
Рекламного баннера больше нет

Сигнатура для патча уникальная и очень удобная для поиска, поэтому можно сделать что-то типа универсального лоадера или даже универсальный inline-патч. Главное, чтобы аффтары софта поняли, что так будет с каждым, кто захочет запомоить правильную программу своей поганой рекламой.

Поделиться ссылкой ВКонтакте Поделиться ссылкой на Facebook Поделиться ссылкой на LiveJournal Поделиться ссылкой в Мой Круг Добавить в Мой мир Добавить на ЛиРу (Liveinternet) Добавить в закладки Memori Добавить в закладки Google
Просмотров: 20196 | Комментариев: 24

Метки: реверсинг
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Андрей (08.01.2013 в 07:28):
Премного благодарен за распаковщик.
tester3000 (25.12.2012 в 02:25):
ManHunter, что-то проглядел я сначала теперь нашел =)
ManHunter (24.12.2012 в 17:43):
Какие нафиг ветки. Меню "Настроки".
tester3000 (24.12.2012 в 17:42):
ManHunter, спасибо но что-то не нашел в какой ветке галочка >>Показать информацию plus.
Зато нашел в Preferences -> Advanced -> gui.show_plus_upsell поставил false и все исчезло.
ManHunter (23.12.2012 в 17:02):
Настройки -> Показать информацию plus.
tester3000 (23.12.2012 в 16:57):
Недавно установил новую версию uTorrent 3.2.3 в настройках offers.left_rail_offer_enabled  и offers.sponsored_torrent_offer_enabled поставил на false но слева реклама uTorrent Plus не исчезает. Как ее убрать подскажите плиз?

вот скрин если кто не понял про что я написал: www.imagebam.com/image/5c3727227390527
22 (23.12.2012 в 10:15):
вернее -
offers.left_rail_offer_enabled  и
offers.sponsored_torrent_offer_enabled
franken (19.12.2012 в 00:51):
ManHunter, мы же не ищем легких путей )))
хирургия - всегда лучше терапии )
или "всё бы этим хирурга резать, а мы вот выпишем Вам таблеточки, само отвалиццо!" ))
Kemper (17.12.2012 в 03:08):
да! пускай region59 и приказал долго жить но дело живет ) ManHunter, как всегда в тему выручаешь ;)
[2 минуты спустя] 
ааа!!! - 25 буду )))
Band (07.12.2012 в 05:09):
Выключил рекламу как посоветовал ManHunter. Огромное спасибо!
Даниил (25.11.2012 в 02:44):
Спасибо, Игорь. Не пришлось танцевать с бубном, оказалось рекламу можно убрать всего лишь через настройки.
The-hedgehog (18.11.2012 в 15:07):
Спасибо за статью и граммотные коментария, самбо век искал)
lexxsimf (18.11.2012 в 02:28):
Поскольку все проги используют движок IE, то направив его через локальный прокси, который ведет лог, можно вычислить адрес банера, и забаниь его. Незнаю, как другие, я весь инет во всех прогах настраиваю на локальный прокси, на нем веду черный список. Даже проверка активации windows блокируется и трафик слежения за пользователями касперского антивируса, что появился начиная с 2011-той версии... Сплошные плюсы. Еще можно в одной проге все остальное перевести на каскад другого прокси, если нет прямого интернета.
_sheva740 (15.11.2012 в 13:46):
>то код взаимодействия с баннером должен быть похожим.
Вот с этого места все самое сложное. Догадываться порой тяжело )))
Спасибо за статью.
катавасия (13.11.2012 в 16:01):
В ответ на Игорь (06.11.2012 в 00:13):
Игорь, спасибо большое.
ManHunter (12.11.2012 в 18:29):
Ну не у всех же MacOS :)
zummenix (12.11.2012 в 18:28):
А в версии для mac os нет рекламы :)
tester3000 (10.11.2012 в 12:29):
Большое спасибо за познавательную статейку.
ManHunter (09.11.2012 в 21:01):
bigcatwar, я же просил в нетрезвом виде на сайт не заходить?
bigcatwar (09.11.2012 в 18:35):
скок можно говорить нет слов вроде авось мне приснилось
vox13 (09.11.2012 в 11:53):
Пусть это и отключается в самой программе, за статью спасибо, полезно и познавательно. Не все проги предусматривают отключение рекламы, да и в торренте это запрятано в дополнительных настройках, что очевидно сделали чтобы не отключали рекламу все подряд.
Super_DJ (06.11.2012 в 20:17):
Радикальные методы пусть и не нужны, но все равно спасибо.
ManHunter (06.11.2012 в 08:52):
Игорь, спасибо! Действительно можно обойтись и без хирургии, обычной терапией :)
"Настройки" -> "Конфигурация" -> "Дополнительно" -> ключ
offers.sponsored_torrent_offer_enabled поменять на "Выкл" или false.
Игорь (06.11.2012 в 00:13):
Эта реклама вроде отключается в самой программе.
Две настройки: left_rail_offer_enabled, sponsored_torrent_offer_enabled
выставить в FALSE и перезапустить программу.

Добавить комментарий

Заполните форму для добавления комментария
Комментарии отключены администратором сайта
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2017
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.14 сек. / MySQL: 2 (0.0082 сек.) / Память: 4.5 Mb
Наверх