逆向工程的分析工具
进行iOS逆向工程的一个关键就是工具的使用,工欲善其事,必先利其器。
一、常用App安装以及环境配置
Alfred
Alfred 与系统自带的 Spotlight 类似,但是它比较强大。它除了有基本搜索和快速启动应用等功能外,真正强大之处在于用户可以根据自己的实际需要,自定义各种工作流。
这里就不细说了,想要深入了解的可移步:
5分钟上手Mac效率神器Alfred以及Alfred常用操作
Mac效率神器Alfred以及常用Workflowgotoshell
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 的界面了。