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

压缩数据:

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

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

最新文章

  1. 微信小程序初探
  2. apache限制同一ip大并发访问及下载
  3. OSX10.11 删除系统自带的软件
  4. 第03篇. 标准Web项目Jetty9内嵌API简单启动
  5. NaN属性,isNaN函数
  6. 不使用BeanUtils,利用Java反射机制:表单数据自动封装到JavaBean
  7. VShell破解版
  8. 使用file_get_content系列函数和使用curl系列函数采集图片的性能对比
  9. C#调用winhttp组件 POST登录迅雷
  10. iOS 计算两个坐标之间的距离
  11. [linux]使用curl进行GET、POST和网页调试
  12. Effective java ---遵守普遍接受的命名规则
  13. 浏览器支持webp格式
  14. 基于ajax 验证表单是否被占用----------------附:10.25日总结
  15. Shell脚本 | 性能测试之内存
  16. 单元测试UI
  17. JavaScript:RegExp 对象
  18. artificial%20intelligence%20a%20modern%20approach
  19. Ubuntu 的 desktop 和 server 还是有区别。
  20. Spring Web MVC 原理学习(下)

热门文章

  1. 搭建Mono for Android开发环境(用离线版)
  2. JavaWeb学习总结(十)--JDBC之MySQL大数据
  3. pkg-config问题:
  4. VI查找与替换
  5. 工作常用的linux/mysql/php/工具命令
  6. iOS设置app应用程序文件共享
  7. Js作用域链及变量作用域
  8. django 2
  9. python中字典dict的操作
  10. Android客户端向服务器端发送数据的流程(1)