吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1442|回复: 22
收起左侧

[iOS 原创] iOS微信自定义头像插件逆向分析与破解

  [复制链接]
HackXK 发表于 2025-12-10 23:24

前言

最近拿到一个有趣的微信插件 自定义头像.dylib,群友发我让我了解一下看看。功能是可以本地修改任意好友的头像。但是安装后发现有防白嫖机制,非授权用户双击头像会弹出"德发提示",并且无论点什么都会导致微信闪退。这种强验证机制激起了我的兴趣,遂决定通过逆向分析去除这个限制。

一、 初步分析

1.1 现象观察

注入插件后,双击头像弹出 UIAlertController,标题为"德发❤️提示",内容为"支持正版..."。界面上有两个按钮:"复制微信号"和"我想白嫖"。点击任意按钮,微信立即Crash(闪退)。

1.2 字符串定位

将插件拖入 IDA Pro (或者使用 strings 命令),搜索弹窗上的关键字。

CFSTR("德发❤️提示")
CFSTR("支持正版,请联系微信 liu1602389262 获取授权。")

通过搜索这些字符串的引用,我们迅速定位到了弹窗逻辑所在的函数 sub_7858

二、 逆向追踪

2.1 弹窗逻辑 (sub_7858)

分析 sub_7858 的伪代码(ObjC),可以看到它创建了一个 UIAlertController 并添加了两个 UIAlertAction

// 伪代码片段
void sub_7858() {
    v1 = [UIAlertController alertControllerWithTitle:@"德发❤️提示" message:@"..." ...];

    // 按钮1:复制微信号
    v2 = [UIAlertAction actionWithTitle:@"复制微信号" handler: ^(UIAlertAction *action){
        [UIPasteboard generalPasteboard].string = @"liu1602389262";
        exit(0); // <--- 关键点:直接退出应用
    }];

    // 按钮2:我想白嫖
    v3 = [UIAlertAction actionWithTitle:@"我想白嫖" handler: ^(UIAlertAction *action){
        exit(0); // <--- 关键点:直接退出应用
    }];

    [v1 addAction:v2];
    [v1 addAction:v3];
    // ...显示弹窗代码...
}

分析结论:作者设计了一个死局,一旦弹窗出现,就没有"取消"选项,点击任何按钮都会触发 exit(0) 导致闪退。

2.2 触发源追踪 (sub_5CBC -> sub_5CEC)

查看 sub_7858 的交叉引用(Xref),发现它被 sub_5CBC 调用。
sub_5CBC 的逻辑非常简单:

void sub_5CBC(id a1) {
    if ( (sub_5CEC(a1) & 1) == 0 ) { // 核心判断
        // 如果 sub_5CEC 返回 0 (false),则在主线程执行弹窗
        dispatch_async(main_queue, &block_invoke_popup);
    }
}

显然,sub_5CEC 就是关键的白名单验证函数

2.3 白名单验证函数 (sub_5CEC)

进入 sub_5CEC (地址 0x5C68) 分析:
这个函数内部构建了一个巨大的 NSArray,里面包含了数百个 Base64 编码的字符串。代码会对这些字符串进行解码,然后与当前登录用户的 wxid 进行匹配 (containsObject:)。

  • 匹配成功:返回 1 (True)。
  • 匹配失败:返回 0 (False)。

三、 破解实战 (修改汇编)

既然找到了验证函数 sub_5CEC,最直接的破解方法就是修改它的汇编代码,让它永远返回 1 (True)

3.1 目标地址

  • 函数起始地址 (VM Address): 0x5C68
  • 文件偏移 (File Offset): 0x25C68 (注意:实际修改文件时需转换地址)

3.2 原始汇编 (ARM64)

0x5C68:  PACIBSP            ; 签名指令 (7F 23 03 D5)
0x5C6C:  STP X28, X27, [SP, #-0x60]! ; 保存寄存器 (FC 6F BA A9)
...

3.3 修改方案

我们需要将函数头直接修改为:

MOV W0, #1  ; 返回值设为 1 (True)
RET         ; 直接返回

对应机器码 (Little Endian):

  • MOV W0, #1 -> 20 00 80 52
  • RET        -> C0 03 5F D6

3.4 实施修改

使用 Hex Editor (如 010 Editor) 或自己写脚本修改:

  1. 打开 自定义头像.dylib
  2. 跳转到偏移 0x25C68 (对应 IDA 中的 sub_5CEC)。
  3. 将原本的字节替换为:20 00 80 52 C0 03 5F D6
  4. 保存文件。

四、 彻底净化 (可选)

为了防止有漏网之鱼,或者存在多处检测,我们可以采取三重屏蔽策略:

  1. 修改验证函数 (sub_5CEC):如上所述,强制返回 1。
  2. 修改触发函数 (sub_5CBC):在入口处直接 RET,彻底切断弹窗调用的路径。
  3. 修改弹窗函数 (sub_7858):在入口处直接 RET,让弹窗代码失效。

五、 总结

通过简单的字符串定位和交叉引用分析,我们找到了插件的验证逻辑。通过修改 ARM64 汇编指令,将条件判断改为永真,成功绕过了白名单限制。现在插件已经可以供任何人免费使用了。

这个插件本身技术原理是通过 Hook MMHeadImageViewMMUILongPressImageView 来实现本地图片替换,并未修改服务器数据,仅供本地娱乐。
3b011baa5152310ec47181359a1f29a4.jpg

com.liuf.zdytx_0.0.1_iphoneos-arm64.deb.zip (19.59 KB, 下载次数: 22) ">练手插件在此下载:

本文仅供技术交流学习,请勿用于商业用途。

免费评分

参与人数 7吾爱币 +4 热心值 +7 收起 理由
lanyun86 + 1 谢谢@Thanks!
pptx + 1 谢谢@Thanks!
EZStudio + 1 + 1 我很赞同!
Lfable + 1 + 1 用心讨论,共获提升!
cd1688 + 1 谢谢@Thanks!
bingshen + 1 + 1 谢谢@Thanks!
plsir008 + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

zqqqq 发表于 2025-12-11 08:30
学习一下 感谢分享
aaa74124 发表于 2025-12-10 23:29
Plutonium 发表于 2025-12-10 23:55
Nine01 发表于 2025-12-11 00:01
厉害,值得学习一下
99977lcz 发表于 2025-12-11 00:36
好用,值得学习
kevinZheng1314 发表于 2025-12-11 06:41
还以为是成品,下载注入闪退
zxdjian 发表于 2025-12-11 08:03
谢谢分享!
hainanyu 发表于 2025-12-11 08:19
这个系统就不研究了
gzh820101 发表于 2025-12-11 08:25
没用过苹果产品,但还是支持下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-12-12 11:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表