iOS逆向时,我们通常会借助hook的方法来查看某个阶段函数参数或类成员变量的值,从而帮助我们确定关键call及算法还原时验证是否正确。
我们使用hook时,会将要查看的寄存器的值保存到文本、弹窗显示或者打印log输出到终端及重定向到文本中。
这里将介绍当通过打印log获取函数参数值时,如果在终端查看log。
iOS版本 < 10时
在越狱的iPhone手机中,可以直接在cydia中搜索Syslogd to /var/log/syslog 并安装,如果没有找到Syslogd to /var/log/syslog时,则先在源中添加 http://apt.saurik.com 源后,再尝试搜索试试。
安装完Syslogd to /var/log/syslog 后,当我们再hook iOS应用函数时,则可以在/var/log/syslog中查看我们打印出的日志消息,或者也可以通过Xcode -> Window -> Devices and Simulators -> View Devices Logs 查看对应设备的日志,在搜索框中通过关键词过滤出相应日志。
iOS版本 >= 10时
当iOS版本大于等于10时,则我们hook函数后打印日志无法通过syslog再进行查看,因此需要通过其他方式查看我们打印出的日志。
使用libimobiledevice程序进行查看,在使用之前需要先下载安装libimobiledevice到mac中。
下载libimobiledevice
git clone https://github.com/libimobiledevice/libimobiledevice.git
下载完以后,准备编译libimobiledevice,在开始编译之前使用以下命令先查看requirements中的gnutls是否已经安装,如果未安装,则先安装,否则编译会报错。
brew search gnutls #查看是否已经安装
已经安装时,则如下图所示,在安装包旁边会有一个绿色小钩
未安装gnutls时,则通过以下命令安装gnutls及libgcrypt
brew install gnutls
brew install libgcrypt
安装完以后,进入libimobiledevice工程目录中,使用以下命令编译工程
./autogen.sh --disable-openssl
make && make install
编译成功后,将iPhone手机连接到mac后,在终端中使用以下命令查看libimobiledevice是否安装成功
idevicesyslog #如果执行该命令后,开始打印日志则说明安装成功
通过grep过滤关键词,即可查看到我们hook后打印出的日志,如下图所示
idevicesyslog | grep "SpringBoard is hooked"
附上log输出格式
更多Android、iOS逆向干货,请关注微信公众号 网络安全技术点滴分享