09 декабря, 2011

Произвольный User Agent для Opera 12

Каждый браузер содержит главный компонент — движок для отображения веб-страниц. Иногда движки браузеров работают неодинаково, и веб-мастерам приходиться отдавать для браузеров разную информацию при загрузке одной и той же страницы. Чтобы сайт знал какой браузер мы используем — последний отдает информацию о себе, в том числе название и версию (см. user agent). Это позволяет веб-мастерам настроить сайт для правильного отображения в любом браузере.

Но иногда таким мастерам лень или они считают это необязательным, и некоторые браузеры игнорируют, отдавая страницу «по умолчанию». Последняя не всегда подходит для нашего браузера. Чтобы исключить возможные вопросы в службу поддержки сайт могут и вовсе заблокировать для непроверенного браузера . Пользователь получает сообщение, что данный браузер не поддерживается. В таком случае, можно замаскировать браузер под один из общеизвестных и распространенных, в надежде что созданная специально для него страница будет правильно отображена и в нашем браузере. Для этого нужно чтобы наш браузер отправил на сайт указанные нами название и версию (user agent).

Opera позволяет для указанного сайта настроить маскировку под один из известных браузеров. Для использования делаем: Контекстное меню для сайта (правый клик на страничке)|Настройки для сайта|Сеть|Идентификация браузера. В списке представлены распространенные Internet Explorer и Firefox. Но нет Chrome, и возможно вы хотите изменить версию тех что присутствуют в списке.

Маскируем браузер Opera под Chrome

В Chrome открываем страницу whoer.net и находим пункт HTTP_USER_AGENT. Сохраняем его например в блокноте. У меня это строка:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2

Решаем какой пункт из меню Opera будем заменять на наш. Я решил использовать пункт «Представляться как Firefox». Забегая вперед скажу, что нам нужна длинная строка, иначе наш текст просто не поместиться. Но при выборе заменяемой строки есть еще один нюанс . Чтобы стало ясно, попробуем посмотреть какой именно user agent отдает Opera при разных режимах маскировки (тот что по умолчанию «Представляться как Opera» не трогаем):

  • Представляться как Firefox:
    Mozilla/5.0 (Windows NT 6.1; ru; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.60
  • Маскироваться под Firefox:
    Mozilla/5.0 (Windows NT 6.1; ru; rv:2.0) Gecko/20100101 Firefox/4.0
  • Представляться как IE:
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; ru) Opera 11.60
  • Маскироваться под IE:
    Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; ru)

Видно, что для Firefox в режиме «представляться» user agent просто дополнили строкой «Opera 11.60». Думаю этот вариант можно исключить, оставив «маскироваться». Во вторых, он самый длинный (хотя и меньше чем нам необходимо). Итак, используем при замене именно пункт «Представляться как Firefox».

Изучаем исполняемые файлы Opera

Далее заглянув в папку где установлена Opera, видим два основных файла с исполняемым кодом opera.exe и opera.dll. Попробуем с помощью программы Process Explorer найти строки user agent в этих файлах. Так как номер версии скорее всего подставляется в шаблоны, то будем искать часть строки, например Mozilla или Trident. Делаем так:

  1. Запускаем Process Explorer от имени администратора;
  2. Выбираем процесс opera.exe;
  3. Двойной клик;
  4. Strings;
  5. Пункт Image (внизу);
  6. Пытаемся найти строки (Find);
  7. Не находим:(
  8. Закрываем окно;
  9. Нажимаем Ctrl+D;
  10. Находим в открывшемся списке opera.dll;
  11. Повторяем пункты 3 — 6 (например ищем строку Trident)
  12. Находим!

Немного выше есть строка нужная нам:
Mozilla/5.0 (%s; %s; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.60

Значит мы смело можем подменить строку внутри файла opera.dll. Это возможно нарушает лицензию на использование браузера, но главное чтобы не законодательство :)

Осталась проблема: как строку, полученную в первом пункте, вместить в длину строки, что нашли выше. Я решил использовать такой вариант:
Mozilla/5.0 (%s) AppleWebKit/535.2 Chrome/15.0.874.121 Safari/535.2.

То есть я удалил эту часть «(KHTML, like Gecko)». Кстати, в данной версии сразу за строкой user agent храниться шаблон для javascript:navigator.appVersion.

Изменяем исполняемые файлы Opera

Нам понадобиться hex-редактор. Я воспользовался Sweetscape 010 Editor. Стоит отметить что раньше opera.dll был запакован специальной программой для сжатия исполняемых файлов UPX. Но в версии 11.60 (сборка: 1185) которую я использую сейчас, программисты Opera возможно об этом забыли. Если вдруг они вспомнят об этом в будущих версиях, то предварительно нужно распаковать файл командой upx.exe -d opera.dll

  1. Делаем копию dll, назвав например opera.dll.original;
  2. Закрываем Opera;
  3. Открываем в hex-редакторе файл opera.dll;
  4. Находим и заменяем строку:
    • Исходная: Mozilla/5.0 (%s; %s; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 11.60
    • Новая: Mozilla/5.0 (%s) AppleWebKit/535.2 Chrome/15.0.874.121 Safari/535.2
  5. Сохраняем новый файл opera.dll;

Важно: длина новой строки должна быть не больше исходной, чтобы размер файла остался прежним. Иначе внутри исполняемого кода все перемешается и работать не будет. Если длина новой строки меньше, то ее следует дополнить нужным количеством байта ноль (не символа), в редакторе отображается как 00. Если больше — что-то придется обрезать. Хотя тут есть нюанс. В hex-редакторе видно, что в конце строк в оригинальном файле есть несколько нулевых байт. Так вот, нам нужно чтобы в конце строки был хотя бы один такой байт, если же их несколько, то не трогаем последний, остальные заполняем нужными символами. Это позволяет вместить строку больше чем сам шаблон из opera.dll.

Дополнительно можно в файле \locale\ru\ru.lng

  1. Найти строку: 590106237="Представляться как Firefox";
  2. Заменить на: 590106237="Маскироваться под Chrome".

Проверка результата

  1. Запускаем Opera;
  2. Открываем whoer.net;
  3. Указываем «Представляться как Firefox» (мы же этот пункт изменили);
  4. Перезагружаем страницу и видим что user agent изменился.

Новое значение:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 Chrome/15.0.874.121 Safari/535.2

Тестируем на сайтах этот режим! Например когда Google представил свой сервис Google Wave, пытаясь зайти на него с Opera и при этом маскируясь под Chrome — результат был лучше, чем маскируясь под Firefox. Хотя приемлемым это назвать сложно, сервис все равно толком не работал. Дело в том что совместимость Opera с каким-либо другим, но распространенным браузером вряд ли будет 100%-ой. Поэтому это решение скорее может помочь, если какой-либо сайт заблокировал Opera. Или например вы хотите чтобы сайты отдавали вам мобильную версию. Еще в Opera можно указать часть строки user agent через опцию opera:config#ISP|Id (набрать в адресной строке).

Инструменты

  • whoer.net — сервис проверки передаваемой вашим компьютером информации в Интернет;
  • Process Explorer — хорошая замена стандартному «Диспетчеру задач»;
  • 010 Editor — Hex-редактор, платный, но очень нравиться;
  • UPX — сжимает файлы с исполняемым кодом.

В Opera 12 появилась настройка UserPrefs|CustomUser-Agent, в которой мы можем задать полностью строку подменяемого User Agent. … И похоже куда-то пропала :)

3 комментария:

  1. Наконец в Opera 12 появилась настройка opera:config#UserPrefs|CustomUser-Agent, в которой мы можем задать полностью строку подменяемого User Agent.

    ага. Только она подменяет стандартную строку по умолчанию, а это не есть хорошо. некоторые сайты начинают работать лучше (можно youtube заставить отдавать все видео в html5 что полезно), а некоторые хуже, например нельзя войти в продвинутый режим gmail, только в режим для старых браузеров. Лучше бы опереточники сделали возможность штатную менять юсер агенты которые есть в настройках для сайтов

    ОтветитьУдалить
  2. Для редактирования в линуксе надо ковырять /usr/lib/opera/opera искать то же самое что выше описанно. Хотя я так и не понял чего у меня в конце концов вышло, но вышло вроде. теперь youtube думает что у меня ослик 10 версии под win8...

    ОтветитьУдалить
  3. Анонимный01.05.2016, 9:16

    Заработал полноценно гугл-картинки, но когда открываешь картинку, на новой странице только чёрный фон(((

    ОтветитьУдалить