heoizokdung
V2EX  ›  macOS

让 Codex 帮我把微信的游戏中心和小程序面板这两个讨厌的侧边栏入口去掉了

  •  
  •   heoizokdung · 13h 9m ago · 452 views

    微信自从更新了一个大版本,把 Mac 和 Windows 统一后,左侧边栏就多出了游戏中心和小程序入口,没有提供隐藏这两个入口的设置。网上搜了一圈也没找到可以隐藏的方法。于是让 Codex 自己摸索了一番,终于搞定了。下图是搞定之后的效果:

    我把成功的经验让 Codex 提炼成了指南,想要尝试的朋友可以把以下内容复制给 Codex:

    请在我的 Mac 上制作一个独立的实验版微信,隐藏左侧栏的“游戏中心”和“小程序面板”两个入口,并保证截图权限在重启后仍然有效。请实际执行、逐步验证,不要只给我命令。
    
    一、已知结论与适用范围
    
    1. 目标是腾讯官网下载版 macOS 微信 4.1.12:
       https://mac.weixin.qq.com/?t=mac&lang=zh_CN
    2. 本方案只适用于 Apple Silicon ( arm64 ) Mac ,以及该版本的这一份 wechat.dylib:
       - 路径:/Applications/WeChat.app/Contents/Resources/wechat.dylib
       - 修改前完整 SHA-256:
         f28329ed2599e8567f6b0a09f031d05666a48abd97dbc7a3380891ddbcff6cdc
    3. 微信 4.1.12 不是通过修改 Electron 的 asar 来完成此任务。目标逻辑位于 Qt/XUI 原生 Mach-O 动态库 wechat.dylib 中。
    4. 如果系统不是 arm64 、版本不是 4.1.12 、文件路径不存在、哈希不相同,或待修改位置的原始字节不相同,立即停止并向我报告。不要猜测新偏移,不要把其他版本硬套进来。
    
    二、安全边界
    
    1. 永远不要修改、重签或覆盖 /Applications/WeChat.app 。
    2. 成品固定安装为:
       /Applications/WeChat-NoGame.experimental.app
    3. 所有修改先在 /private/tmp 下用 mktemp -d 创建的临时目录中完成并验证,验证通过后才能安装。
    4. 如果上述实验版已经存在,先正常退出它,并把它移动到本次临时目录中作为可恢复备份;不要直接删除。
    5. 官方版和实验版的主进程名称都叫 WeChat 。结束进程前必须根据完整可执行文件路径确认目标,只结束 /Applications/WeChat-NoGame.experimental.app 下的进程。不要使用 pkill WeChat 或 killall WeChat 。
    6. 不要同时运行官方版和实验版。
    7. 写入 /Applications 、访问代码签名私钥或操作隐私设置前,按运行环境要求向我申请权限。钥匙串密码、Apple ID 登录、录屏授权等安全操作由我亲自完成。
    
    三、先做只读检查
    
    请检查并记录:
    
    - uname -m ,必须是 arm64 。
    - /Applications/WeChat.app/Contents/Info.plist 中的 CFBundleShortVersionString ,必须是 4.1.12 。
    - 用 file 或 lipo -archs 检查 wechat.dylib ,必须包含 arm64 。
    - shasum -a 256 检查 wechat.dylib ,必须等于上述原始 SHA-256 。
    - codesign --verify --deep --strict /Applications/WeChat.app 应通过。
    
    如果官方应用不是这个版本,请让我先从腾讯官网安装 4.1.12 ;不要使用 App Store 版继续。
    
    四、制作临时副本
    
    1. 用 mktemp -d 创建类似以下临时目录:
       /private/tmp/wechat-nogame.XXXXXX
    2. 使用 ditto 完整复制官方应用到临时目录,并把副本命名为:
       WeChat-NoGame.experimental.app
    3. 后续只操作这个临时副本。
    
    五、应用二进制补丁
    
    目标文件是临时副本的:
    Contents/Resources/wechat.dylib
    
    请创建一个小型、可审计的补丁脚本,并严格完成以下操作:
    
    1. 修改前重新计算 SHA-256 ;只有等于
       f28329ed2599e8567f6b0a09f031d05666a48abd97dbc7a3380891ddbcff6cdc
       才能继续。
    2. 在完整 universal 二进制文件的以下两个文件偏移处修改各 4 字节:
    
       - 小程序面板,item type 6:0x0B5A4664
       - 游戏中心,item type 7:0x0B5A4740
    
    3. 两处修改前的字节都必须严格等于:
       f5 03 00 aa
       这是 ARM64 指令 `mov x21, x0`。
    4. 两处都改为:
       15 00 80 52
       这是 ARM64 指令 `mov w21, #0`。
    5. 必须先验证两处原始字节都正确,再执行任何写入;其中任意一处不匹配就停止,不能留下只改一半的文件。
    6. 写入后重新读取并验证两个位置。
    7. 仅完成这两处修改、尚未重签时,目标 dylib 的 SHA-256 应为:
       1e75abf1aa20cf093d6365f71e7328e8c4607e661ac552a9e1adb74daf225ac3
       如果不相同,停止安装。
    
    这个补丁的原理是:保留两个 mmui::XTabBarItem 对象及其内部索引,只把传给 QWidget::setVisible 的可见性结果强制为 false 。不要删除对象、不要改变 tab 集合、不要 NOP 掉插入调用。
    
    尤其不要使用这两个已知失败方案:
    
    - 修改 0x1934d3c 附近的 game_entry_state:不会改变图标显示。
    - NOP 0x102a2dc 附近的插入调用:图标可能消失,但后续代码会访问空对象并崩溃。
    
    六、使用稳定的 Apple Development 身份重签
    
    不能使用 ad-hoc 签名作为最终方案。ad-hoc 的 designated requirement 会绑定当前 cdhash ;二进制一变,macOS TCC 就可能把它视作另一个应用,导致“录屏与系统录音”条目消失或权限永远无法识别。
    
    1. 执行:
       security find-identity -v -p codesigning
    2. 选择一张当前有效且带私钥的 `Apple Development` 身份,后续用它的 SHA-1 指纹签名,不要只按可能重复的证书名称选择。
    3. 如果没有有效身份,暂停,让我在 Xcode → Settings → Accounts → Manage Certificates → + → Apple Development 中创建。创建后再检查。
    4. 如钥匙串中存在多张同名旧证书,要核对实际使用证书的有效期。不要误用过期证书。
    5. 不要复制腾讯原始 entitlements 。里面的 application-identifier 、App Group 和腾讯 Team ID 不属于我的开发团队,强行保留会造成无效或异常签名。
    6. 不要额外启用 hardened runtime ;这可能破坏微信依赖的运行方式。
    
    清除临时副本上的扩展属性。若 xattr 因下面这个只读缓存文件失败:
    
    Contents/MacOS/WeChatAppEx.app/Contents/Frameworks/WeChatAppEx Framework.framework/Versions/C/Resources/gpu_shader_cache.bin
    
    可以只对该文件临时执行 chmod u+w ,完成 xattr -cr 后恢复为 chmod 444 。
    
    设有效证书 SHA-1 为 SIGNING_IDENTITY ,依次执行等价于以下流程的签名:
    
    1. 先签被修改的 wechat.dylib:
       codesign --force --sign "$SIGNING_IDENTITY" --timestamp=none <临时副本>/Contents/Resources/wechat.dylib
    2. 使用同一个身份重签所有嵌套代码和整个应用:
       codesign --force --deep --sign "$SIGNING_IDENTITY" --timestamp=none <临时副本>
    3. 最后只重签外层应用,并设置一个与腾讯不同、在本机唯一且合法的代码签名标识。例如:
       local.<经过清理的用户名>.WeChatNoGame
       命令形式:
       codesign --force --sign "$SIGNING_IDENTITY" --timestamp=none --identifier <唯一标识> <临时副本>
    
    不要修改 Info.plist 中原来的 CFBundleIdentifier `com.tencent.xinWeChat`,因为微信的数据路径、登录状态、子进程参数和 IPC 依赖它。这里隔离的是外层代码签名 identifier ,不是微信运行时读取的 bundle identifier 。
    
    七、签名验收
    
    安装前必须完成:
    
    1. 在能够访问系统钥匙串信任库的环境里运行:
       codesign --verify --deep --strict <临时副本>
       必须成功。
    2. 运行 codesign -dvv ,确认:
       - Signature 不是 adhoc 。
       - Authority 是刚创建的 Apple Development 证书,并能看到 Apple 的中间证书和根证书链。
       - TeamIdentifier 不再是 `not set`。
    3. 运行 codesign -dr -,确认 designated requirement:
       - 包含刚设置的唯一 identifier 。
       - 由 Apple Development 证书约束。
       - 不能是 `cdhash H"..."` 这种 ad-hoc 形式。
    4. 再次验证两个补丁位置仍为 `15 00 80 52`。
    5. 注意:重签会改变 dylib 的整体哈希,因此重签完成后不要再要求它等于“未重签补丁哈希”;此时应以严格签名验证和两个位置的字节为准。
    6. 如果受限沙箱里出现 `CSSMERR_TP_NOT_TRUSTED` 或 `Authority=(unavailable)`,可能只是沙箱读不到钥匙串。经我批准后在能访问系统信任库的环境中重新验证;仍失败才算真正失败。
    
    八、安装实验版
    
    1. 确认实验版所有进程均已退出。
    2. 若 /Applications/WeChat-NoGame.experimental.app 已存在,将旧版移入本次临时目录备份。
    3. 使用 ditto 把通过验证的临时副本安装到:
       /Applications/WeChat-NoGame.experimental.app
    4. 对安装后的路径再次执行 codesign --verify --deep --strict ,并复查 designated requirement 和两个补丁字节。
    5. 官方 /Applications/WeChat.app 必须保持原哈希和原签名不变。
    
    九、处理“录屏与系统录音”权限
    
    首次安装稳定签名版后,请启动实验版并让我完成“进入微信”。然后由我亲自在:
    
    系统设置 → 隐私与安全性 → 录屏与系统录音
    
    执行以下操作:
    
    1. 如果列表里已有旧的 `WeChat-NoGame.experimental.app`,先选中并点减号移除。
    2. 点加号,重新选择准确路径:
       /Applications/WeChat-NoGame.experimental.app
    3. 打开它的权限开关。
    4. 完整退出实验版的主进程和辅助进程,再重新启动。
    5. 使用 Control–Command–A 测试微信截图。
    
    第一次测试时可能同时出现两个窗口:前景是微信自己的“录屏权限未开启”,后方是 macOS 原生的“微信想要录制此电脑屏幕”授权框。此时先取消或移开微信自己的提示,再由我在系统授权框里点“允许”,然后再次触发截图。
    
    不要执行不带应用标识的全局 `tccutil reset ScreenCapture`,它会清掉其他软件的录屏授权。由于我们保留了原始 CFBundleIdentifier ,而只覆盖代码签名 identifier ,针对自定义 identifier 的 tccutil 命令可能提示 `No such bundle identifier`;这种情况不要扩大重置范围,直接使用系统设置中的“移除后重新添加”流程。
    
    十、最终验收
    
    请和我共同确认:
    
    - 实验版可以正常启动并进入聊天主界面。
    - 左侧栏的“小程序面板”和“游戏中心”两个按钮都消失。
    - 其他 tab 和聊天功能没有因为索引变化而崩溃。
    - Control–Command–A 可以进入微信截图模式。
    - 完整退出并重新打开实验版以后,录屏权限条目仍然存在、开关仍开启,截图仍可使用。
    - codesign --verify --deep --strict 仍通过。
    - 官方微信从未被修改。
    
    十一、回滚与升级规则
    
    1. 如果实验版异常,退出它,保留崩溃报告和签名信息,然后恢复本次临时目录中的旧实验版,或者从官方微信重新制作;不要动官方应用。
    2. 微信升级会覆盖或改变 wechat.dylib 。新版本必须重新逆向定位并建立新的原始哈希、原始字节和补丁偏移。没有重新验证前,绝对不要沿用 4.1.12 的偏移。
    3. Apple Development 证书通常有有效期。以后若录屏权限再次异常,先检查证书是否过期,以及重签后 designated requirement 是否改变。
    
    执行过程中请持续告诉我当前检查结果、准备修改的准确路径和验证结论。任何版本、哈希、原始字节或签名验证不符合上述预期时,立即停止并保留可恢复状态。
    
    deplives
        1
    deplives  
       12h 55m ago
    小心哪天腾讯认定成运行破解版的客户端把你号给扬了
    jahx
        2
    jahx  
       11h 48m ago
    确实,可能会判定为破解客户端,然后警告,接着封号
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1112 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:03 · PVG 07:03 · LAX 16:03 · JFK 19:03
    ♥ Do have faith in what you're doing.