iOS逆向开发笔记1--工具篇

文档更新说明

  • 2017年01月26日 v1.0 初稿

    平时我们做的开发一把是正向开发,所谓逆向开发,实际上有个更加通俗的词语,就是破解,逆向开发可以让我们了解到其他APP的实现方式,学到正向开发学不到的东西。

    工具列表

  • 电脑端

  • 手机端

    • clutch:iOS上面砸壳的榔头(需要越狱的iOS设备)

    安装theos

    theos是一款逆向开发工具,可以为我们搭建逆向开发的脚手架,编译逆向工程等等,非常实用。

    theos的准备

    theos是需要依赖一些第三方库的:

    • curl
    • git
    • make
    • openssh
    • perl
    • rsync
    • dpkg
    • python

    Mac上,theos的依赖基本上都自带了,我们只需要额外安装dpkg

  • dpkg的安装:dpkg可以使用homebrew安装,当然,homebrew也是需要另外安装的,没有homebrew的可以去官网看看安装方法。安装完homebrew之后,使用命令:brew install dpkg安装dpkg

theos的安装

  1. 打开命令行
  2. 选择要存放theos的位置,官方建议是放在/opt/theos目录下,实际我们可以根据自己的需求,我就习惯放在home里面的workspace目录下

    不建议放在当前用户权限之外的目录,否则可能会引起权限问题

    # 这一句的意思是定义一个名称为THEOS的变量,指向我们的theos安装目录
    # 定义完之后,我们可以在命令行中以 $THEOS 的方式使用这个变量
    export THEOS=~/workspace/crack/theos
  3. theos的最新版本代码克隆到本地

    • 使用git

      # --recursive参数表示递归克隆子模块,theos中有子仓库,我们需要一并克隆下来
      git clone --recursive git://github.com/DHowett/theos.git $THEOS
      
    • 使用svn

      svn co http://svn.howett.net/svn/theos/trunk $THEOS
      
  4. 给命令行添加默认变量定义

    Mac中,~/.bash_profile文件中的命令会在命令行打开的时候自动运行一遍

    我们可以在~/.bash_profile文件中添加我们需要定义的一些变量,方便后面的开发。
    打开~/.bash_profile文件,在里面添加下面代码。

    # theos存放位置
    export THEOS=~/workspace/crack/theos
    # 把theos里面的添加到path环境变量
    export PATH=$THEOS/bin:$PATH
    # 越狱机器的IP和ssh端口需要根据自己的网络环境做修改
    export THEOS_DEVICE_IP=example.local THEOS_DEVICE_PORT=22
  5. 复制越狱手机里面的/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate$THEOS/lib,重命名为libsubstrate.dylib

  6. 同样的步骤,复制越狱手机里面的/Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h到电脑的$THEOS/include目录下,并重命名为substrate.h

    如果没有越狱手机,也可以从网上下载下来,下载方法如下:
    如果已经完成了5、6步,直接跳过下面这段代码。

    # 下载文件
    wget http://apt.saurik.com/debs/mobilesubstrate_0.9.6011_iphoneos-arm.deb
    # 新建一个文件夹
    mkdir substrate
    # 把下载的文件解包
    dpkg-deb -x mobilesubstrate_*_iphoneos-arm.deb substrate
    # 移动第5步提到的文件
    mv substrate/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate $THEOS/lib/libsubstrate.dylib
    # 移动第6步的文件
    mv substrate/Library/Frameworks/CydiaSubstrate.framework/Headers/CydiaSubstrate.h $THEOS/include/substrate.h

至此,我们就把theos安装到了电脑里面,可以在命令行中输入$THEOS/bin/nic.pl来测试一下是否安装成功。

安装optool

optool是一个可以修改和插入MatchO格式可执行文件load commands段的开源工具。我们可以利用这个工具,把我们生成的hook库插入到目标可执行文件中。

  1. 克隆源代码到本地;

    git clone --recursive https://github.com/alexzielenski/optool.git
    
  2. 编译源代码,生成可执行文件;

    cd optool
    xcodebuild -project optool.xcodeproj -configuration Release ARCHS="x86_64" build
    

    注意:如果这一步遇到error: There is no SDK with the name or path '/Users/fengqiang/workspace/crack/optool/macosx10.9'这个错误,是由于工程的依赖SDK版本设置不对,工程默认使用的是10.9的SDK,我们只需要用xcode打开工程,在build setting中,把Base SDK设置成Latest macOS即可

  3. 把编译出来的可执行文件添加到/usr/local/bin目录下,这样我们就可以直接在命令行中使用了。

    cp build/Release/optool /usr/local/bin/
    
  4. 在命令行中输入optool -v,测试一下,如看到版本信息说明就没问题了,至此,optool安装完成。

安装ios-app-signer

ios-app-signer是一个APP签名工具,非常直观方便,安装也是非常简单,这里我们直接下载作者编译好的Release版本吧。

  1. 打开Realse页面,下载最新版本的iOS.App.Signer.app.zip
  2. 解压之后,拖到应用程序目录下,在Launch Pad中打开即可。

安装clutch

上面都是安装在电脑上使用的工具,接下来我们安装一个手机上面使用的工具。
clutchiOS越狱环境下的一个砸壳工具,由于上传到Appstore里面的APP经过了苹果的加密,我们要做逆向,就必须先解密,clutch就是这个解密的工具,可以称之为“榔头”。

clutch可以通过下载源代码自己编译,也可以下载作者已经编译好的release版本,这里我们就克隆源代码,然后自己编译吧。

1.克隆源代码到本地;

git clone https://github.com/KJCracks/Clutch.git

2.关闭xcode的SDK强制签名;

killall Xcode
# 备份一份要修改的文件
cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist ~/
/usr/libexec/PlistBuddy -c "Set :DefaultProperties:CODE_SIGNING_REQUIRED NO" /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist
/usr/libexec/PlistBuddy -c "Set :DefaultProperties:AD_HOC_CODE_SIGNING_ALLOWED YES" /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/SDKSettings.plist

3.编译下载下来的源码;

xcodebuild -project Clutch.xcodeproj -configuration Release ARCHS="armv7 armv7s arm64" build

4.将生成出来的二进制文件复制到已经越狱的设备中

scp build/clutch root@<your.device.ip>:/usr/bin/

5.可以在越狱设备上面执行clutch -i,测试一下是否已经安装成功,如果看到了已经安装的app的话,代表安装成功了。

小结

经过上面几个步骤,我们就已经搭建好了一个越狱开发的基本环境,接下来要做的事情就是开始真正的越狱开发了。

参考资料:

  1. 免越狱版 iOS 抢红包插件