iOS应用砸壳原理

前言

要想破解别人的App,第一步就是拿到ipa包进行砸壳砸壳也称作软件脱壳,顾名思义,就是对软件加壳的操作,把软件上存在的壳去掉(即解密)。

一、砸壳原理

1.1 应用加壳(加密)

提交给AppStore发布的App,都经过官方保护而加密,这样可以保证机器上跑的应用是苹果审核过的,也可以管理软件授权。

经过AppStore加密的应用,我们无法通过Hopper等反编译静态分析,也无法Class-Dump

在逆向分析过程中,需要对加密的二进制文件进行解密,然后才能进行静态分析,这一过程就是大家熟知的砸壳(脱壳)。

App Store是通过对称加密(AES)加壳的,为了速度和效率。

1.2 应用砸壳(解密)

  • 静态砸壳 👉🏻 在已经掌握和了解到了壳应用的加密算法和逻辑后,在不运行壳应用程序的前提下,将壳应用程序进行解密处理。静态脱壳的方法难度大,而且加密方发现应用被破解后,就可能会改用更加高级和复杂的加密技术。
  • 动态砸壳 👉🏻 从运行在进程内存空间中的可执行程序映像(image)入手,将内存中的内容进行转储(dump)处理来实现脱壳处理。这种方法实现起来相对简单,且不必关心使用的是何种加密技术。

在iOS系统中,应用砸壳所使用的都是动态砸壳技术

1.3 iOS应用运行原理

  1. 加了壳的程序CPU是读不懂的,只有解密后才能载入内存。
  2. iOS系统内核会对MachO进行脱壳,所以我们只需要将解密后的MachO拷贝出来。
  3. 非越狱手机做不到跨进程访问,越狱后拿到root权限就可以访问了。这就是砸壳的原理。(按页加解密-代码段)

二、frida-ios-dump

frida-ios-dump工具是基于frida提供的强大功能,通过注入js实现内存dump,然后通过python自动拷贝到电脑生成ipa文件

frida-ios-dump支持众多版本的系统,非完美越狱的环境也可使用,是目前最常用、最稳定的砸壳工具!

2.1环境配置

2.1.1 pip安装

pip的安装和python版本有关👇🏻

  • python安装使用pip
  • python3安装使用pip3
  1. 查看python版本
python --version
-------------------------
Python 2.7.16

查看python3版本

python3 --version
-------------------------
Python 3.8.2

查看pip版本

pip -V

查看pip3版本

pip3 -V

    使用get-pip安装

    git clone https://github.com/pypa/get-pip.git
    

    指令执行完成后,我们来到public目录下查看👇🏻

    1. 使用python3执行get-pip.py脚本,安装pip3
    python3 get-pip.py
    
    4.1.2 frida安装
    • iOS手机端👇🏻
    1. 打开Cydia,添加源:https://build.frida.re

    2. 安装Frida

    • Mac电脑
    sudo pip3 install frida-tools
    

    ⚠️注意:可能会出现警告you may want sudo's -H flag

    上图意思是目录不归当前用户所有。请检查该目录的权限和所有者,需要sudo的-H标志。

    sudo -H 👉🏻 set-home 👉🏻 将HOME变量设为目标用户的主目录

    sudo -H pip3 install frida-tools
    

    ⚠️注意:出现Uninstalling a distutils installed project (six)提示,执行以下命令👇🏻

    sudo pip3 install frida --upgrade --ignore-installed six
    
    4.1.3 frida使用
    • 查看Mac电脑的进程👇🏻
    frida-ps
    

    • USB连接设备,查看手机上的进程👇🏻 
    frida-ps -U
    

    ⚠️注意:如果执行frida-ps -U指令后没反应 👇🏻
    进入frida-ios-dump目录,然后执行sudo pip3 install -r requirements.txt --upgrade即可!

    • 进入WeChat进程
    frida -U 微信
    

    • 输出WeChat内存中的对象
    ObjC
    

    frida优缺点
    • frida擅长将js和python脚本,注入到目标程序并执行,它并不适合作为动态分析的工具使用。
    • frida-ios-dump就是将dump.py,通过frida注入目标程序,从而实现应用砸壳。

    4.2 frida-ios-dump的使用

    1. 在Mac电脑,配置frida-ios-dump 右边官网链接

    2. 克隆frida-ios-dump

    sudo git clone https://github.com/AloneMonkey/frida-ios-dump
    

    查看frida-ios-dump目录

    1. 安装依赖
    sudo pip3 install -r requirements.txt --upgrade
    
    4.2.1出现的错误
    • prompt-toolkit版本不兼容问题
    frida-tools 1.2.2 has requirement prompt-toolkit<2.0.0,>=0.57, but you'll have prompt-toolkit 2.0.7 which is incompatible.
    

    解决 👉🏻 需要降低prompt-toolkit版本👇🏻

    1. 卸载prompt-toolkit
    sudo pip uninstall prompt-toolkit
    
    1. 安装指定版本
    sudo pip install prompt-toolkit==1.0.6
    
    • -H警告,同样使用sudo -H解决
    sudo -H pip3 install -r requirements.txt --upgrade
    
    4.2.2 frida-ios-dump砸壳演示
    1. 进入frida-ios-dump目录,执行dump.py脚本
    ./dump.py 微信
    -------------------------
    Traceback (most recent call last):
     File "./dump.py", line 11, in <module>
       import frida
    ImportError: No module named frida
    

    遇到上述问题,先检查frida-ios-dump目录的读写权限,没有则加一个👇🏻

    1. 打开dump.py文件,需要将python修改为python3👇🏻
    2. 再执行
    ./dump.py 微信
    -------------------------
    [Errno None] Unable to connect to port 2222 on 127.0.0.1, ::1 or fe80::1
    Try specifying -H/--hostname and/or -p/--port
    

    还是执行失败了,因为在dump的时候,会将ipa包导出到Mac电脑,此时需要USB连接设备。所以在dump之前,应该先执行usbConnect.sh脚本

    1. 检查dump.py文件中的User、Password、Host、Port,是否和usbConnect.sh脚本中的配置一致, 修改Port,将2222修改为12345👇🏻
      再次执行dump.py脚本
    ./dump.py 微信
    -------------------------
    Start the target app 微信
    Dumping 微信 to /var/folders/jl/d06jlfkj2ws74_5g45kms07m0000gn/T
    [frida-ios-dump]: ilink_network.framework has been loaded.
    ...
    Generating "微信.ipa"
    

    执行成功后,会在frida-ios-dump目录下,成功导出微信.ipa👇🏻

    可以将其配置为环境变量,方便使用!

    三:其他砸壳工具

    • Clutch是由KJCracks开发的一款开源砸壳工具。工具支持iPhone、iPod Touch、iPad,该工具需要使用iOS8.0以上的越狱手机应用。

    ⚠️注意:Clutch属于命令行工具,适用于完美越狱的设备。如果是非完美越狱,砸壳时可能会出现问题

    • 接着我们看看另一个砸壳工具 👉🏻 dumpdecrypted。它是Github开源工具,通过建立一个名为dumpdecrypted.dylib的动态库,插入目标应用实现脱壳。

    Clutch一样,都是砸壳领域的经典插件。它们同样岁月沧桑,适用于完美越狱的设备。如果是非完美越狱,砸壳时可能会出现问题

    版本问题

    使用dumpdecrypted工具,要求Xcode SDK与越狱设备iOS SDK版本一致!

    例如:对iOS 9.1的设备插入dumpdecrypted.dylib,就要使用老版本Xcodedumpdecrypted进行make。否则在插入dumpdecrypted.dylib时,会出现以下错误👇🏻

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/B1661526-3E43-4397-9E86-A9735DE89AE1/WeChat.app/WeChat
    -------------------------
    dyld: Symbol not found: ___chkstk_darwin
     Referenced from: dumpdecrypted.dylib
     Expected in: /usr/lib/libSystem.B.dylib
    in dumpdecrypted.dylib
    Trace/BPT trap: 5
    

    总结

    砸壳原理:

    • 应用加壳 👉🏻 一般应用为了防止反编译分享,会对应用进行加密(加壳)
    • 应用砸壳 👉🏻 砸壳(脱壳)就是解密的过程
      静态砸壳 👉🏻 已经知道了解密方式,不需要运行应用的情况下,直接解密
      动态砸壳 👉🏻 在应用启动后,从内存中找到应用的位置,dump(内存中导出)数据

    应用砸壳: 23-应用砸壳 - 简书

    IOS APP破解完整流程(逆向工程完整详解)

    逆向相关资料: 深圳_你要的昵称 - 简书

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值