iOS端测试从0到1


0x00 测试环境搭建

越狱

工具环境

  • IPhone 7,固件版本为12.4.1

  • 爱思助手7.0官方最新版本

操作步骤

在进行越狱前,请先确保设备上的重要数据已经备份,比如通讯录等,因为越狱过程无法保证不出现问题,而一旦出现意外设备上的重要数据可能会丢失。

首先连接手机到PC电脑,在手机上弹出的允许设备访问中选择允许访问。

第二步,在爱思助手中选择一键越狱工具。工具箱-->一键越狱。

一键越狱.png

越狱工具选项.png

第三步,根据设备的固件版本选择越狱工具,推荐使用第一种越狱方法(unc0ver),笔者在测试过程当中就是用的这种方法,其余两种方法在测试过程中都没有成功,可能跟固件版本有关。

第四步,选择越狱方法,点击开始越狱按钮进行越狱工具安装,这一过程会自动在iphone设备上安装unc0ver app。由于app的设备证书是自签名证书,所以在app安装完成后需要在设备管理当中信任该证书才能继续后面的操作。

开始越狱.png

第五步,app安装完成并信任证书后,进入app页面,点击JailBreak进行越狱(这里由于笔者是已经越狱的设备,所以这里显示是Re-JailBreak)。正常越狱的过程应该是很顺滑的,如果在越狱过程当中出现越狱失败的提示,可以在爱思助手上选择安装不同版本的unc0ver app进行尝试,笔者在测试过程当中,最新版本无法完成设备的越狱,选择低版本的app后,越狱成功。

安装成功.PNG

unc0ver版本选择信息.png

第六步,越狱成功后,设备中会出现Cydia这个应用程序。通过Cydia可以安装第三方的app,这里笔者先安装最新版的frida server端到设备上。在cydia中添加frida源 https://build.frida.re,点击添加源进行添加。

Cydia添加frida源.PNG

添加完成后,在软件页面搜索frida进行安装。

frida安装.png

第七步,为了方便以后对iphone设备的管理过程,笔者通过Cydia安装了OpenSSH,安装完成后,会自动启动,并且可通过root/mobile和默认密码alpine登录。注意,安装完成后,修改root用户和mobile用户的默认密码。

ssh搜索结果.PNG

ssh登录并修改密码.png

第八步,验证Frida安装情况。frida安装完成后,会自动启动。验证是否安装成功,在命令行输入frida-ps -U,查看进程输出信息。

frida验证情况.png

出现上图类似的信息,证明安装成功,可以进行hook操作了。

0x01 实战APP流量解密

笔者这次需要测试的APP为一款采用了mpaas sdk加密的应用。在github搜索了相关的解密工具之后,笔者发现一款MpaasPentestTool,正好满足笔者需求(便捷的查看和修改请求包、返回包)。然而,当笔者使用该工具注入app进程后,进程会一段时间后结束运行退出。在经过一番实验之后,笔者确定app在检测到自身OC代码被hook之后,将会自动退出。

使用frida-hook会被检测到.png

请注意笔者这里的描述,是检测到自身OC代码被hook。这是因为笔者在尝试hook native库和系统OC库之后,程序并没有检测到,也没有退出。

hook_libsystem_c库.png

frida_hook_系统oc库.png

此时笔者大胆猜测,该APP只会检测自身OC代码是否被hook,自身native代码的检测情况这里先不管,因为跑MpaasPentestTool这个工具仅仅需要我们hook OC代码即可。接下来就是想尽办法进行绕过检测了,由于笔者IOS逆向水平处于入门水平,没有用IDA去看脱壳后的程序,分析哪里对frida hook进行了检测,这里笔者从frida hook代码编写上入手,看看能否从hook的地方绕过。

在google搜索和仔细查看了Frida官方的API文档后,笔者发现对OC代码进行hook有两者方式可以实现,一种是MpaasPentestTool采用的基于事件的方式,另一种是对函数直接进行替换。

函数替换形式Hook.png

基于事件通知的hook形式.png
在发现另一种hook方式之后,笔者将MpaasPentestTool原本的hook方式改为对函数直接进行替换的方式。结果出乎意料的是,竟然直接绕过了app对hook的检测。最终实现了MpaasPentestTool作者给出的效果。

最终效果1.png

最终效果2.png

0x01 绕过原理分析

app检测frida hook的原理其实是从Hook技术本身出发,检测hook的特征。通过Google学习,笔者了解到OC存在三种HOOK方式,分别是objc_msgSend、inline hook、imp替换hook。笔者分别查看这两种方式Hook前后,imp指针和函数头部指令的变化,确定这两种方式分别是哪种hook技术。

implementation实现技术分析.png

attach实现分析.png

头部指令详细信息查看代码.png

分别进行注入,查看输出,最后一窥究竟。

Attach实现方式其实是Inline Hook。

attach实现其实是inline_hook.png

attach实现其实是inline_hook2.png

Implement实现方式是替换IMP指针。

Implement实现是替换IMP指针.png

通过分析Hook技术的实现不同,可以大胆猜测,app检测自身是否被hook采用了检测imp指针指向函数的头部指令是否是ldr + br跳转,如果是则认为自身代码被hook,那么将会直接退出程序自身。

0x01 参考资料

评论

yougar0x00@公鸡队之家50

这个人很懒,没有留下任何介绍

twitter weibo github wechat

随机分类

软件安全 文章:17 篇
逻辑漏洞 文章:15 篇
Java安全 文章:34 篇
iOS安全 文章:36 篇
数据分析与机器学习 文章:12 篇

扫码关注公众号

WeChat Offical Account QRCode

最新评论

Yukong

🐮皮

H

HHHeey

好的,谢谢师傅的解答

Article_kelp

a类中的变量secret_class_var = "secret"是在merge

H

HHHeey

secret_var = 1 def test(): pass

H

hgsmonkey

tql!!!

目录