吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10890|回复: 149
上一主题 下一主题
收起左侧

[原创] 设置默认浏览器实现合理白嫖

    [复制链接]
跳转到指定楼层
楼主
冥界3大法王 发表于 2026-8-22 11:13 回帖奖励
本帖最后由 冥界3大法王 于 2026-8-22 11:16 编辑


本次修改挑战的是这个浏览器(哈哈,你懂滴。。俺就不说谁谁谁了)
我这个电脑注册表有问题。。
即便每次设置了浏览器为默认,下次重启还得设置,算了。。今天试着来攻破下难关。

先去定位搜索一下相关字符串,发现无非最后还是落在语言文件中,如下图:

来到x64dbg中附加 该浏览器 ,一般会发现多个。选择哪个呢? 当然是你激活的看到的浏览器标签名相关的那个优先了。。
如果你不附加的话,你可以选择使用 ScyllaHide-1.4(最后源码编译的就是该版本,懒人开启全部选项)
来到x64dbg中搜索defaultBrowser 最会得到下面的信息,我随便通过gemini Google来分析了下:(怎么说呢?有对有错,试了之后得结论!)
反正 你让我猜的话,我肯定是Alt+E (模块中先看 tabbit.dll and chrome.dll 类似的模块名啦)


在您列出的这一大堆字符串引用中,最可疑、最值得优先逆向分析的是以下几组

根据 Chromium 源码架构,我们可以将这些地址按“危险程度”(即直接控制检测与弹窗的概率)分为三个梯队:


第一梯队:绝佳切入点(最为可疑 ★★★★★)

这两组地址处于控制默认浏览器检测逻辑顶栏/弹窗提示 (InfoBar/Modal) 的核心控制流中,修改它们所在的函数最容易直接干掉弹窗。

1. 弹窗 UI 交互与触发点(最直接的控制逻辑)
  • 00007FF8AD2BC5EB : DefaultBrowserInfoBar_Ignore
  • 00007FF8AD2BCAC9 : DefaultBrowserInfoBar_Accept
  • 00007FF8AD2BCBB8 : DefaultBrowser.InfoBar.UserInteraction
  • 00007FF8AD2F4B8F : DefaultBrowserInfoBar
  • 00007FF8AD2BE166 : DefaultBrowserModal

可疑原因
这些是 Chrome 顶部出现的 "Chrome 不是您的默认浏览器 - 设为默认" 那个黄色/蓝色提示条(InfoBar)以及弹窗(Modal)的构造与事件响应函数。
沿着这里的 lea 指令向上追踪函数头部,或者看谁调用了这个函数,把调用处的跳转(如 JZ/JE)直接 NOP 掉,或者让判断函数直接返回 0,InfoBar 就永远无法被创建出来


2. 底层系统状态校验点(决定“是否触发”的源头)
  • 00007FF8A447ADE0 : PerformDefaultBrowserCheckValidations
  • 00007FF8A447AECD : PerformDefaultBrowserCheckValidations
  • 00007FF8A447AE36 : DefaultBrowser.HttpProgIdAssocValidationResult
  • 00007FF8A5BC7DF1 : DefaultBrowser.State

可疑原因
PerformDefaultBrowserCheckValidations(执行默认浏览器检测校验)是 Chromium 内部用来向 Windows 系统查询注册表和 HTTP 关联关系的函数。
如果在这个函数的入口处直接写 MOV EAX, 1; RET(假装当前已经是默认浏览器),后方所有的弹窗、提示、设置页状态更新都会被一刀切地阻断


第二梯队:次要可疑点(前端与交互 API ★★☆☆☆)

  • 00007FF8B226821F : requestDefaultBrowserState
  • 00007FF8B22682F1 : setAsDefaultBrowser
  • 00007FF8B219B263 : skipDefaultBrowser

可疑原因
这些是 Chrome 内部 WebUI(比如首次运行界面 ProfilePickerchrome://settings 设置页面)调用 C++ 后端的桥梁(Mojo/JS-Bridge 接口)。修改这里可能只会让设置界面的按钮失效,但未必能阻止启动时的自动弹窗检测。


第三梯队:完全不建议动(纯静态文本/国际化翻译 ☆☆☆☆☆)

  • 00007FF8A6ECFE91 及周围的一大片(defaultBrowserMakeDefault 等)
  • 00007FF8B219B7E7 : defaultBrowserTitle

排除原因
这一大排连续的地址(A6ECFE91 ~ A6ECFFF4)只是注册 i18n 语言包(JSON / 资源映射表) 的字符串 key,用来给按钮或标题赋值文本内容。修改这里只会导致界面文字变空,根本无法阻止检测和跳转逻辑的执行。


实战定位与修改推荐路径

在 x64dbg 或 IDA 中,建议按以下顺序下手:

  1. 跳转到 00007FF8A447ADE0 (PerformDefaultBrowserCheckValidations)
    查看这个函数:若该函数返回 Bool 值,直接强制其返回 1;或者通过 Xrefs (查找谁调用了它),找到外层的 IF 判断,把跳转逻辑 Patch 掉。
  2. 跳转到 00007FF8AD2F4B8F (DefaultBrowserInfoBar)
    查看此处的函数调用,在入口处直接 RET(强行阻止 InfoBar 对象的实例化)。


尝试修改后,程序运行不起来了。。主明修改位置不对。。。

如果光修改注册表键值的检测呢?内容如下:

光修改“注册表键值检测”是可行的,但通常治标不治本,甚至可能会引发其他预期之外的问题。

以下是深入分析为什么“只改注册表检测”能生效,以及为什么逆向人员通常不推荐只改这里的原理:


一、 为什么光修改注册表检测“能生效”?

Chromium 在 Windows 上的默认浏览器检测逻辑,最底层的依据就是去读取系统注册表中的 UserChoice 键值:
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice

在汇编层面,它大概率会调用 RegOpenKeyExW / RegQueryValueExW 或者 AssocQueryStringW

如果你定位到 chrome.dll 中读取注册表的地方,进行以下 Patch:

  • 伪造读取结果:无论注册表中写的是什么,汇编 Patch 强制让读取结果返回你的浏览器 ProgID(例如 ChromeHTML)。
  • Patch 校验逻辑:找到 PerformDefaultBrowserCheckValidations 里对比注册表字符串的 cmp / wcsncmp 指令,把条件跳转(如 JNZ)改为 NOP,让它永远认为“注册表里的默认浏览器就是我”。

这样修改后,底层检测函数会返回 true,上层的弹窗(InfoBar)确实就不会触发了。


二、 为什么只改注册表检测“不够优雅/有隐患”?

在 Windows 10/11 上,微软为了防止第三方软件恶意篡改默认浏览器,对注册表检测和修改机制做了非常复杂的对抗,只改注册表检测会遇到以下三个痛点:

1. 注册表检测不是唯一的检测途径

现代 Chromium 内核(尤其是微软的 Edge 或各家二次开发的内核)除了读注册表,还会:

  • 调用 COM 接口(如 IQueryAssociations)向 Windows 询问关联关系。
  • 检查 Win11 特有的 Hash 校验值UserChoice 下的 Hash 键)。如果发现 Hash 不匹配,系统会判定注册表被篡改,此时即使你的 Patch 骗过了注册表字符串匹配,Chromium 后续的合法性校验(Validation)依然可能抛出 Error 状态,触发恢复默认提示。
2. “掩耳盗铃”效应(状态不一致)

如果你只 Patch 了注册表读取函数,让它盲目返回“我是默认浏览器”:

  • 启动弹窗消失了:这达到了你的目的。
  • 但设置页面乱套了:当你主动打开 chrome://settings/defaultBrowser 时,浏览器UI会坚信自己是默认浏览器,但当你点击“设为默认”或“刷新状态”时,由于底层注册表并没有真正被系统接纳,可能会导致设置页面卡死、逻辑死锁或提示异常。
3. 拦截点太靠下,浪费 CPU 开销

注册表检测属于底层 IO/API 操作。每次启动时,程序依然要走一遍复杂的注册表读取、字符串解析、内存分配流程,最后才在比较环节被你的 Patch 骗过去。


三、 最佳 Patch 策略对比

为了达到最稳定、最干净的效果,逆向修改时通常有三个层次:

Patch 层次 做法 优点 缺点
底层:只改注册表检测 Patch RegQueryValueHttpProgIdRegistryValidation 的对比指令 能阻止部分弹窗 容易被 COM 接口或 Hash 校验绕过;逻辑较绕
中层:直接 Patch 检测函数返回值(推荐 ★★★) PerformDefaultBrowserCheckValidations 入口直接 MOV EAX, 1; RET 最干净! 一劳永逸,上层所有逻辑都以为自己是默认浏览器 需要精准定位函数头
顶层:只 Patch 弹窗 UI DefaultBrowserInfoBar 构造函数入口直接 RET 不管是不是默认,强行不让弹窗显示出来 底层检测依然在运行,且设置页依然会显示“非默认”

总结建议

如果你已经用 x64dbg 找到了 PerformDefaultBrowserCheckValidations(也就是上一问列表中的 00007FF8A447ADE0),直接在这个函数的开头 Patch 掉返回值(mov eax, 1; ret,效果绝对比单独去改内部的“注册表检测逻辑”要好得多,因为这一步直接把包含注册表在内的所有校验全部跳过了。


结论果然是AI说的对,不够全面,掩耳盗铃。。。


先来还试着定位上面的字符串
也是不对的。。


最后最后来到图中所示的位置处,Ctrl+Home来到段首,Ctrl+R查找引用点

发现外层是一个
Jxx =======>修改为JMP
call

竟然成功啦。。。


还会提醒是不是默认浏览器,但是! 我们已经可以白嫖啦。{:301_986:}

免费评分

参与人数 27吾爱币 +25 热心值 +22 收起 理由
voa258 + 1 + 1 我很赞同!
jk998 + 1 + 1 我很赞同!
zjjxyz + 1 + 1 我很赞同!
hbp0505 + 1 + 1 谢谢@Thanks!
zj_tj + 1 + 1 我很赞同!
bullshit + 1 + 1 谢谢@Thanks!
bugof52pj + 1 谢谢@Thanks!
Issacclark1 + 1 谢谢@Thanks!
muzi337 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
mydhx + 1 + 1 我很赞同!
n2day + 1 + 1 谢谢@Thanks!
无尘浪子 + 1 谢谢@Thanks!
开心熊猫741 + 1 我很赞同!
tunis + 1 + 1 我很赞同!
aighsn + 1 谢谢@Thanks!
jaffa + 1 谢谢@Thanks!
metucky + 1 谢谢@Thanks!
smile1110 + 3 + 1 这个模型是给小龙虾用的!编程不大行
swcrwd5zy + 1 + 1 谢谢@Thanks!
夫子点灯 + 1 + 1 我很赞同!
ParllelShifterX + 1 + 1 谢谢@Thanks!
aa626123 + 1 + 1 我很赞同!
bingshen + 1 + 1 谢谢@Thanks!
shiyue2925 + 1 + 1 谢谢@Thanks!
破了解了爽了 + 1 建议用国际版,有惊喜
uq0aqr0hc4cZ + 1 + 1 我很赞同!
pelephone + 1 + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
Sias 发表于 2026-8-22 13:14
干嘛用的?  没太明白
推荐
bydlyzx 发表于 2026-8-22 11:23
不是很懂,
能不能做个bat,
运行一下就可以用了?
4#
jecymccree 发表于 2026-8-22 11:24
5#
Mallet 发表于 2026-8-22 11:29
默认浏览器是360浏览器,但是QQ面板点击QQ邮箱,跳转到edge打开,怎么设置
6#
wcl166 发表于 2026-8-22 11:46
电脑管家就可以设置默认浏览器,何须那么麻烦。浏览器升级后最好设置一下。
7#
irundream 发表于 2026-8-22 11:53
法王还是法王,真有你的,手动滑稽
8#
dujiu3611 发表于 2026-8-22 12:36
这个很可以,点个赞,感谢分享思路。
9#
junkersykj 发表于 2026-8-22 12:39
感谢分享思路。感谢分享思路。
10#
Alicek 发表于 2026-8-22 12:57
大佬厉害!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-8-28 00:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表