iOS应用破解初探

iOS应用破解初探

1.常用破解工具

  • Dumpdecrypted - APP解密

  • 通常为第一步

  • IDA - 静态反编译

  • LLDB - 动态调试

    • Apple官方的调试工具
  • Cycript - 动态调试/UI分析

    • 基于JS
    • 动态打印、分析程序结构
    • 通常用于UI分析
  • IHex - 二进制修改

    • 对二进制进行patch

    • patch是什么意思?

      To patch a file means to modify it, with the connotation that the modification is generally small.

  • Classdump - 头文件提取

    • 便于对类名和方法名进行搜索
  • Burpsuite/WireShark - 抓包

    • 大部分验证通过HTTP/HTTPS
    • socket等可以通过WireShark

2.破解步骤与方法

常规步骤

以下为一个常规步骤

  • 判断授权方式(Burpsuite/Shark)
    • 用抓包工具判断APP的授权方式
  • APP解密(Dumpdecrypted)
    • 对二进制文件进行解密
    • dump出头文件,利于查找
  • 二进制分析(IDA/LLDB/Cycript)
    • 通过动静态结合的调试方式
    • 找到关键破解点
  • 二进制修改/HOOK(IHex)
    • 进行破解
    • Patch二进制
    • HOOK注入
  • 签名重打包

常用方法

  • UI回溯法
    • 根据UI显示的授权关键字如“正式版”、“试用版”、“未授权”等,通过Cycript进行UI分析,一步步回溯到上层授权判断的关键点进行修改和破解
  • 特征函数法
    • 根据授权验证所需的特定函数进行定位。
    • e.g. socket验证所需的固定函数connect, recv等函数,定位到程序发送、接收数据等位置。
    • e.g. 部分APP将授权码写入keychain,定位keychain读写函数
  • 类名检索法
    • 代码的类名函数通常具有可读性,通过classdump导出头文件检索如authorize等关键文件
    • 定位关键字
  • 顺序跟踪法
    • 大多数授权校验和机器码发送位于程序初始化,在IDA中从函数初始化开始跟踪寻址
  • 栈跟踪法
    • 断点关键函数,根据调用栈查找验证流程

3.实战案例

实验一:网络验证破解

  • http/https/socket

  • 总的思路:通过抓包工具,找到协议,跟踪请求的函数(跟着IDA反编译后的代码),分析函数对数据的处理流程。

  • 步骤1:通过BurtpSuite截包,分析协议,发送请求

  • 步骤2:打开IDA查询host及HTTP发包相关函数,使用了第三方网络框架AFNetworking发送请求

  • 步骤3:分析请求get后对response返回值的处理函数

如何破解?

  • 爆破
    • patch二进制,修改对get请求返回值的判断
  • 注册机

实验二:本地验证的破解

以破解一个棋牌APP为例,正版/试用版。

  • 步骤1:分析UI结构,关键字分析
  • 步骤2:classdump出头文件,找出UI调用,跟进函数调用流程
  • 步骤3:梳理验证流程,明确验证为正版的代码流程

如何破解?

  • Hook,修改注册状态
  • 修改数据库取值后对注册码的判断,直接修改逻辑判断、

实验三:机器码验证伪造

  • utsname
  • UIDevice
  • MGCopyAnswer
  • IORegistryEntryCreateCFProperty

Reference

[1] iOS应用破解,刘羊梓, https://www.ichunqiu.com/course/53977