Chrome 127 — опять «пиратим» для Windows 7
Вышла 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, исходные коды которого он предоставил во всеобщее пользование.
Теперь и Вы можете попробовать себя пиратом бесплатно и без СМС.
Второй нюанс
Сколько вообще было добавлено новых 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-версии браузера.
До новых встреч!