简介这是一款面向微信个人用户的单向好友/拉黑检测工具适合需要定期清理好友、管理微信社交关系的人群。工具以绿色免安装形式提供双击主程序即可启动本地 Web 服务通过浏览器完成操作其底层采用 iPad 849 协议解析微信数据并将 Redis、协议解析与网页服务分别部署在本地端口兼顾易用性与隐私性。压缩包共 68 个文件约 27.16MB核心由 6 个可执行文件、8 个 Pyd 扩展与 5 个 DLL 组成另含 Web 前端所需的 JS/CSS/HTML、端口与 Redis 配置以及 3 份说明文档整体结构清晰适合有一定电脑操作基础、希望自助完成好友检测的用户。资源已有 468 人学习/浏览作者随包提供了说明文档和协议说明能帮助首次使用者快速完成端口检查、登录方式选择和本地服务启动按说明操作即可顺利开展好友检测。 两年前我给自己写过一个小工具一键检测微信里哪些好友已经把我删了、哪些人把我拉黑了。当时微信好友数量过千经常遇到发消息才发现“对方开启了朋友验证”的尴尬局面后来干脆动手折腾了一版自动检测方案。今天把整个思路、踩坑过程、以及我看到网上讨论最多的几个相关痛点比如 Linux 下微信字体虚化、旧版本数据迁移之类一起整理出来希望能给有同样需求的朋友省点时间。这个工具适合三类人看一是微信好友多、有清理单向好友需求的普通用户二是对微信协议自动化感兴趣想了解扫码登录、请求模拟、好友状态判断原理的开发者三是正在折腾 Linux 版微信、数据目录迁移、界面显示问题的朋友会在后面单独列一小节讲。先说清楚它不是一个用一次就永久有效的黑科技而是基于微信现有的“拉群检测”和“转账检测”逻辑做了一层自动化封装原理不复杂但细节非常多。1. 为什么需要“单向好友检测”这件事1.1 单删和拉黑在微信里的真实表现微信的单向好友分两种状态一种是对方删除了你但没拉黑另一种是对方直接拉黑了你。表现上略有区别场景你发消息你转账你拉群看朋友圈对方删除你提示“对方开启了朋友验证”提示“你不是收款方好友”可拉入对方收到进群通知不显示内容或显示一条横线对方拉黑你提示“消息已发出但被对方拒收”提示“请确认好友关系是否正常”无法拉入提示“无法添加”被屏蔽看不到对方仅屏蔽朋友圈正常正常正常不显示内容注意这些提示是不同版本、不同触发方式下的常见表现微信偶尔会改文案。想靠单一手段得出最终结论很容易误判。所以我的工具里同时跑了“转账检测”和“拉群检测”两条路径再结合提示内容做了分类。1.2 为什么微信官方不开放检测接口微信没有开放“谁删了你”的 API这一点要认清。不开放的原因很好理解单向好友检测对整个社交关系链是负向功能如果官方提供批量查询朋友圈、聊天、点赞这些交互场景都会被检测行为污染更会引来大量灰产做“清理僵尸粉”生意。微信在这块管控很严任何批量操作都有封号风险。这也是为什么网上很多工具只做“网页版微信协议”或是“模拟客户端请求”因为官方不会给你入口只能自己想办法。而网页版微信本身对大量账号已经不再支持登录我最终还是选择了通过桌面客户端扫码登录、模拟内部请求的方式来做。1.3 工具到底能不能做到“准确检测”先说结论能检测出明确异常的好友但做不到对所有好友 100% 给出“删除/拉黑/正常”三选一。原因很简单微信不会告诉你每一次检测的最终判定标准有些操作不会触发明确错误提示比如对方只是把你朋友圈屏蔽了微信不会给你一个标准字段。更稳妥的做法是明确检测出“单向关系”的好友而把不确定的标记为“需要人工确认”不要一刀切。2. 整体方案设计从原理到选型2.1 两种主流检测路径路径一批量建群检测原理微信允许一次选择最多 40 人建群。如果其中有人不是你好友系统会提示“无法添加”。这种方法能一次性检测 39 个好友除去自己准确率较高。缺点是被拉群的人会收到通知对普通用户来说很打扰频繁建群容易被判定为骚扰行为。路径二转账检测原理微信转账前系统会先校验收款方和你的好友关系。如果对方删了你转账界面会直接提示“你不是收款方好友”如果对方拉黑你会提示“请确认好友关系是否正常”。这比发消息更隐蔽因为你不需要真正输密码。缺点是操作维度细、每次只能检测一个人做自动化时要频繁进入聊天窗口。两条路各有各的问题我的选择是“以转账检测为主以建群检测校验为辅”。原因转账检测触发的是支付链路异常提示非常明确属于微信校验用户关系的必经环节建群检测虽然在批量场景下效率高但会造成打扰更适合“二次验证”。2.2 我为什么选择“模拟客户端行为”路线最早我尝试的是网上那些开源网页版登录方案但维护成本太高网页版登录接口经常变更部分新注册微信号也无法通过网页版登录。后来我转向了桌面客户端方案通过扫码拿到登录凭证再模拟客户端内部 HTTP 接口去触发转账前的校验。整体架构是微信桌面客户端 - 抓取登录态和关键请求 - PHP脚本模拟转账校验请求 - 按返回结果分类用 PHP 是因为我对它最熟而且 PHP 处理微信返回的 JSON 数据、批量跑定时任务都很方便。你完全可以用 Python、Node 或 Go 重写核心逻辑是一样的。2.3 工具架构与运行流程工具整体分四层模块作用登录模块获取二维码、轮询扫码状态、保存登录凭证好友信息模块从通讯录接口拉取好友列表wxid、备注名、昵称检测模块构造转账/拉群校验请求解析返回结果结果输出模块导出 CSV / 数据库并做风险分类运行流程是扫码登录 - 拉取好友列表 - 逐个构造检测请求 - 记录返回文案 - 状态分类 - 输出报告。单次检测 1000 个好友大约耗时 20 到 40 分钟取决于微信接口响应速度和是否触发频率限制。3. 核心细节解析与实操实现3.1 伪造微信浏览器头信息的关键细节很多教程只让你写一个 User-Agent 就完事实际上不够。微信客户端的请求会带一串比较固定的 Header其中最关键的是User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 MicroMessenger/__VERSION__ NetType/WIFI Lang/zh_CNMicroMessenger后面的版本号要和你的客户端版本对应。如果版本和登录态不一致某些接口会直接返回-6之类的错误码。另外微信对请求头的Referer、Accept-Language也有限制。我吃过一次亏单纯设了 UAReferer留空导致部分接口返回数据正常但后续校验请求被拒。后来统一加了$headers [ User-Agent: . $ua, Referer: https://wx.qq.com/, Accept: application/json, text/plain, */*, Accept-Language: zh-CN,zh;q0.9, Content-Type: application/json;charsetutf-8, Cookie: . $cookie, ];核心思路让请求在外部特征上与真实客户端保持一致。微信服务端不会只靠一个 UA 判断是否合法而是会综合请求频率、请求路径、登录设备、数据完整性等多个维度做风控。单纯伪造 UA 没有任何意义必须把整体行为模拟到位。3.2 会话管理与扫码登录实现扫码登录的原理可以简化成三步从某个接口拿到uuid并生成二维码前端页面或 CLI 脚本轮询登录状态判断是否扫码确认确认后换取skey、pass_ticket、webwx_data_ticket等凭证保存下来。需要注意的是微信的桌面端扫码登录和网页版登录并不完全一样桌面端用的登录态有效期更长但也更敏感。换一个 IP 段登录可能要重新扫码。我在工具里设计了“凭证本地缓存”机制同一设备、同一网络下运行可以做到免扫码但超过两三天或者网络环境变化后就得重新登录。登录成功后记得存下这些信息{ skey: ..., pass_ticket: ..., wxuin: ..., wxsid: ..., cookie: ... }检测请求全都要带上这些参数缺一个都可能被识别为异常请求。3.3 检测逻辑与结果分类检测的核心是不断构造请求判断返回内容。以转账检测为例进入好友聊天页面点“转账”输入任意金额后微信会先发一个校验请求确认收款方状态。自动化工具正是拦截这个环节。我处理返回内容时的分类规则大概是这样if ($response[returnCode] 0) { $status normal; // 可转账正常好友 } elseif (strpos($response[message], 不是收款方好友) ! false) { $status deleted; // 对方删除了你 } elseif (strpos($response[message], 朋友验证) ! false) { $status deleted; // 同样大概率删除 } elseif (strpos($response[message], 拒收) ! false) { $status blocked; // 被拉黑 } else { $status unknown; }这里有个很重要的提醒不要只靠返回码判断。有些版本会出现returnCode相同但消息文案不同的情况所以要把返回码和文案结合起来匹配宁可判成unknown也别把正常好友误判成删除。4. 实操过程跑通一次完整检测4.1 基础环境配置我的运行环境是 Ubuntu 24.04装了微信 Linux 版 4.1.11。这个版本有一个比较典型的视觉问题界面中文显示虚化模糊看起来就像字体渲染异常。有遇到同样问题的朋友可以检查系统中文字体是否完整最简单的办法是安装fonts-noto-cjksudo apt install fonts-noto-cjk如果还模糊可以在微信启动命令前加环境变量QT_SCALE_FACTOR1.2 wechat我实测下来4.1.11 在 HiDPI 屏上默认缩放对中文字体渲染支持不完善手动指定缩放因子能明显改善。但由于检测工具的请求和界面无关字体问题并不会影响功能。4.2 数据表设计与检测执行数据库设计上不用搞得很复杂一个表就行CREATE TABLE wechat_check ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(64) NOT NULL, nickname VARCHAR(128), status VARCHAR(20) DEFAULT unknown, checked_at DATETIME, UNIQUE KEY uniq_user (username) );跑检测时从通讯录接口拉回来的好友列表先全量插入然后循环执行检测每检测一个就更新status。我会用checked_at记录最近检测时间因为好友状态是会变化的这个工具最好定期重跑。4.3 结果输出与风险控制输出格式我用 CSV方便直接导入通讯录做二次清理wxid,备注名,状态,最后检测时间 wxid_xxx,张三,normal,2025-05-20 12:30:11 wxid_yyy,李四,deleted,2025-05-20 12:32:08 wxid_zzz,王五,blocked,2025-05-20 12:35:51关于风险控制有几点必须说检测动作必须模拟真实操作频率每检测一个好友最好随机等待 1 到 3 秒不要开多线程跑。我之前图快改成并发请求结果账号被限制了加好友功能一周。不要一次性检测超过 2000 人最好分批次。不要在凌晨或者深夜批量跑作息规律显得更像真人。如果连续出现多个“操作频繁”提示立即停止第二天再跑。5. 常见问题与排查技巧实录5.1 常见问题速查表现象可能原因解决办法扫码后提示“当前环境异常”IP 被风控、使用了非常规客户端切换网络环境避免频繁异地登录返回结果大量是 unknown请求头缺字段或版本不匹配检查 UA 中 MicroMessenger 版本号、补齐 Referer检测到一半被强制下线频率过高触发保护等待 24 小时后再继续降低执行频率好友列表拉不全通讯录接口分页参数不对检查分页参数手动翻页拉取全部数据结果将正常好友误判为删除判断逻辑只看了 returnCode改为 returnCode 文案联合判断微信提示“小程序违规支付被限制”不是好友检测问题去微信公众平台申诉或检查支付相关配置5.2 踩坑心得之一微信数据目录与历史聊天记录如果你在 Linux 上使用新版本微信登进去发现找不到以前的聊天记录大概率是因为新旧版本的数据目录不一致。旧版 Linux 微信数据可能存放在~/.wine/drive_c/users/...或旧版 AppImage 的相关路径下而新版 4.x 大多把数据放在~/Documents/WeChat或~/.xwechat之类自定义路径中。把旧数据拷贝过去之前务必先备份路径拼错很容易导致微信无法启动。处理这类问题时先确认两个版本各自的数据目录结构再看是否需要迁移不要凭感觉复制。5.3 踩坑心得之二企业微信与个人微信不能混用做这类检测工具时有人会想到能不能用企业微信去读个人微信好友不能。企业微信和个人微信是两个生态好友关系链不互通。网上有些人把企业微信的external_userid和个人微信的wxid混在一起用最后导致数据全乱。我在调试早期就犯过这个错误后来老老实实把个人微信检测和企业微信客户联系功能拆成了两个独立项目。5.4 踩坑心得之三“转账检测”不是万能的我最后一次维护这套工具时发现部分好友转账校验返回结果正常但他们朋友圈早已对我关闭。这就说明转账检测只能判断“是否具备好友关系”不能判断“对方是否屏蔽了你”。真要检测朋友圈屏蔽需要额外模拟朋友圈请求但那块风控更严格。所以我最终在报告里单独加了一列“备注”统一标注为“可能仅屏蔽朋友圈”提醒自己不要据此误删好友。做完这个工具后我最深的一条感受是类似“谁删了我”这种需求官方永远不会有完美接口所有民间方案都只是“基于现有功能的侧面推断”。所以使用这类工具心态要摆正它帮你筛出明显异常的关系真正要不要删、删哪些还是自己判断。如果你准备自己也折腾一个建议先用小号测试完整跑通流程后再对主力账号使用并且严格遵守频率限制。这工具后续还能扩展成定时巡检、异常好友预警、分组导出等但前提是先保证账号安全。本文还有配套的精品资源点击获取
