开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 14073|回复: 3
收起左侧

[IOS安全] iOS https(SSL/TLS)数据捕获

[复制链接]
结帖率:0% (0/1)
发表于 2021-5-7 14:32:37 | 显示全部楼层 |阅读模式   湖北省天门市
要捕获iPhone上的appstore的数据还真的没那么容易,以前介绍的那些使用代理手工导入证书的方法已经完全失效了,结果就是安装证书之后再打开appstore也无法正常的建立连接。按照我的分析其实是appstore在检测证书无效之后直接就没有发起任何的请求(可以通过wireshark抓包查看网络数据)
随之而来的是第二种方法,patch ssl证书校验函数,根据这个原理实现的有两个工具,一个是ssl kill switch,另外一个是trustme。原理都是一样的,并且也非常的简单,按照作者的说法是truestme实现的更底层一些。但是很不幸的是,结局是同样的悲哀的,在iOS6之后这个东西也是失效了。
其实我这里要说的方法也比较简单,如果阅读过上面两个工具的源代码(请自行搜索相关代码),并且理解mac os/iOS 下https实现的相关原理,那么也就自然的想到hook发送和接收函数的方法来捕获数据了。
需要关心的函数只有两个sslread和sslwrite:
  1. SSLRead
  2. Performs a normal application-level read operation.

  3. OSStatus SSLRead (
  4.    SSLContextRef context,
  5.    void *data,
  6.    size_t dataLength,
  7.    size_t *processed
  8. );
  9. Parameters
  10. context
  11. An SSL session context reference.
  12. data
  13. On return, points to the data read. You must allocate this buffer before calling the function. The size of this buffer must be equal to or greater than the value in the dataLength parameter.
  14. dataLength
  15. The amount of data you would like to read.
  16. processed
  17. On return, points to the number of bytes actually read.
复制代码
而需要关心的字段则就是那个data了,因而要想知道https数据的内容只要能够正常的获取到data字段的内容就行了,同样对于发送函数sslwrite也同样适用:
  1. SSLWrite
  2. Performs a normal application-level write operation.

  3. OSStatus SSLWrite (
  4.    SSLContextRef context,
  5.    const void *data,
  6.    size_t dataLength,
  7.    size_t *processed
  8. );
  9. Parameters
  10. context
  11. An SSL session context reference.
  12. data
  13. A pointer to the buffer of data to write.
  14. dataLength
  15. The amount, in bytes, of data to write.
  16. processed
  17. On return, the length, in bytes, of the data actually written.
复制代码
已经找到了要处理的api,那么剩下的就比较简单了,直接用越狱开发环境theos来创建一个tweak插件然后写入要实现的代码编译就行了。要实现hook仅需要如下的两行代码即可:
  1. MSHookFunction((void *)SSLWrite, (void *)_hook_SSLWrite, (void **)&_real_SSLWrite);
  2.   MSHookFunction((void *)SSLRead, (void *)_hook_SSLRead, (void **)&_real_SSLRead);
复制代码
这个可以参考ssl kill switch 的相关代码(其余的代码请自行实现)。剩下的就是编译和安装了。

如果不会写这个东西可以下载我已经编译好的一个deb,在ssh或者设备上的终端输入:
  1. wget http://code.h4ck.org.cn/ios-ssl-tls-hook/src/f54821c790451d9d25f8ed78cb80179166d47e2f/com.mars.sslohook_0.1-45_iphoneos-arm.deb?at=master

  2. dpkg -i com.mars.sslohook_0.1-45_iphoneos-arm.deb
复制代码
进行下载和安装。
如果要禁用这个插件请直接卸载即可,执行下面的命令:
  1. <blockquote>dpkg -r com.mars.sslohook
复制代码
依赖环境,如果要安装这个插件需要下面的两个东西:
MobileSubstrate (Should come with jailbroken devices)
dpkg (Install from Cydia)
如果木有的话,那就不要尝试了,设备木有越狱也不要尝试了(测试环境为iPod touch 和iPhone5 固件版本6.1.2)
如果没有安装dpkg可以通过cydia的自动安装来进行,用同步软件将deb放入相关的目录下安装即可。
安装之后执行killall -HUP SpringBoard来加载插件。
如果需要修改要hook的应用请编辑Library/MobileSubstrate/DynamicLibraries目录下的mars.plist

在mars.plist中添加要hook的应用即可。

捕获的数据大部分为明文,日志文件保存在/tmp/com.mars.sslhooklog.text,当然由于https同样支持gzip压缩所以有一部分数据是gzip压缩的内容,由于受到的数据可能会存在分片的问题,所以没有实现解压gzip的相关代码,这个可以根据上下文中的相关信息或者收到的数据长度对捕获到的十六进制数据进行转存和解压。
明文数据:

压缩数据:

至于怎么转存,那就各显神通吧,我也木有虾米好办法,数据分片好蛋疼的说。

当然啦,如果你有更好的工具或者实现方法欢迎分享~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 1好评 +1 精币 +2 收起 理由
xslyhk + 1 + 2 感谢分享,很给力!~

查看全部评分

结帖率:92% (12/13)
发表于 2021-5-11 16:52:15 | 显示全部楼层   广东省深圳市
就继续忽悠小白吧,这是macOS几的系统?截图文件还是2012年13年的?扒文章能不能搞点新鲜的
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 6 天

 楼主| 发表于 2021-5-7 18:02:28 | 显示全部楼层   湖北省天门市
红色女孩 发表于 2021-5-7 14:54
越狱后又工具的,不过还是安卓更方便一点

哈哈,多多交流
回复 支持 反对

使用道具 举报

结帖率:62% (8/13)
发表于 2021-5-7 14:54:49 | 显示全部楼层   江苏省宿迁市
越狱后又工具的,不过还是安卓更方便一点
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表