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

SSLRead
Performs a normal application-level read operation.

OSStatus SSLRead (
   SSLContextRef context,
   void *data,
   size_t dataLength,
   size_t *processed
);
Parameters
context
An SSL session context reference.
data
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.
dataLength
The amount of data you would like to read.
processed
On return, points to the number of bytes actually read.

而需要关心的字段则就是那个data了,因而要想知道https数据的内容只要能够正常的获取到data字段的内容就行了,同样对于发送函数sslwrite也同样适用:
代码:

SSLWrite
Performs a normal application-level write operation.

OSStatus SSLWrite (
   SSLContextRef context,
   const void *data,
   size_t dataLength,
   size_t *processed
);
Parameters
context
An SSL session context reference.
data
A pointer to the buffer of data to write.
dataLength
The amount, in bytes, of data to write.
processed
On return, the length, in bytes, of the data actually written.

已经找到了要处理的api,那么剩下的就比较简单了,直接用越狱开发环境theos来创建一个tweak插件然后写入要实现的代码编译就行了。要实现hook仅需要如下的两行代码即可:
代码:

MSHookFunction((void *)SSLWrite, (void *)_hook_SSLWrite, (void **)&_real_SSLWrite);
  MSHookFunction((void *)SSLRead, (void *)_hook_SSLRead, (void **)&_real_SSLRead);

这个可以参考ssl kill switch 的相关代码(其余的代码请自行实现)。剩下的就是编译和安装了。
如果不会写这个东西可以下载我已经编译好的一个deb,在ssh或者设备上的终端输入:
代码:

wget http://code.h4ck.org.cn/ios-ssl-tls-hook/src/f54821c790451d9d25f8ed78cb80179166d47e2f/com.mars.sslohook_0.1-45_iphoneos-arm.deb?at=master

dpkg -i com.mars.sslohook_0.1-45_iphoneos-arm.deb

进行下载和安装。
如果要禁用这个插件请直接卸载即可,执行下面的命令:
代码:

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的相关代码,这个可以根据上下文中的相关信息或者收到的数据长度对捕获到的十六进制数据进行转存和解压。
明文数据:

压缩数据:

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

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

iOS https(SSL/TLS)数据捕获的更多相关文章

  1. 简而意赅 HTTP HTTPS SSL TLS 之间有什么不同

    HTTP HTTPS SSL TLS 之间有什么不同? SSL是Secure Sockets Layer的缩写.SSL的作用是为网络上的两台机器或设备提供了一个安全的通道. TLS是SSL的一个新的名 ...

  2. HTTPS SSL TLS 相关理解

    1,在理解 HTTPS SSL TLS 之前先对常用的加密方式进行一个简述: (1),对称加密: 采用一个密钥,对明文进行加密生成密文,相反采用此密钥可对加密后的密文进行解密还原成明文. 代表算法有, ...

  3. 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) -- 学习

    在 ASP.NET MVC 中使用 HTTPS (SSL/TLS) IS 7如何实现http重定向https HTTPS 升级指南

  4. HTTPS(SSL/TLS) 原理之深入浅出

    注:本文参考自网络上的多篇HTTPS相关文章,本人根据自己的理解,进行一些修改,综合. 1. 必要的加密解密基础知识 1)对称加密算法:就是加密和解密使用同一个密钥的加密算法.因为加密方和解密方使用的 ...

  5. HTTPS SSL/TLS协议

    要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...

  6. [skill][https][ssl/tls] HTTPS相关知识汇总

    结论前置: A 身份验证 证书, 服务器证书 B 密钥协商 RSA   DHE / ECDHE   PSK C 加密通信 加密通信采用对称加密,使用B阶段协商出来的密钥. B 阶段如果使用 RSA 协 ...

  7. https ssl(tls)为什么不直接用公钥加密数据?

    很多人都提到了非对称加密速度慢,但这只是一个原因,但不是主要原因,甚至是微不足道的原因. SSL协议到3.0后就已经到头了,取而代之的是TLS,相较于SSL的"安全套接字层"的命名 ...

  8. 在 ASP.NET MVC 中使用 HTTPS (SSL/TLS)

    某些安全性较高的网页,如网上支付或用户登陆页面,可能会使用到https(SSL/TLS)来提高安全性.本文介绍了如何在ASP.NET MVC中强制某action使用https和如何进行向https页面 ...

  9. win10系统iis下部署搭建https (ssl/tls)本地测试环境

    有时想要把公司的某些XX项目部署成https站点,是为了在传输层加密传输,防止他人嗅探站点重要数据信息,平常我们使用的http方式都是明文方式传输的很不安全,容易被他人窃取.而有些时候要在本地搭建ht ...

随机推荐

  1. poj2074Line of Sight(直线相交)

    链接 几何细节题. 对于每一个障碍物可以求出它在地产线上的覆盖区间,如下图. 紫色部分即为每个障碍物所覆盖掉的区间,求出所有的,扫描一遍即可. 几个需要注意的地方:直线可能与地产线没有交点,可视区间可 ...

  2. poj 1144 Network(无向图求割顶数)

    题目链接:poj 1144 题意就是说有 n(标号为 1 ~ n)个网点连接成的一个网络,critical places 表示删去后使得图不连通的顶点,也就是割顶,求图中割顶的个数. 直接上大白书上的 ...

  3. 工作流学习——Activiti流程变量五步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46648139 ***************************************** ...

  4. 转!!MYSQL数据类型

    这篇文章主要介绍了MySQL数据类型和常用字段属性总结,本文总结了日期和时间数据类型.数值数据类型.字符串数据类型等,需要的朋友可以参考下     前言 好比C++中,定义int类型需要多少字节,定义 ...

  5. lftp

    linux安装FTP工具 lftp及使用教程 来源:网络 发布时间:2013-05-24 15:21 字体:[大  中  小] 点击2510次 linux下可以直接通过FTP命令进行ftp上传下载,不 ...

  6. STM8s在利用库配置端口的小问题

    在应用的时候PA2口需要设置成推挽输出,控制一个外部电源开关,端口初始化程序如下: GPIO_DeInit(GPIOA); GPIO_Init(GPIOA,GPIO_PIN_2,GPIO_MODE_O ...

  7. phalcon: 缓存片段,文件缓存,memcache缓存

    几种缓存,需要用到前端配置,加后端实例配合着用 片段缓存: public function indexAction() { //渲染页面 $this->view->setTemplateA ...

  8. phalcon: 过滤(Phalcon\Filter())

    过滤,就是清除不需要的数据,留下想要的数据. 其调用方法如下,一: $filter = new \Phalcon\Filter(); $filter->sanitize("some(o ...

  9. Linux 命令速查

    学生信,Linux是最最基本的技能,要尽量将自己的工作平台转移到Linux,编程写脚本,这样会极大的提升工作效率,找工作时也不会太怂.Linux所有的任务都是通过命令来完成的,具有高度的统一性.Lin ...

  10. toolbar

    toolbar= (Toolbar) findViewById(R.id.toolbar_mainactivity); // 设置主标题及其颜色 toolbar.setTitle("Andr ...