我们将深入分析如何绕过 H5GG 插件的验证体系,并实现完整的品牌化定制。
第一阶段:原理深度解析
在动手之前,你需要明白我们面对的是什么样的验证体系:
H5GG 插件通常由 Objective-C (原生层) 和 HTML/JS (前端层) 组成。
- 前端层负责显示菜单和卡密输入框。
- 核心逻辑(如时间校验、权限判断)可能隐藏在 JavaScript 或二进制的
.dylib 中。
我们的策略是:静态物理屏蔽 + 动态 UI 劫持。
更简单的办法后文会讲到。
第二阶段:环境准备
- Xcode: 必不可少。我们需要它来编译
.xm (Logos) 源代码,将其转化为手机能运行的二进制指令。
- Python 3: 用于运行自动化重写脚本。手动使用二进制编辑器(如 Hex Fiend)修改几百处数据太慢且易错。
- ldid (重签名工具):
- 目的:iOS 系统对
.dylib 有签名校验。我们修改了文件的内容后,原本的数字签名就失效了。
- 作用:如果不使用
ldid 重新进行伪签名,插件注入后 App 会直接闪退。
第三阶段:Python 静态补丁实战 (patch_dylib.py)
这个脚本的核心逻辑是 “搜索并替换”。
1. 文本清理(去品牌化)
- 修改位置:
text_patches 数组。
- 修改目的:插件原作者通常会在代码里硬编码 QQ 群、作者名。如果不清理,你的客户会看到原作者的信息。我们用“空格”覆盖这些文字,在不改变文件大小的前提下抹除痕迹。
2. 函数屏蔽(逻辑切断)
- 修改位置:
call_patches 数组。
- 修改目的:原程序会调用
showKeyInput() (显示输入框) 或 showKeyExpired() (显示过期)。
- 原理:我们将这些调用指令替换为
void(0);。这意味着当程序尝试弹出验证框时,实际上什么都不会发生,逻辑运行到这里就“断”了。
3. HTML 结构物理修改
- 修改位置:
html_patches 数组。
- 修改目的:
- 修改 ID (
keyInputOverlAX):原版的 JS 脚本会寻找 id="keyInputOverlay"。我们将它重命名后,原版脚本就“找不到”这个元素了,也就无法控制它的开启或关闭。
- 强制内联样式 (
display:none):通过在 HTML 标签中直接写入死样式,确保无论逻辑如何运行,验证浮层在物理层面上都是不显示的。
第四阶段:Xcode 原生定制 (XMCrack.xm)
如果说 Python 脚本是“止损”(绕过限制),那么 Xcode 重写就是“增值”(定制你的品牌)。
- 现状:插件默认的悬浮球图标可能是原作者的头像。
- 目的:我们通过 Hook 原生 UI 类
FloatButton,在其加载到窗口 (didMoveToWindow) 时,强制注入我们自己的逻辑。
2. 核心代码逻辑解析
// 关联对象 (Associated Object)
objc_setAssociatedObject(self, &kOurImageKey, image, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
- 为什么要用关联对象?:因为我们不能直接给系统类添加变量。通过这个技术,我们可以把我们下载的“自定义图标”死死绑定在悬浮球对象上。
3. 拦截 setImage: 的目的
- 逻辑:原程序可能会在运行过程中多次尝试把图标切回到原作者的图片。
- 解决方案:我们 Hook 了设置图片的方法。如果传入的图片不是我们绑定的那张,我们就强制将其设为
nil(透明/空白),从而保证你的品牌图标永远是唯一显示的。
第五阶段:完整操作闭环
- 配置脚本:修改
patch_dylib.py 里的文件路径。
- 执行 patch:运行脚本。你会看到输出显示“已屏蔽 X 处”,这代表验证逻辑已被物理切断。
- 配置 Xcode:修改
XMCrack.xm 里的图片链接(建议使用可靠的图床)。
- 编译与注入:
- 编译生成最终的
XMCrack.dylib。
- 将该文件与打过补丁的
_patched.dylib 一起打包进 App。
避坑指南 (初学者必看)
- 字节对齐:在
patch_dylib.py 中,如果要把 A 替换成 B,B 的字节长度必须等于 A。如果 B 短了,脚本会自动补空格;如果 B 长了,文件结构会错位,导致插件报废。
- 网络图片:
XMCrack.xm 里的图片链接必须是 直链(以 .jpg 或 .png 结尾)。如果是网页链接,图标会加载失败。
- ldid 报错:如果提示
command not found,请确保你已经安装了 brew 并运行了 brew install ldid。
这是一个群友介绍的,因为啥也不说了,当做一个教材给吾爱友们当个分析。
其实有一个很简单的办法,一般h5的插件我们可以直接用文本打开dylib,拖到底部就可以看到他的源码内容,基本一目了然。这里就不做过多的解释,自己文本打开一看就清楚了。
源码,文件跟dylib打包了,喜欢的吾爱友记得给个免费的start!
|