某记账App iOS客户端内购破解
字数 1223 2025-08-29 08:31:47

iOS应用内购破解逆向分析教程

环境准备

  • 设备:越狱iPhone 4s
  • 系统:iOS 8.3
  • 目标应用:某记账App(版本1.6.6)
  • 工具:
    • dumpdecrypted(砸壳工具)
    • class-dump(头文件导出工具)
    • Cycript(运行时注入工具)
    • debugserver + lldb(动态调试工具)
    • Hopper/IDA(反汇编工具)
    • Theos(Tweak开发工具)

破解步骤详解

1. 砸壳获取解密二进制文件

  1. SSH连接到越狱设备
  2. 使用ps -e命令查找目标应用进程:
    ps -e
    
    输出示例:
    PID TTY TIME CMD
    1102 ?? 0:02.93 /var/mobile/Containers/Bundle/Application/7E51DAF5-3FCF-42CF-B4CB-F47CC4078048/easycost.app/easycost
    
  3. 使用dumpdecrypted对目标应用进行砸壳

2. 获取头文件

使用class-dump导出头文件:

class-dump --arch armv7 -S -s -H 可执行文件 -o 输出目录

3. 使用Cycript分析视图层次

  1. 注入Cycript到目标进程:
    Cycript -p 1102
    
  2. 打印当前视图层次:
    UIApp.keyWindow.recursiveDescription().toString()
    
  3. 查找关键视图元素(如KLSwitch)

4. 定位关键控制器和方法

  1. 通过视图的nextResponder找到控制器
  2. 在导出的头文件中搜索相关控制器(如CatalogInfoViewController)
  3. 查找可能的关键方法(如cycleSwitch)

5. 动态调试确认关键函数

  1. 启动debugserver进行远程调试
  2. 使用lldb连接debugserver
  3. 查看ASLR偏移:
    image list -o -f
    
  4. 在Hopper/IDA中分析二进制文件,定位关键函数(如isPurchased)
  5. 计算实际内存地址:ASLR偏移 + 函数偏移
  6. 设置断点并修改寄存器值进行测试

6. 开发Tweak绕过限制

  1. 使用Theos创建Tweak项目
  2. 编辑Makefile:
    ARCHS = armv7 arm64
    TARGET = iphone:latest:8.0
    include $(THEOS)/makefiles/common.mk
    TWEAK_NAME = EasyCostTweak
    EasyCostTweak_FILES = Tweak.xm
    include $(THEOS_MAKE_PATH)/tweak.mk
    
  3. 编写Tweak代码(Tweak.xm):
    %hook Purchased
    - (BOOL)isPurchased {
        return YES;
    }
    %end
    
  4. 编译并安装到设备

关键发现

  1. 目标应用的高级功能(周期记账)由isPurchased方法控制
  2. 修改isPurchased方法返回值为YES可解锁高级功能
  3. 关键控制器为CatalogInfoViewController
  4. 关键方法包括cycleSwitchisPurchased

防护措施建议

  1. 反调试技术:

    • 检测调试器附加
    • 使用ptrace等系统调用防止调试
  2. 代码混淆:

    • 方法名/类名混淆
    • 控制流混淆
    • 使用LLVM混淆器(如obfuscator-llvm)
  3. 完整性检查:

    • 检查二进制文件签名
    • 检测越狱环境
    • 防止动态库注入
  4. 服务器端验证:

    • 关键功能验证放在服务器端
    • 定期检查购买状态

学习资源推荐

  1. 书籍:《iOS应用逆向工程》
  2. 论坛:bbs.iosre.com
  3. 社区:看雪iOS小组
  4. 工具:
    • https://github.com/obfuscator-llvm/obfuscator
    • Frida
    • BinaryNinja

总结

本教程详细介绍了从砸壳到最终开发Tweak的完整逆向过程,重点展示了如何通过静态分析和动态调试相结合的方式定位关键函数,并通过hook修改应用逻辑。逆向工程是一个需要不断尝试和积累经验的过程,建议从简单应用开始练习,逐步掌握各种工具和技术。

iOS应用内购破解逆向分析教程 环境准备 设备:越狱iPhone 4s 系统:iOS 8.3 目标应用:某记账App(版本1.6.6) 工具: dumpdecrypted(砸壳工具) class-dump(头文件导出工具) Cycript(运行时注入工具) debugserver + lldb(动态调试工具) Hopper/IDA(反汇编工具) Theos(Tweak开发工具) 破解步骤详解 1. 砸壳获取解密二进制文件 SSH连接到越狱设备 使用 ps -e 命令查找目标应用进程: 输出示例: 使用dumpdecrypted对目标应用进行砸壳 2. 获取头文件 使用class-dump导出头文件: 3. 使用Cycript分析视图层次 注入Cycript到目标进程: 打印当前视图层次: 查找关键视图元素(如KLSwitch) 4. 定位关键控制器和方法 通过视图的nextResponder找到控制器 在导出的头文件中搜索相关控制器(如CatalogInfoViewController) 查找可能的关键方法(如cycleSwitch) 5. 动态调试确认关键函数 启动debugserver进行远程调试 使用lldb连接debugserver 查看ASLR偏移: 在Hopper/IDA中分析二进制文件,定位关键函数(如isPurchased) 计算实际内存地址:ASLR偏移 + 函数偏移 设置断点并修改寄存器值进行测试 6. 开发Tweak绕过限制 使用Theos创建Tweak项目 编辑Makefile: 编写Tweak代码(Tweak.xm): 编译并安装到设备 关键发现 目标应用的高级功能(周期记账)由 isPurchased 方法控制 修改 isPurchased 方法返回值为YES可解锁高级功能 关键控制器为 CatalogInfoViewController 关键方法包括 cycleSwitch 和 isPurchased 防护措施建议 反调试技术: 检测调试器附加 使用ptrace等系统调用防止调试 代码混淆: 方法名/类名混淆 控制流混淆 使用LLVM混淆器(如obfuscator-llvm) 完整性检查: 检查二进制文件签名 检测越狱环境 防止动态库注入 服务器端验证: 关键功能验证放在服务器端 定期检查购买状态 学习资源推荐 书籍:《iOS应用逆向工程》 论坛:bbs.iosre.com 社区:看雪iOS小组 工具: https://github.com/obfuscator-llvm/obfuscator Frida BinaryNinja 总结 本教程详细介绍了从砸壳到最终开发Tweak的完整逆向过程,重点展示了如何通过静态分析和动态调试相结合的方式定位关键函数,并通过hook修改应用逻辑。逆向工程是一个需要不断尝试和积累经验的过程,建议从简单应用开始练习,逐步掌握各种工具和技术。