019.更改chromium源码-关于修改大版本

关于更改chromium源码-修改大版本

  • 上篇博客实现了更改chromium小版本:插眼传送
  • 但已经好几个同学都在尝试模拟手机端和微信端,需要模拟较低版本的chromium内核。
  • 我之前尝试过更改大版本,但发现有坑,就一直拖着,今天就将研究过程记录下。

一、源码位置

1.聪明的你肯定已经找到了内核版本所在文件:
  • \components\version_info\version_info_with_user_agent.cc
  • \third_party\blink\renderer\core\frame\navigator_ua.cc
2.换掉内核版本
return base::StrCat(
      //{"Chrome/", GetMajorVersionNumber(), ".0.", build_version, ".0"});
      {"Chrome/", "106.0.5249.62"});
//ua_data->SetBrandVersionList(metadata.brand_version_list);
  UserAgentBrandList uabl;
  uabl.emplace_back("chromium", "106");
  uabl.emplace_back("Chrome", "106");
  ua_data->SetBrandVersionList(uabl);
  
  //ua_data->SetUAFullVersion("106." + String(std::to_string(randomNum % 99)) +".6572.0");
  ua_data->SetUAFullVersion("106." + String("0") +".5249.62");

编译后可以看到,浏览器的大版本已成功变更。

3.反指纹检测验证
  • browserscan检测:

在这里插入图片描述

  • creepjs检测:

在这里插入图片描述

在这里插入图片描述

注意:内核更改是成功了,但发现creepjs和browserscan都无法通过反指纹检测。

二、新旧版本差异

  • 这里creepjs已经把不能通过的原因写的很明显了,v106的版本特性和当前浏览器的版本特性有差异

  • 这里拿JSON.rawJSON函数举例,106版本内核没有这个函数,因为它是115版本的新特性。当在106版本浏览器里发现这个函数,很明显就是篡改

在这里插入图片描述

三、看creepjs源码

1.各个版本内核的js新特性:
const blinkJS = {
		'76': ['Document.onsecuritypolicyviolation', 'Promise.allSettled'],
		'77': ['Document.onformdata', 'Document.onpointerrawupdate'],
		'78': ['Element.elementTiming'],
		'79': ['Document.onanimationend', 'Document.onanimationiteration', 'Document.onanimationstart', 'Document.ontransitionend'],
		'80': ['!Document.registerElement', '!Element.createShadowRoot', '!Element.getDestinationInsertionPoints'],
		'81': ['Document.onwebkitanimationend', 'Document.onwebkitanimationiteration', 'Document.onwebkitanimationstart', 'Document.onwebkittransitionend', 'Element.ariaAtomic', 'Element.ariaAutoComplete', 'Element.ariaBusy', 'Element.ariaChecked', 'Element.ariaColCount', 'Element.ariaColIndex', 'Element.ariaColSpan', 'Element.ariaCurrent', 'Element.ariaDisabled', 'Element.ariaExpanded', 'Element.ariaHasPopup', 'Element.ariaHidden', 'Element.ariaKeyShortcuts', 'Element.ariaLabel', 'Element.ariaLevel', 'Element.ariaLive', 'Element.ariaModal', 'Element.ariaMultiLine', 'Element.ariaMultiSelectable', 'Element.ariaOrientation', 'Element.ariaPlaceholder', 'Element.ariaPosInSet', 'Element.ariaPressed', 'Element.ariaReadOnly', 'Element.ariaRelevant', 'Element.ariaRequired', 'Element.ariaRoleDescription', 'Element.ariaRowCount', 'Element.ariaRowIndex', 'Element.ariaRowSpan', 'Element.ariaSelected', 'Element.ariaSort', 'Element.ariaValueMax', 'Element.ariaValueMin', 'Element.ariaValueNow', 'Element.ariaValueText', 'Intl.DisplayNames'],
		'83': ['Element.ariaDescription', 'Element.onbeforexrselect'],
		'84': ['Document.getAnimations', 'Document.timeline', 'Element.ariaSetSize', 'Element.getAnimations'],
		'85': ['Promise.any', 'String.replaceAll'],
		'86': ['Document.fragmentDirective', 'Document.replaceChildren', 'Element.replaceChildren', '!Atomics.wake'],
		'87-89': ['Atomics.waitAsync', 'Document.ontransitioncancel', 'Document.ontransitionrun', 'Document.ontransitionstart', 'Intl.Segmenter'],
		'90': ['Document.onbeforexrselect', 'RegExp.hasIndices', '!Element.onbeforexrselect'],
		'91': ['Element.getInnerHTML'],
		'92': ['Array.at', 'String.at'],
		'93': ['Error.cause', 'Object.hasOwn'],
		'94': ['!Error.cause', 'Object.hasOwn'],
		'95-96': ['WebAssembly.Exception', 'WebAssembly.Tag'],
		'97-98': ['Array.findLast', 'Array.findLastIndex', 'Document.onslotchange'],
		'99-101': ['Intl.supportedValuesOf', 'Document.oncontextlost', 'Document.oncontextrestored'],
		'102': ['Element.ariaInvalid', 'Document.onbeforematch'],
		'103-106': ['Element.role'],
		'107-109': ['Element.ariaBrailleLabel', 'Element.ariaBrailleRoleDescription'],
		'110': ['Array.toReversed', 'Array.toSorted', 'Array.toSpliced', 'Array.with'],
		'111': ['String.isWellFormed', 'String.toWellFormed', 'Document.startViewTransition'],
		'112-113': ['RegExp.unicodeSets'],
		'114-115': ['JSON.rawJSON', 'JSON.isRawJSON'],
	}
2.各个版本内核的CSS新特性:
const blinkCSS = {
		'76': ['backdrop-filter'],
		'77-80': ['overscroll-behavior-block', 'overscroll-behavior-inline'],
		'81': ['color-scheme', 'image-orientation'],
		'83': ['contain-intrinsic-size'],
		'84': ['appearance', 'ruby-position'],
		'85-86': ['content-visibility', 'counter-set', 'inherits', 'initial-value', 'page-orientation', 'syntax'],
		'87': ['ascent-override', 'border-block', 'border-block-color', 'border-block-style', 'border-block-width', 'border-inline', 'border-inline-color', 'border-inline-style', 'border-inline-width', 'descent-override', 'inset', 'inset-block', 'inset-block-end', 'inset-block-start', 'inset-inline', 'inset-inline-end', 'inset-inline-start', 'line-gap-override', 'margin-block', 'margin-inline', 'padding-block', 'padding-inline', 'text-decoration-thickness', 'text-underline-offset'],
		'88': ['aspect-ratio'],
		'89': ['border-end-end-radius', 'border-end-start-radius', 'border-start-end-radius', 'border-start-start-radius', 'forced-color-adjust'],
		'90': ['overflow-clip-margin'],
		'91': ['additive-symbols', 'fallback', 'negative', 'pad', 'prefix', 'range', 'speak-as', 'suffix', 'symbols', 'system'],
		'92': ['size-adjust'],
		'93': ['accent-color'],
		'94': ['scrollbar-gutter'],
		'95-96': ['app-region', 'contain-intrinsic-block-size', 'contain-intrinsic-height', 'contain-intrinsic-inline-size', 'contain-intrinsic-width'],
		'97-98': ['font-synthesis-small-caps', 'font-synthesis-style', 'font-synthesis-weight', 'font-synthesis'],
		'99-100': ['text-emphasis-color', 'text-emphasis-position', 'text-emphasis-style', 'text-emphasis'],
		'101-103': ['font-palette', 'base-palette', 'override-colors'],
		'104': ['object-view-box'],
		'105': ['container-name', 'container-type', 'container'],
		'106-107': ['hyphenate-character'],
		'108': ['hyphenate-character', '!orientation', '!max-zoom', '!min-zoom', '!user-zoom'],
		'109': ['hyphenate-limit-chars', 'math-depth', 'math-shift', 'math-style'],
		'110': ['initial-letter'],
		'111-113': ['baseline-source', 'font-variant-alternates', 'view-transition-name'],
		'114-115': ['text-wrap', 'white-space-collapse'],
	}
3.各个版本内核的window新特性:
const blinkWindow = {
		'80': ['CompressionStream', 'DecompressionStream', 'FeaturePolicy', 'FragmentDirective', 'PeriodicSyncManager', 'VideoPlaybackQuality'],
		'81': ['SubmitEvent', 'XRHitTestResult', 'XRHitTestSource', 'XRRay', 'XRTransientInputHitTestResult', 'XRTransientInputHitTestSource'],
		'83': ['BarcodeDetector', 'XRDOMOverlayState', 'XRSystem'],
		'84': ['AnimationPlaybackEvent', 'AnimationTimeline', 'CSSAnimation', 'CSSTransition', 'DocumentTimeline', 'FinalizationRegistry', 'LayoutShiftAttribution', 'ResizeObserverSize', 'WakeLock', 'WakeLockSentinel', 'WeakRef', 'XRLayer'],
		'85': ['AggregateError', 'CSSPropertyRule', 'EventCounts', 'XRAnchor', 'XRAnchorSet'],
		'86': ['RTCEncodedAudioFrame', 'RTCEncodedVideoFrame'],
		'87': ['CookieChangeEvent', 'CookieStore', 'CookieStoreManager', 'Scheduling'],
		'88': ['Scheduling', '!BarcodeDetector'],
		'89': ['ReadableByteStreamController', 'ReadableStreamBYOBReader', 'ReadableStreamBYOBRequest', 'ReadableStreamDefaultController', 'XRWebGLBinding'],
		'90': ['AbstractRange', 'CustomStateSet', 'NavigatorUAData', 'XRCPUDepthInformation', 'XRDepthInformation', 'XRLightEstimate', 'XRLightProbe', 'XRWebGLDepthInformation'],
		'91': ['CSSCounterStyleRule', 'GravitySensor', 'NavigatorManagedData'],
		'92': ['CSSCounterStyleRule', '!SharedArrayBuffer'],
		'93': ['WritableStreamDefaultController'],
		'94': ['AudioData', 'AudioDecoder', 'AudioEncoder', 'EncodedAudioChunk', 'EncodedVideoChunk', 'IdleDetector', 'ImageDecoder', 'ImageTrack', 'ImageTrackList', 'VideoColorSpace', 'VideoDecoder', 'VideoEncoder', 'VideoFrame', 'MediaStreamTrackGenerator', 'MediaStreamTrackProcessor', 'Profiler', 'VirtualKeyboard', 'DelegatedInkTrailPresenter', 'Ink', 'Scheduler', 'TaskController', 'TaskPriorityChangeEvent', 'TaskSignal', 'VirtualKeyboardGeometryChangeEvent'],
		'95-96': ['URLPattern'],
		'97-98': ['WebTransport', 'WebTransportBidirectionalStream', 'WebTransportDatagramDuplexStream', 'WebTransportError'],
		'99': ['CanvasFilter', 'CSSLayerBlockRule', 'CSSLayerStatementRule'],
		'100': ['CSSMathClamp'],
		'101-104': ['CSSFontPaletteValuesRule'],
		'105-106': ['CSSContainerRule'],
		'107-108': ['XRCamera'],
		'109': ['MathMLElement'],
		'110': ['AudioSinkInfo'],
		'111-112': ['ViewTransition'],
		'113-115': ['ViewTransition', '!CanvasFilter'],
	}

注意:以上新特性也只是部分例举,不代表是全部。

四、总结:

  1. 想要将大版本从高改到低,需要将这些高版本的特性进行酌情抹除才行。反之亦然,小伙伴可以按需自行研究。
  2. 但大版本是可以微调的,比如123-125版本几乎没啥变化,我就选择在这之间反复横跳啦。
  3. 要跨多个版本,我个人推荐的最终解决方案是:下载旧版本chromium源码,重新编译。
要下载Chromium源码,你可以按照以下步骤进行操作: 1. 首先,你需要下载depot_tools,这是一个用于管理Chromium源码的工具集。你可以在官方网址http://www.chromium.org/developers/how-tos/build-instructions-windows 下载depot_tools。 2. 下载完成后,将depot_tools添加到系统的环境变量中,以便在任何位置都可以使用它。 3. 接下来,你需要创建一个自定义的源码目录,并使用命令行工具进入该目录。 4. 在源码目录中,执行命令"gclient config http://src.chromium.org/svn/releases/31.0.1620.2"来配置Chromium版本。你可以根据需要下载不同的版本,可以在http://src.chromium.org/viewvc/chrome/releases/ 查看可用的版本。 5. 如果你不需要下载LayoutTest测试文件,可以打开以版本名称命名的目录下的DEPS文件,并将"src/third_party/WebKit/LayoutTests"修改为None。 6. 第一次执行"gclient sync"命令时,会自动安装git、python等必要的工具。请耐心等待安装完成。 7. 在安装过程中,可能会出现连接错误。如果出现连接错误,你可以尝试将以下内容复制到C:\Windows\System32\drivers\etc\hosts文件中,以解决连接问题。 8. 安装完成后,你可以执行"gclient sync"命令来获取Chromium源码。如果下载过程中出现问题,可以重复执行"gclient sync"命令。 9. 下载完成后,进入源码目录,并执行"gn gen out/Default"命令来生成编译规则到out/Default目录中。 这样,你就成功下载了Chromium源码。希望对你有帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [下载Chromium源码方法及问题记录](https://blog.csdn.net/hezhipin610039/article/details/31372619)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Chrome源码chromium下载编译详细步骤](https://blog.csdn.net/langeldep/article/details/120032077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王辉辉的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值