iOS逆向工程 - 工具篇

逆向工程的分析工具

进行iOS逆向工程的一个关键就是工具的使用,工欲善其事,必先利其器。

一、常用App安装以及环境配置

  • Alfred
    Alfred 与系统自带的 Spotlight 类似,但是它比较强大。它除了有基本搜索和快速启动应用等功能外,真正强大之处在于用户可以根据自己的实际需要,自定义各种工作流。
    这里就不细说了,想要深入了解的可移步:
    5分钟上手Mac效率神器Alfred以及Alfred常用操作
    Mac效率神器Alfred以及常用Workflow

  • gotoshell
    Go2Shell 是 Mac 上终端常用者的萌物,把它拖到 Finder 工具栏上,点击后可直接在当前目录下开启终端。省了再 cd 的麻烦,程序还支持 iTerm,iTerm2 和 xTerm。

  • iTerm2
    Mac 自带的终端不是特别方便,今天我们将会使用 iTerm2 来替代 Terminal 终端。整体的搭配组合为:iTerm2 + Oh my zsh + zsh。
    iTerm2可以设置主题,支持画面分隔、各种快捷键。Mac 默认使用的 shell 是 bash,我们可以换成 zsh,搭配 iTerm2 使用,用起来十分顺手。
    具体的安装及配置,请移步:
    Mac OS 终端利器 iTerm2

1. zsh 避免每次打开 Terminal 都需要 source ~/.bash_profile
安装好之后,需要把 Zsh 设置为当前用户的默认 Shell(这样新建标签的时候才会使用 Zsh):

$ chsh -s /bin/zsh

使用过程中发现之前在 .bash_profile 中定义的环境变量在 zsh 终端中找不到,java,mvn,git 均找不到命令,因为 zsh 加载的是 ~/.zshrc 文件,而 ‘.zshrc’ 文件中并没有定义任务环境变量。 如果我们需要之前在 .bash_profile 中定义的环境变量生效,该怎么办呢?有两种方法:
第一种是:每次打开终端时都手动 source ~/.bash_profile,这样比较麻烦
第二种是:把这条指令保存在 .zshrc 中

$ vim ~/.zshrc

然后在编辑页面最下面加一行代码:

$ source ~/.bash_profile

2. 去掉终端前面过长的路径
进入 oh-my-zsh 的 themes 目录

$ vim ~/.oh-my-zsh/themes

复制一份 agnoster.zsh-theme,改主题名为“ custom.zsh-theme ”,custom为自定义的主题名,编辑主题

$ vim custom.zsh-theme

找到并修改以下代码

# Context: user@hostname (who am I and where am I)
prompt_context() {
  if [[ "$USER" != "$DEFAULT_USER" || -n "$SSH_CLIENT" ]]; then
    prompt_segment black default "%(!.%{%F{yellow}%}.)$USER@%m"
    # 上面的代码修改为:prompt_segment black default "custom"
  fi
}
  • IDA Pro
    反编辑工具

  • iOS App Signer
    App重签名工具

  • MachOView
    查看 mach-o 文件工具

  • PP助手
    下载破解版App工具

二、集成非越狱调试工具

  • MonkeyDev
    非越狱机器或者使用Xcode调试第三方应用的时候有很多集成步骤,注入dylib,集成Reveal(UI分析工具)、class-dump(查看头文件工具)、Cycript(调试器)等等,这些步骤其实都是重复性的工作,使用 MonkeyDev 就可以一步到位!

三、Cycript 安装以及使用

  • 下载 cycript ,然后复制到 /opt 目录下;
  • 配置全局环境变量
    默认进入 cycript 环境,需要到/opt/cycript_0.9.594 目录下,输入 cycript 命令,如果进入 cycript 环境成功会显示 cy#

$$ cd /opt/cycript_0.9.594
$ cycript
cy#

我们肯定不希望这么麻烦,为了可以在任何路径下都可以进入 cycript 环境,我们需要配置全局环境变量。我们需要在.bash_profile里进行配置

$ vim ~/.bash_profile

然后在编辑页面输入如下代码

export CY=/opt/cycript_0.9.594/
export PATH=$CY:$PATH

保存文件,关闭.bash_profile

可能会遇到的问题:
dyld: Library not loaded: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib
  Referenced from: /Users/devzkn/Downloads/cycript_0.9.594/Cycript.lib/cycript-apl
  Reason: image not found

这个错误是因为电脑的ruby版本太高导致,那么我们需要给 ruby 降版本

  • 查看 ruby 版本

$ ruby -v

  • 关闭 SIP( System Integrity Protection )
    SIP 系统完整性保护,可以避免root用户随意更改Mac硬盘里面的文件。打开终端输入命令:csrutil status,它会显示开启还是关闭了,默认情况下是开启的所以要关闭。关闭步骤:
电脑重启按住 command+R,进入恢复模式
打开终端,输入csrutil disable,重启
如果想打开 SIP,重复上两步,命令改为 csrutil enable
  • 替换低版本 Ruby

$$ sudo mkdir -p /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/
$ sudo ln -s /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/libruby.2.3.0.dylib /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/libruby.2.0.0.dylib

四、Shell脚本

我们每次想要去连接 app 的界面都需要在终端输入如下命令

$ cycript -r 192.168.27.3 8888

这种重复的操作没什么意义,我们可以通过写 shell 脚本的方式进行简化,我们可以先打开终端进入 Desktop 目录,然后创建一个文件夹

$ mkdir TestShell

然后 cd 进入 TestShell 文件夹,创建 shell 脚本 login.sh

$ vim login.sh

在编辑页面输入如下代码

cycript -r 192.168.27.3 8888

保存并退出

接下来就是执行了,我们可以在 TestShell 文件夹下输入 sh login.sh 命令执行,但是每次都进入这个文件夹下执行会比较麻烦,为了可以在任何路径下都可执行,我们需要配置全局环境变量。我们需要在.bash_profile里进行配置

$ vim ~/.bash_profile

然后在编辑页面输入如下代码

#export CY=/opt/cycript_0.9.594/
export TESTSHELL=/Users/xipengfei/Desktop/TestShell
export PATH=$CY:$TESTSHELL:$PATH

保存文件,关闭.bash_profile
这样我们就可以在任何路径下通过执行脚本命令 sh login.sh 来连接 app 的界面了。

你可能感兴趣的:(iOS逆向工程 - 工具篇)