Skip to content

Wuvomi/WeComMulti

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WeComMulti — 企业微信 (WeCom) Mac 多开(纯克隆方案 · 实测可行)

通过 bundleID 克隆 + adhoc 重签,让 macOS 上的企业微信多开:把 /Applications/企业微信.app 只读克隆成一个新 bundle id(com.tencent.WeWorkMac.cloneN)的独立副本,得到一个完全独立的企业微信实例——独立沙盒容器、独立 group 容器、独立登录态,与原版及其它克隆并存。

零注入、零字节 patch、版本无关:企业微信的"单实例门"都按 bundle 身份判定,换 id 即天然绕过,无需逆向/偏移定位,官方升级后零适配

Caution

企业微信官方明令禁止账号多开,且处罚会连坐管理员账号 + 企业账号(远比个人微信严重)。 2024-06-12 起企业微信把"账号多开"列为违规,处罚分级:首次→功能限制(常见 24–72h);重复/严重→永久封禁可同时打到成员账号、管理员账号、企业账号,是全组织风险。本仓库仅作 macOS 应用沙盒/签名机制的技术可行性验证,使用者需自行评估并承担全部后果。详见下方免责声明。


可行性结论(实测坐实)

在 macOS(Apple Silicon)+ 企业微信 v5.0.8(com.tencent.WeWorkMac,team 88L2Q4487U)上实测:

  • ✅ 克隆 + adhoc 重签后 codesign --verify 通过(156 个嵌套 bundle 全签成功,无 --deep)。
  • open -n 启动克隆,与原版 WeCom 并存 >90s 全程稳定未被秒杀
  • ✅ 微信 4.x 那种"约 15s 被 Chromium Crashpad SIGTRAP 自杀"的杀因在企业微信未复现(WeCom 主进程 crash 走腾讯自研 Matrix/KSCrash,不注册 <team>.<bundleid>.crashpad.* mach 服务);日志零条 crashpad/sandbox deny。
  • ✅ 克隆建立独立数据容器 ~/Library/Containers/com.tencent.WeWorkMac.cloneN + 独立 group 容器,与原版数据彻底隔离,独立扫码登录界面正常显示。

完整证据见 re/wecom-multi-verify.md;前期只读架构调研见 re/wecom-feasibility.md


用法

图形界面(推荐)

仓库 app/ 提供一个 SwiftUI 小工具(蓝色主题、菜单栏图标「66」),把上面的克隆/清理流程做成一键操作:

cd app
./build.sh           # swift build -c release + 手动组 WeComMulti.app(adhoc 签名)
open ./WeComMulti.app
  • 蓝色大按钮「新开一个企业微信」:尾号复用克隆多开——优先启动已存在但没在跑的最小克隆,全在跑时才新建下一个;首次点击会自动 ditto 克隆 + adhoc 重签(约 1.3GB,需稍候)。
  • 状态行:已打开的企业微信(原版 + 在跑克隆计数)、已克隆 X 个、当前版本、多开方式(BundleID 克隆)。
  • 清理全部克隆」:删除全部克隆 .app + 容器(数据容器需【完全磁盘访问】,否则会引导去授权)。
  • 顶部 MenuBarExtra 菜单(图标「66」):新开 / 主界面 / 退出。中英双语随系统语言切换。

GUI 内部只调下面的 engine/install-clone-wecom.sh / cleanup-clone-wecom.sh,逻辑与命令行完全一致;只读 /Applications/企业微信.app 做克隆源,绝不改原版、绝不影响正在运行的账号

安装一个克隆(命令行)

engine/install-clone-wecom.sh <N> [源app] [目标目录]
  • N:克隆尾号(字母数字)→ bundleId = com.tencent.WeWorkMac.cloneN
  • 源 app:默认 /Applications/企业微信.app只读克隆,不改原版)
  • 目标目录:默认 ~/Library/Application Support/WeComMulti/Clones

例:

# 装克隆 1(默认目录)
engine/install-clone-wecom.sh 1

# 启动它(与原版并存)
open -n "$HOME/Library/Application Support/WeComMulti/Clones/WeComClone1.app"

# 再来一个克隆 2
engine/install-clone-wecom.sh 2

脚本做的事(幂等,重复同 N 重建):

  1. ditto 只读复制源 → 目标(~1.3GB);
  2. 改顶层 CFBundleIdentifier = com.tencent.WeWorkMac.cloneN
  3. 生成 entitlements:application-identifier/application-groups 保留 88L2Q4487U. team 前缀只换后缀 + 保留 app-sandbox + 照搬原能力位 + -spks/-spki 临时例外;
  4. 嵌套 bundle 按路径深→浅逐文件 adhoc 重签,顶层带 entitlements 最后签,绝不 --deep
  5. xattr -dr com.apple.quarantinecodesign --verify 校验。

删除一个克隆

engine/cleanup-clone-wecom.sh <N> [克隆.app所在目录]

删三处:.app 本体 + 数据容器 + group 容器。

Note

数据容器里的 .com.apple.containermanagerd.metadata.plist 受 macOS【完全磁盘访问 (FDA)】TCC 保护。不带 FDA 的进程删不掉它Operation not permitted,残留 ~40KB 空壳,无任何数据)。彻底清除:到 系统设置 > 隐私与安全性 > 完全磁盘访问 给 Terminal 授权后重跑,或在访达里手动删该目录(弹一次授权)。.app 本体 + group 容器不受此限。


工作原理(一句话)

macOS 没有 Windows 那种命名互斥体,企业微信的单实例判定走应用身份 / 沙盒容器 / NSRunningApplication / mach 注册。给每个副本一个不同的 bundle id + 独立容器,系统就把它当作另一个 app,自然多开。adhoc 重签时保留 team 前缀写进 application-identifier,是为了让沙盒放行 CEF 子进程按 <team>.* 命名的 crashpad mach 注册(移植自个人微信项目踩过的坑,企业微信主进程虽不依赖此条,仍照搬覆盖)。

技术细节、签名配方逐项裁定、踩坑根因见 re/ 下两份报告。


范围 / 现状

  • ✅ 可行性验证 + 幂等克隆/清理脚本 + 文档(本仓库内容)。
  • GUI(app/:SwiftUI 蓝色主题、菜单栏「66」、一键克隆多开 + 清理 + FDA 引导,复用同作者 WeChatMulti 设计语言。./app/build.sh 出包。
  • ⬜ 未做:真登录后长时间挂机/收发消息的稳定性、CEF 子进程登录态下 crashpad 行为、克隆体积优化(符号链接共享大资源)。

本仓库不含任何腾讯二进制.gitignore 排除 .app/.dmg/克隆产物)。脚本在你本机用你已合法安装的企业微信做只读克隆源。


⚠️ 免责声明

  • 本项目仅供 macOS 应用沙盒、代码签名、容器隔离机制的技术研究与可行性验证
  • 企业微信官方禁止账号多开,违规处罚连坐管理员账号与企业账号,可致永久封禁。是否使用、用于何处、产生的一切账号/企业风险与法律后果,完全由使用者自行承担,作者不负任何责任。
  • 不要在生产/正式企业账号上使用。强烈建议仅在理解全部风险后于隔离测试环境评估。
  • 本工具只读克隆你本机自有的企业微信安装,不分发腾讯任何代码/资源。请遵守企业微信《软件许可及服务协议》与你所在组织的合规要求。

多开/克隆配方移植自同作者的 WeChatMulti(个人微信多开)。企业微信验证由本仓库 re/wecom-multi-verify.md 实测坐实。

About

企业微信 (WeCom) Mac 多开 — 纯 bundleID 克隆 + adhoc 重签,零注入/版本无关(实测可行)。⚠️官方禁止多开,仅技术验证。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors