banner
NEWS LETTER

逆向-砸壳导出头文件-(一)Clutch

Scroll down

前言

最近想了解别人app的一个功能实现,入了逆向的坑,也当做一次更深了解oc底层的机会。前前后后看了几篇相关文章,就拿个App练了练手,在此记录下学习过程,方便以后回忆。首先,上传到AppStore的App都是经过苹果签名加密的(具体加密过程可以看我写的这篇文章),所以我们要拿到App代码的头文件,必须解密,俗称砸壳,接下来,我会用以下三种工具来实现砸壳并且导出头文件。此篇介绍的是Clutch

准备

  1. 越狱的iPhone

    • Cydia安装OpenSSH(Mac 上远程输入命令操作 iOS 设备)

    • Cydia安装Apple File Conduit “2”(方便ifunbox等工具访问iOS系统目录)

      安装 afc2add 也是一样,不过我在安装 afc2add 后无法访问系统目录,才用 Apple File Conduit “2” 这个插件的,这个插件要通过添加 apt.25pp.com 这个源来装,你用Cydia的源访问不了,应该是要翻墙。
      (这里小记录下,每次重新越狱, Apple File Conduit “2” 这个插件都要重新安装一遍,不然会失效)

  2. 电脑安装ifunbox,usbmuxd,class-dump

    • iFunBox自己找,主要用来iPhone和Mac传输文件,实在不用也行,可用scp命令代替

      usb连接手机情况下:

      1
      2
      scp -P 12345 root@localhost:<手机上文件的路径> <复制的文件存放到电脑的路径>
      scp -P 12345 <电脑上文件的路径> root@localhost:<复制的文件存放到手机的路径>

      wifi连接手机情况下:

      1
      2
      scp <电脑上文件的路径> root@越狱机ip地址:<复制的文件存放到手机的路径>
      scp root@越狱机ip地址:<手机上文件的路径> <复制的文件存放到电脑的路径>
    • usbmuxd可通过下面命令安装,前提是你Mac装了Homebrew

      1
      2
      brew install usbmuxd

    • 如果你安装了或者打算装 Monkey Dev 的,就可以不用装 class-dump,因为它里面已经自带了。自己安装 class-dump 可以通过此地址下载,下载后打开,把里面的 class-dump 复制到 /usr/local/bin 路径下,打开终端,执行:

      1
      class-dump

      成功安装好class-dump~

过程

安装Clutch

  1. 先从GitHub下载最新Clutch

    下载地址:https://github.com/KJCracks/Clutch/releases

  2. ssh连接iPhone

    • 由于Mac上只支持4位的端口号,所以需要把iPhone的默认端口22映射到Mac上,相当于建立一个Mac和iPhone之间的通道。打开终端,执行:

      1
      2
      iproxy 12345 22

    • 这时终端会显示 waiting for connection 这表示我们已经搭建好Mac和iPhone的通道,现在我们直接和本地的12345端口通信就能和iPhone通信了。保持上一个命令显示的状态,新建个终端执行:

      1
      ssh -p 12345 root@127.0.0.1

      如果要你输入密码则输入:alpine,显示 iPhone:~ root# 代表成功,你可以在后面输入命令操作设备啦。

  3. 移到iPhone的Device->usr->bin目录下

    直接拖动下载 Clutch-2.0.4文件 到iFunBox的 Device/usr/bin 目录下就算安装成了。

砸壳

  1. 给 clutch 加权限

    cd到 clutch 所在位置:

    1
    2
    iPhone:~ root# cd /usr/bin
    iPhone:/usr/bin root#

    直接执行:

    1
    2
    	iPhone:/usr/bin root# Clutch-2.0.4
    -sh: /usr/bin/Clutch-2.0.4: Permission denied

    这是因为没有权限,给他加一下就好了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    iPhone:/usr/bin root# chmod +x Clutch-2.0.4
    iPhone:/usr/bin root# Clutch-2.0.4
    Usage: Clutch-2.0.4 [OPTIONS]
    -b --binary-dump <value> Only dump binary files from specified bundleID
    -d --dump <value> Dump specified bundleID into .ipa file
    -i --print-installed Print installed applications
    --clean Clean /var/tmp/clutch directory
    --version Display version and exit
    -? --help Display this help and exit
    -n --no-color Print with colors disabled

    这里很明显成功了,可以砸壳了。

  2. 找出要砸壳app的包名,砸壳

    我们执行这句查看手机安装的App:

    1
    2
    3
    4
    5
    iPhone:/usr/bin root# Clutch-2.0.4 -i
    Installed apps:
    1: 微信 <com.tencent.xin>
    2: 大众点评-分享你的潮生活 <com.dianping.dpscope>
    3: Keep - 自由运动场 <com.gotokeep.keep>

    找到你想砸壳的App,复制他的包名,执行:

    1
    2
    3
    4
    5
    6
    7
    iPhone:/usr/bin root# Clutch-2.0.4 -d com.tencent.xin
    Zipping MacauLife.app
    ASLR slide: 0x10009c000
    Dumping <MacauLife> (arm64)
    ...
    DONE: /private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-(Clutch-2.0.4).ipa
    Finished dumping com.tencent.xin in 17.6 seconds

    砸壳成功~

导出头文件

  1. 拿到可执行文件

    从上面砸壳我们已经成功得到砸完壳的ipa包了,接着只要根据返回的路径,从iFunBox找到ipa包,拖到你的Mac电脑上,右键解压,然后你会发现一个Payload文件夹,右键显示包内容,在里面找到 WeChat 这个文件,把它复制出来放到你喜欢的路径下,这就是微信的可执行文件啦,我们要利用这个文件来导出头文件。

    如果没有iFunBox可以用命令代替这个操作:

    1
    2
    scp -P 12345 root@localhost:/private/var/mobile/Documents/Dumped/com.tencent.xin-iOS9.0-\\\(Clutch-2.0.4\\\).ipa ~/

    注意:

    • 此命令是在电脑终端执行,而不是在手机端终端下。
    • -P 的 P 必须是大写,指定端口的意思。
    • Clutch砸壳后生成的ipa包命名有’(‘,’)’这两个符号,要加反斜杠,不然会报找不到文件问题。或者你直接用mv命令重新命名这个ipa包名,去掉括号在进行scp复制到电脑也行。
  2. 导出头文件

    用class-dump导出头文件,到终端执行(包括两个符号’<’,’>’整个替换路径):

    1
    class-dump -H <你放WeChat可执行文件的路径> -o <你打算放导出的头文件的文件夹路径>

    喝杯咖啡,emmmm,头文件就出来啦。

总结

至此,clutch砸壳&获取头文件完毕,你可以用ida来打开上面得到可执行文件,它可以生成伪代码,免去看汇编的痛苦,配合sublime来看头文件,进而分析,学习别人App某些功能的实现,下一篇将讲用 dumpdecrypted 砸壳。

Other Articles
Article table of contents TOP
  1. 1. 前言
  2. 2. 准备
  3. 3. 过程
    1. 3.1. 安装Clutch
    2. 3.2. 砸壳
    3. 3.3. 导出头文件
  4. 4. 总结