Вышла 127 версия браузера Google Chrome.

Вы уже предвкушавшие, что статья будет посвящена обзору нововведений в популярном браузере? Вообще-то да, только в очередной раз делать это будем через отладчик x64dbg (или любой другой по вкусу, кроме gdb).

Chrome 127 whats is new

Ну убрал ты парочку апи, занопил другие - в следующем релизе придется
делать еще больше и так далее, и в его зависимостях, потому что теперь
разраб больше не ограничен необходимостью поддержки какой-то там 7-ки.

Цитата отсюда

После первого выпуска статьи, абсолютное большинство скептически относилось к возможности навешивания пиратского флага на вновь выходящие современные итерации браузера Chrome. Тем не менее вышла 127 версия браузера ... а ситуация стала ровно противоположной приведённой выше цитате (о чём уже упоминалось во второй и третьей статьях). Этот обзор получился коротким, и, собственно, на этом немаловажном факте акцентирую внимание читателя.

Свежая версия не стала исключением в плане придумывания инженерами Google небольших палок в колёса паруса нашего пиратского лайнера:

155C9F00 | 55               | push ebp                                                          |
155C9F01 | 89E5             | mov ebp,esp                                                       |
...
155C9F15 | E8 867748FF      | call <chrome.sub_14A516A0>                                        |
155C9F1A | 83F8 0C          | cmp eax,C                                                         |
155C9F1D | 8975 B4          | mov dword ptr ss:[ebp-4C],esi                                     |
155C9F20 | 7F 2A            | jg chrome.155C9F4C                                                |
155C9F22 | E8 797748FF      | call <chrome.sub_14A516A0>                                        |
155C9F27 | 89C7             | mov edi,eax                                                       |
155C9F29 | 83C0 F9          | add eax,FFFFFFF9                                                  |
155C9F2C | 83F8 06          | cmp eax,6                                                         |
155C9F2F | 72 0B            | jb chrome.155C9F3C                                                |
155C9F31 | E8 9AE82CFC      | call chrome.118987D0                                              |
155C9F36 | 31DB             | xor ebx,ebx                                                       | 
155C9F38 | 31FF             | xor edi,edi                                                       |
155C9F3A | EB 6B            | jmp chrome.155C9FA7                                               |
155C9F3C | 83C7 FA          | add edi,FFFFFFFA                                                  |
...                                    |
155C9F5A | 89F9             | mov ecx,edi                                                       |
155C9F5C | 68 01010000      | push 101                                                          |
155C9F61 | 68 EAACEB19      | push chrome.19EBACEA                                              | L"SOFTWARE\\Microsoft\\WindowsRuntime\\WellKnownContracts"
155C9F66 | 68 02000080      | push 80000002                                                     |
155C9F6B | E8 A0C748FF      | call chrome.14A56710                                              |

Переводя с ассемблерного — добавили аварийное завершение работы браузера, если версия Windows, не приведи Джек Воробей, меньше Version::WIN10_RS4 (кратко суть такова, что GetPreRS5UniversalApiContractVersion должна вернуть значение 0x10):

chromium/components/embedder_support/user_agent_utils.cc

 static const base::NoDestructor<std::string> universal_api_contract_version(
      [] {
        int major_version = 0;
        int minor_version = 0;
        if (base::win::OSInfo::Kernel32Version() <=
            base::win::Version::WIN10_RS4) {
          major_version = GetPreRS5UniversalApiContractVersion();
        } else {
          base::win::RegKey version_key(
              HKEY_LOCAL_MACHINE, kWindowsRuntimeWellKnownContractsRegKeyName,
              KEY_QUERY_VALUE | KEY_WOW64_64KEY);
          if (version_key.Valid()) {
            DWORD universal_api_contract_version = 0;
...

На этом нововведения закончились. Новых API (в 127 версии) у меня для вас нет! ВСЁ! Статья практически окончена ... за исключением пары моментов.
Первый момент — упомянуть о предыдущих попытках, начиная со 125 версии ограничить фукнционал путём увеличения major/minor OS‑версии Image Optional‑заголовка PE COFF формата и блокировки оригинального репозитория (новый). Т.е. Google предпринимает незначительные попытки ввести запрет на пиратство собственного браузера в «семёрке». Да, вместо того, чтобы реально, например, полностью перевести рендер на DirectX 12, который только на «десятке» и выше. Впрочем, если WebGPU теперь имеет официальную поддержку DirectX 11 (привет, Windows 7) от того же Google/Microsoft, то предыдущее предложение пока больше из разряда фантастики. В какой-то мере задолбавшись к 127 версии смотреть на одно и тоже в отладчике, добрым человеком Q (QuQuRoon) был запилен Edge.Patcher, исходные коды которого он предоставил во всеобщее пользование.

EDGE Patcher LOGO (C) "All rights reserved", 2024

Теперь и Вы можете попробовать себя пиратом бесплатно и без СМС.

Второй нюанс

Сколько вообще было добавлено новых WinAPI в браузер после прекращения поддержки Windows 7 (после первого релиза 114) посчитать на самом деле несложно.

Системная динамическая библиотека (System32 DLL)

Кол-во новых WinAPI, поддерживаемых Windows 7

Эмулируемые WinAPI, присутствующие только в Windows 10 и 11

KERNEL32.DLL

58

2

USER32.DLL

44

2*

MFPLAT.DLL

0

1

bcryptprimitives.dll

0

1

* присутствуют начиная с Windows 8

Как видно из таблицы — не пришлось заморачиваться с написанием нового фукнционала уже после релиза самой первой пиратской версии.

Ещё больше пиратских шхун

  • https://github.com/win32ss/supermium/

  • https://github.com/adeii/supermium-portable/

  • https://github.com/vxiiduu/VxKex (?)

  • https://www.mypal-browser.org/ (Windows XP)

К чему всё это было

Очевиден тот факт, что спустя 1,5 года от прекращения поддержки Windows 7 ничего принципиально не поменялось. Всё патчится, пиратится и ломается. Вопрос затраченных усилий стал стремиться к нулю, т.к. процесс теперь автоматизирован. Ожидать, что в рендер браузера будет добавлено что-то радикально привязанное к 10/11, а от остального legacy кода откажутся — точно не в ближайший год.

Самыми заметными нововведениями за всё это время стали только три вещи:

  • Скругленные углы в браузере

  • WebGPU

  • WebNN

    И если для последней технологии требуется Windows 11, то WebGPU успешно пиратится на Windows 7. Ах, да — скругленные углы тоже работают на Windows 7 начиная с Windows XP.

Мне стало интересно другое: насколько медленно или вообще никак происходят процессы в гигантских корпорациях добра? Чисто технически, ничего не мешает до сих пор внедрить поддержку Windows 7 обратно (supermium тому пример. И делает это явно меньшее количество людей, чем в компании Google). Равно как и делать было подобное на протяжении 1,5 лет. Во всяком случае это точно гораздо полезней Manifest V3 и других сомнительных нововведений. Наверное, процесс отвязки от Windows 7 больше зависит от написания этих статей на Хабре (так поддержим же лайками и комментариями. Чем больше лайков и комментариев — тем меньше будет становится размер chrome.dll в следующей версии браузера). В остальном логика поведения инженеров Google вполне ясна (исправления безопасности в приоритете)..., но прошло уже 1,5 года (27 версий).

В моём понимании это должно было работать так. Инженер Google зарезервировал 1,5-2 месяца под одну таску (системный подход) — огромное review кода (выделили на это большую команду) и одним разом убрал код, который имеет отношение в Windows 7. В таком случае выпуск 110 (Windows 10 only) с инкрементом версий был бы целесообразным шагом. Что же вижу через окно отладчике? В самом начале (114) — да, часть действительно была убрана. Затем начались попытки искусственно вставлять палки в колёса путём от самих инженеров Google, которые описал выше. О чём это говорит? «Выводы делать только Вам».


В ближайшей перспективе нас ждёт выход Windows 12 и спустя три года (или около того) описываемая ситуация повторится, но уже с «десяткой». Однако занимает меня конечно же не это.

С огромной долей вероятности, Google очень хочет продвигать платную версию браузера Chrome в которой будет доступен новомодный ИИ (пока только Enterprise Premium за 6$) и отладчик уже придётся использовать по назначению, чтобы ломать Trial-версии браузера.

До новых встреч!