微软最近的KB5034203补丁包中explorer.exe包含这样一段代码, 这两天传来传去, 各种说法都有, 我也很好奇, 但是一直没等到具体的技术细节分析, 自己分析一下.

explorer.exe启动时会加载twinui.pcshell.dll并执行其中的ShellFeedsAvailability::WriteFeedsAvailabilityToRegistry
, 这个函数很重要, 如果它没有执行, 那么IsHijackingProcessRunning()那些代码都不会执行到:


此函数内部会调用ShellFeedsAvailability::CheckFeedsServerAvailability()
从微软服务器下载json配置文件并决定相关功能开关.首先组装配置文件URL:

URL:

随后PingFeedsEnablementEndpoint()函数用这个URL请求json配置:


获取到的json内容:


再将获取到的json传递到IsFeedsEnabledAtEndPoint, 这个函数会解析json配置文件的一个重要字段reclaimEnabled
, 如果为false, 那么后面检测360的那段逻辑也不会执行, 而如果是true, 则将注册表Campaign设置为"feeds-reclaim":

然后返回到最初的WriteFeedsAvailabilityToRegistry, 将注册表CampaignState写为2, 再给Shell_TrayWnd发一个自定义消息, WParam为12:

这个消息会在explorer.exe的Feeds::FeedsDynamicContent::ProcessMessage
中处理, 主要是启动一个ID为6的timer, 默认300秒(或10秒后)运行, 运行一次后就killtimer:


Feeds::FeedsDynamicContent::OnTimer
中判断TimerID为6且reclaim feature开启就会调用ShellFeedsCampaignHelper::RunFeedsCampaign::


RunFeedsCampaign会检查前面那两个注册表键值, 如果设置了并且值符合要求, 就会执行ShellFeedsCampaignHelper::CheckCampaignAvailability
:


CheckCampaignAvailability函数里一系列环境判断, 但会优先查看feeds是否被隐藏, 如果没有被隐藏, 后续的检测, 包括对360进程的检测都不会执行:

同时这个函数里也有一些其他判断, 比如:


[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2024-2-23 12:32
被lidowx编辑
,原因: 补充