iOS APP的提取
在iOS平台上,所有的App只能由 App Store发布,并且所有App的代码都被苹果加密了。如果我们连接上越狱后的设备,找到对应的App就可以看到App中存在名为sinf的文件,这个文件中所存储的就是这个App的购买信息,iOS系统中使用这个信息与用户登录信息判断是否进行解密,并在fairplayd中实现解密,然而如果我们用分析工具查看fairpalyd却可以看到,整个程序进行了非常严重的混淆,想要静态逆向成本相当的高。静态逆向不行,那我们就要想别的方法,这里我们有两个思路,在接下来的文章中我会逐一介绍它们。
1.1Frida-iOS-Dump
这个工具是基于著名的动态分析工具frida实现的,我们需要先在电脑上安装usbmuxd,frida,然后将越狱的设备用usb连接到mac电脑上。
在电脑上输入如下代码:
iproxy 2222 22
python dump.py -l
python dump.py dump_app_name
就可以进行脱壳了。
1.2 Flexdecrypt
既然iOS手机会解密App的代码,那么我们可不可以通过调用iOS的解密函数解密代码呢?这个工具就是以此为思路提出的。原理是通过将加密代码加载到内存中调用iOS的解密函数mremap_encrypted对指定macho文件进行解密。对于这个程序我们只需要将他编译粘贴到越狱手机上就可以进行脱壳了,值得一提的是,这个工具在m1上也能对iOS App进行脱壳(当然是能执行起来的)。
iOS https抓包
在脱壳完成之后如果我们希望分析iOS App的请求,这里我们需要解决两个问题,一个是https代理证书的问题,另一个是ssl pining证书绑定的问题。
2.1 代理配置
这里我们使用Burpsuite进行抓包,通过将手机代理设置为Burpsuite端口,然后通过浏览器访问端口下载安装证书,我们就可以抓包https请求了。
2.2 SSL Pining绕过
然而到这里我们会发现有的App仍然无法访问https,这是因为有的App检测了SSL Pining,我们的证书仍然无法被信任。我们这里可以将SSL Kill Switch工具安装到越狱手机上,这样就关闭掉SSL Pining了。
分析
做了这么多准备,我们接下来就可以真正分析App了。
3.1 Frida分析
最省事的方法是我们直接在手机上安装frida服务器,然后通过usb或者启动服务器监听0.0.0.0:8888端口对app进行Hook,当然,这种分析方式难以分析Webview的html5,也同样难以调试app。
3.2 IIdb调试
如果我们直接lldb attach到对应的app我们会发现attach失败,这是因为在app中的entitlements没有设置get-task-allow为true。我们使用codesign设置脱壳后的app该属性为true,就可以使用lldb调试了。
3.3 Webview调试
对于html5如果我们使用lldb调试,会十分麻烦,好在iOS提供了调试Webview的方法,我们只需要同样设置get-task-allow然后再手机中开启javascript调试,就可以在电脑的Safari中调试手机页面了,或者我们可以使用另一种方法,安装GlobalWebInspect插件,开启全局Webview调试。
原文始发于微信公众号(联想全球安全实验室):iOS APP 逆向分析方法详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论