概要:前段时间写了冲顶大会逆向分析的文章后,收到很多同学关于逆向学习的各种问题,所以最近计划出个简单的iOS逆向学习的系列教程,希望可以带领大家入坑,教程主要有三块内容(网络分析,静态分析,动态分析)

      在逆向过程中很多时候需要分析APP和Web端数据交互的内容那么最简单的方式即是抓包网络分析,这一节我们就介绍下Mac平台下如何抓包,如何对目标APP进行网络数据分析。

      首先常用的抓包软件有Charles,Tcpdump等,笔者安装使用的Charles。

iOS 逆向 抢订单 苹果逆向是什么意思_抓包

       Charles 是在 Mac 下常用的网络封包截取工具,在做 移动开发时,我们为了调试与服务器端的网络通讯协议,常常需要截取网络封包来分析。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。除了在做移动开发中调试端口外,Charles 也可以用于分析第三方应用的通讯协议。配合 Charles 的 SSL 功能,Charles 还可以分析 Https 协议。

       Charles 主要的功能包括:

  • 截取 Http 和 Https 网络封包。
  • 支持重发网络请求,方便后端调试。
  • 支持修改网络请求参数。
  • 支持网络请求的截获并动态修改。
  • 支持模拟慢速网络。

        Charles安装好后只需自己设置成代理服务器来完成封包的截取,设置也很简单选择菜单中的 “Proxy” –> “Mac OS X Proxy” 来将 Charles 设置成系统代理。如下所示:

iOS 逆向 抢订单 苹果逆向是什么意思_抓包_02

这样你就可以看到网络请求出现在 Charles 的界面中,包括你模拟器你的请求也会在这里,那么小伙伴会有疑问iPhone真机设备的网络数据包如何截取呢,也很简单只需将手机的代理服务器设置为电脑IP即可,如下操作

第一步:Charles 的菜单栏上选择 “Proxy”–>“Proxy Settings”,填入代理端口 8888,并且勾上 “Enable transparent HTTP proxying” 就完成了在 Charles 上的设置。

iOS 逆向 抢订单 苹果逆向是什么意思_网络请求_03

第二步:获取Charles 运行所在电脑的 IP 地址,Charles 的顶部菜单的 “Help”–>“Local IP Address”,即可在弹出的对话框中看到 IP 地址,如下图所示:

iOS 逆向 抢订单 苹果逆向是什么意思_网络请求_04

第三步:设置iPhone设备Http代理,在 iPhone 的 “ 设置 ”–>“ 无线局域网 ” 中,点击当前连接的 wifi 名,可以看到当前连接上的 wifi 的详细信息,在其最底部有「HTTP 代理」一项,点击后,然后填上 Charles 运行所在的电脑的 IP,以及端口号 8888,如下图所示:

iOS 逆向 抢订单 苹果逆向是什么意思_抓包_05

        至此所有电脑,模拟器,iOS真机设备所有的Http请求都已经可以通过上边的方法抓包分析获取Request和Respone等具体网络请求数据,可是Https的加密请求如何抓取呢?如果你需要截取分析 Https 协议相关的内容。那么需要安装 Charles 的 CA 证书。具体步骤如下。

第一步:我们需要在你要分析的设备上安装Charles证书。点击 Charles 的顶部菜单,选择 “Help” –> “SSL Proxying” ,–> “Install Charles Root Certificate”安装到Mac上抓取Mac产生的Https请求,Install Charles Root Certificate on a Mobile Device or Remote Browser”安装到iOS 真机设备抓取iOS设备产生的Https请求,如下图所示:

iOS 逆向 抢订单 苹果逆向是什么意思_App_06

第二步:Charles 的菜单栏上选择 “Proxy”–>“SSL Proxy Settings”添加需要抓取的域名,如下图所示:

iOS 逆向 抢订单 苹果逆向是什么意思_网络请求_07

        这样就可以分析目标App的所有网络请求,对其进行逆向数据分析,学习下优秀的API设计规范,根据抓包分析的数据格式,通过脚本语言或其他方式伪造网络请求修改数据。比如想自己写个新闻类App就可以抓黄易,某条分析其网络数据,笔者之前分析时记得黄易的接口设计要比某条的清晰明了,然后将就可以在自己的App中使用了。

       这里在补充下Charles不仅仅局限于分析目标App中使用,我们日常开发中加快开发效率也有很大帮助,比如在和接口组联调时,如果接口说你参数没传对,你不需print log逐步回溯代码看到底是不哪里参数传错了,只需要实时开启Charles把数据贴出来,啪啪啪的实力打脸接口组的童靴。另外Charles可以模拟慢速网络,修改网络请求内容,给服务端做压力测试,修改服务器返回数据,添加断点调试等各种强大的功能,感兴趣的同学可以自行学习相关使用方法。

      我在下一节中我将分享如何对目标App进行静态分析,反编译二进制代码查看关键业务函数,用于Hook,更多骚操作,尽在iOSTips。