查看: 275|回复: 0

小米电脑管家安装器闪退:埋点接口异常排查与注册表绕过

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
一台 Redmi Book 上的小米电脑管家打不开,卸载后从官网重新下载最新的 XiaomiSetup 安装包,双击却只闪一下就退出,安装向导根本没有出现。最初怀疑是安装包损坏、系统环境异常、代理干扰或者卸载残留,最后定位下来,真正崩掉的不是下载安装逻辑,而是安装器窗口初始化阶段一次埋点 key 请求失败后没有被异常捕获。

现象与测试环境

出问题的机器是 Redmi Book Pro 14 2024,系统为 Windows 11,安装包是官网下载的小米电脑管家下载器 4.5.0.2025。表现有两种:双击后立即闪退,或者进程起来后完全不显示任何安装界面。

第一步先排除安装包本身的问题。用 PowerShell 检查 Authenticode 签名和版本信息:
  1. Get-AuthenticodeSignature "D:\Downloads\XiaomiSetup.exe"
  2. (Get-Item "D:\Downloads\XiaomiSetup.exe").VersionInfo
复制代码

签名有效、签发方为小米,版本号也对得上官网最新版,说明安装包没有被篡改,也不是下载不完整。

用事件查看器拿到真实异常栈

界面闪退这类问题,最有效的入口还是 Windows 事件日志。可以用 PowerShell 直接筛出最近半小时内与安装器相关的应用错误:
  1. $since = (Get-Date).AddMinutes(-30)
  2. Get-WinEvent -FilterHashtable @{
  3. LogName = 'Application'
  4. StartTime = $since
  5. } | Where-Object {
  6. $_.Message -match 'XiaomiSetup|System.Net|HttpRequestException'
  7. } | Select-Object TimeCreated, ProviderName, Id, Message
复制代码

日志里出现了非常明确的托管异常栈:
  1. 应用程序: XiaomiSetup.exe
  2. 异常信息: System.Net.Http.HttpRequestException
  3. 在 XiaomiSetup.EventUpload.GetDeviceId()
  4. 在 XiaomiSetup.EventUpload.initInstanceId()
  5. 在 XiaomiSetup.MainWindow..ctor()
复制代码

调用链说明了一点:崩溃发生在 MainWindow 的构造函数里,也就是安装界面还没真正构建完成时,程序先去执行了一段联网初始化逻辑,请求失败后异常向上抛出,进程直接终止。所以这不是安装阶段失败,而是启动阶段失败。

先排查代理,但不是根因

因为栈里是 HttpRequestException,很自然会怀疑网络层。当时机器上运行过 Clash,系统代理指向 127.0.0.1:7890。可以这样确认当前代理配置:
  1. Get-ItemProperty `
  2. -Path 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings' |
  3. Select-Object ProxyEnable, ProxyServer, AutoConfigURL
  4. netsh winhttp show proxy
复制代码

关掉代理后重新运行安装器,问题依旧,新日志仍然指向同一个调用:XiaomiSetup.EventUpload.GetDeviceId()。所以代理可能只是触发条件之一,并不是根因,失败点始终是那次埋点初始化请求。

拆开下载器看初始化逻辑

把官网安装包解开后可以看到,它其实是一个外层自解压程序,内部包含 XiaomiSetup.cab,CAB 里才是真正的 .NET/WPF 下载器主体。反编译后,初始化逻辑大致如下:
  1. public static void initInstanceId()
  2. {
  3. if (ReadValue("CONFIG_KEY_INSTANCE_ID").Length <= 0)
  4. {
  5. SaveValue("CONFIG_KEY_INSTANCE_ID", Guid.NewGuid().ToString().ToUpper());
  6. }
  7. if (ReadValue("CONFIG_KEY_AES_FOR_UPLOAD").Length <= 0 ||
  8. ReadValue("CONFIG_KEY_SID").Length <= 0)
  9. {
  10. GetDeviceId();
  11. return;
  12. }
  13. }
复制代码

而 GetDeviceId() 内部会访问 http://tracking.miui.com/track/key_get。这个请求的目的并不是下载小米电脑管家,而是获取埋点上报所需的 sid 和 AES key。问题在于,这个请求一旦失败,外层没有做异常兜底,异常会一路冒泡到 MainWindow 构造函数,整个安装器就在界面初始化阶段直接崩溃。

根因:注册表缺少埋点字段

当前用户注册表下存在这个键:HKCU\Software\MI\XiaomiSetup,但里面只有 CONFIG_KEY_INSTANCE_ID,缺少 CONFIG_KEY_AES_FOR_UPLOAD 和 CONFIG_KEY_SID。因此安装器每次启动都会判定需要重新获取,强制请求 tracking.miui.com/track/key_get。只要该接口因为网络、代理、服务端策略或 HTTP 状态码等原因不可用,安装器就会在显示界面之前闪退。

绕过方式:补齐占位注册表值

临时办法是给当前用户注册表补上两个埋点相关的占位值,让下载器跳过这次会崩的初始化请求,然后重新运行安装器:
  1. $key = 'HKCU:\Software\MI\XiaomiSetup'
  2. New-Item -Path $key -Force | Out-Null
  3. Set-ItemProperty `
  4. -Path $key `
  5. -Name 'CONFIG_KEY_INSTANCE_ID' `
  6. -Value ([guid]::NewGuid().ToString().ToUpper()) `
  7. -Type String
  8. Set-ItemProperty `
  9. -Path $key `
  10. -Name 'CONFIG_KEY_AES_FOR_UPLOAD' `
  11. -Value 'AQIDBAUGBwgJCgsMDQ4PEA==' `
  12. -Type String
  13. Set-ItemProperty `
  14. -Path $key `
  15. -Name 'CONFIG_KEY_SID' `
  16. -Value 'local-bypass-sid' `
  17. -Type String
复制代码

执行完后再启动 XiaomiSetup,下载器可以正常打开,并开始下载真正的小米电脑管家安装包 XiaomiPCManager_os3_tv_5.5.2.10,最终安装完成。卸载列表里出现“小米电脑管家 5.5.2.10”和“MiService 4.1.1.188”,主程序位于 C:\Program Files\MI\XiaomiPCManager\5.5.2.10\XiaomiPcManager.exe。

注意事项与开发侧启示

这个办法没有修改安装包,也没有绕过主程序的安装逻辑,只是绕开了下载器启动时埋点 key 获取失败的问题,属于 workaround。操作前建议先导出注册表备份;该键位于 HKCU 下,只影响当前用户;如果后续小米修复了下载器,可以删除该键让其重新生成。另外不建议随意清理小米服务和驱动残留,笔记本厂商工具通常关联热键、电源管理和互联功能。

从桌面开发角度看,这次故障也是常见的反面案例:主窗口构造函数里不应放置可能失败的阻塞式网络请求,即便那是埋点初始化;对 HttpRequestException 这类外部依赖异常要显式捕获并降级,让 UI 仍然可以正常构建。否则一旦埋点服务不可达,用户看到的就是“安装包闪退、系统坏了、型号不支持”这类误判,而真正坏掉的只是一段没有被 try/catch 包住的上报逻辑。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-10-29 14:06 , Processed in 0.024031 second(s), 28 queries , Gzip On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部