360 安全卫士拆完了。2006 年的原版和 2026 年的现役版各拆一遍,437 个模块过完,它怎么从一个反流氓软件变成今天这个样子,答案不在任何一篇报道里,在函数和字符串里。
结论放在最前面。以 2008 年 3 月 19 日 v4.1Beta2 更新日志里「新增自我保护」六个字为界,它的代码行为出现了明确的方向性变化。上一起案件(千千静听)的结论是当年的软件没有收集用户的习惯。本起补充后半句,习惯可以是后来加上的,每一步都留在了代码里。
为什么拆它
上一案发出去之后,评论区有观众提到,2006 年还有大名鼎鼎的 360 安全卫士同年出生。两案是同年的邻居,正好对照着读。
问题很直接。360 以反流氓软件起家,2006 年的发布承诺里写着公益、永久免费、所有权转交第三方。一个反流氓软件后来被广泛称作流氓软件,中间应该存在一条变化线。官方日志可以措辞,代码不会。这次审计要回答的,是这条线能否在两个年代的可执行文件里被指认出来。
不引用任何第三方报告,所有结论都落在可复核的函数和字符串上。
样本与工具
2006 年的样本来自 Wayback Machine 存档的官方 CDN 原件,847,604 字节,FileVersion 1.0.5.5005,服务器头显示 2006 年 12 月 26 日。原版性做了三项交叉验证(下载直链、版本资源、内嵌文件日期)之后才开拆。
2026 年的现役版 121MB、437 个 PE 模块,全部无壳,rea analyze可以直接分析。主要工作流两步。rea trace <模块> <字符串>定位引用函数,rea decompile --procedure输出伪 C,截图留证。
两条经验值得记下。国产软件的字符串大量用 UTF-16,plain grep 扫不到,要双编码扫描。437 个模块要分拣,先对 428 个模块跑行为签名粗筛,再人工复核真候选,避免把 C++ 模板名误判成恶意行为。
六条证据
第一条,弹窗拦截行为本身会上报。AdPopWnd.dll(内部原名 AdvScnnerPopWnd.dll,连名字都换了)的 FUN_10041090。每次拦截发生,向commerce.safe.360.cn/track/plain发一条带biz=popwnd_intercept_w&action=clean的商务追踪,参数里拼上机器标识 mid 和时间戳。机器标识 m2 持久存在注册表Software\360Safe\LiveUp。你用它拦广告,它把你的拦截逐条记在商务账上。
第二条,查杀结果页内置浏览器静默安装。本地配置 popularize_chasha_new.xml 里躺着一条 id 82008 的广告。标题「快来开启更强安全防护」,命令行带--silent-install=2_1_1。执行函数是 360ExamineUIEx.dll 的 FUN_1000af00,整段只有 533 字节,核心动作是把down.360safe.com/setup.exe原样交给 ShellExecuteW。查杀完成页,就是安装入口。
第三条,广告配置在云端。本地 XML 只是出厂默认值,实际广告配置从r.conf.wsm.360.cn/popularize_shouye_ws13.dat拉取。当天没弹的广告,不代表明天不弹,服务器随时可以改。
第四条,437 个模块里 142 个内嵌完整安装包下载地址,包括卸载器 uninst.exe 自己。更精的一个在弹窗拦截器 PopWndTracker.exe 的 FUN_004a15d0。先弹一个红叉提问框,用户点了确认(返回值 6),ShellExecuteW 就去下down.360safe.com/setup.exe。弹窗拦截器内置了重新安装入口,拦截的尽头是安装。
第五条,卸载器检测火绒。uninst.exe 的 FUN_004107e6 读取Software\Huorong\Sysdiag\InstallPath,再拼出bin\HipsTray.exe用 PathFileExistsW 检查存在性。用途在函数里没写,但一个卸载器第一件事是探测竞品安全软件的托盘进程,值得注意。
第六条,对聊天软件进程的结构化记录。imhelper.dll 的 FUN_1000dc60 构造imurlv2、_type_、procname等字段,procname的值是 WeChat.exe。官方口径是网聊防钓鱼,函数层面只体现为按进程名记录。
同一个键
跨年代对照里最值得注意的一处是注册表键Software\360Safe\LiveUp。2006 年存的是通缉令特征库版本号,2026 年存的是机器标识 m2。同一个键,用途从特征库版本变成了用户标识。这条线不需要任何解释,两个值摆在一起就够了。
2006 年那一半也不清白
公平起见要说清,2006 年的原版不算完全干净。Rptup(内部原名 FileUp.dll)同样有 upload_file.php 文件上传管道,POST 出去的是 md5 命名的 zip 包。但有三点不同。主程序不导入 WS2_32,根本没有原始套接字能力,只有 WININET 的 HTTP 客户端;上传内容是文件而非用户信息;LibActi.dat 里明文列着百度搜霸、雅虎工具条、搜狗直通车、网易泡泡。2006 年的大厂互相把对方列为流氓软件,360 当时的角色接近清理者。当年它上传的是查杀战利品,不是你。
堕落编年史
把体积和模块数排成一条线。2006 年出道,848KB,12 个文件,广告位 0。2008 年 3 月 19 日,v4.1Beta2「新增自我保护」,门锁上线。2015 年,advtools 货架出现 FirstAD,广告图开始用真名。2024 年,promote 目录积累 111 个文件,最早物料 2019 年 12 月。2026 年,121MB,447 个模块,59 个驱动。
从货架到器官,用了不到二十年。
判决
以 2008 年 3 月 19 日「新增自我保护」为界,360 安全卫士的代码行为出现了明确的方向性变化。这个判决不依赖任何人的措辞,每一条都有函数地址和字符串可以复核,全部证据已列出,欢迎用 REA 逐条复核。
两案合起来是一句话。2006 年的软件没有收集用户的习惯;习惯可以是后来加上的,而每一步,都留在了代码里。
- 本案审计记录(原文) github.com/morluto/rea/discussions/6698
- 上案 千千静听行为审计 github.com/morluto/rea/discussions/5496
- 逆向工具 REA github.com/morluto/rea
- 视频版(B站) bilibili.com/video/BV1dont68EdJ
- 视频版(YouTube) youtu.be/0gNd75QX7_0
环境与样本。REA 6.4.0,Ghidra 12.1.4,样本为公开渠道现役版安装包与 Wayback 存档 2006 原件,全程无脱壳需求。