首页
论坛
课程
招聘
[原创]iOS https(SSL/TLS)数据捕获
2013-8-19 16:34 43853

[原创]iOS https(SSL/TLS)数据捕获

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

压缩数据:

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

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

[注意] 招人!base上海,课程运营、市场多个坑位等你投递!

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (32)
雪    币: 1292
活跃值: 活跃值 (1189)
能力值: ( LV12,RANK:490 )
在线值:
发帖
回帖
粉丝
熊猫正正 活跃值 9 2013-8-19 17:23
2
0
好吧,你赢了~~学习
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-8-19 17:28
3
0
雪    币: 73
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
litvir 活跃值 2013-8-19 17:36
4
0
这个牛,刚好研究IOS
雪    币: 123
活跃值: 活跃值 (284)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
曹无咎 活跃值 1 2013-8-19 21:11
5
0
楼主威武啊,感谢
雪    币: 177
活跃值: 活跃值 (252)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 活跃值 4 2013-8-20 00:35
6
0
V5 V5 V5
雪    币: 6598
活跃值: 活跃值 (650)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
Sam.com 活跃值 2013-8-20 02:51
7
0
学习了~~ Appstore的数据还真的没那么容易拦截~~用一般代理都没办法打得开~~但用VPN可以~~曾想过在电脑上开个VPN服务~~然后再拦包不知道行不行
雪    币: 157
活跃值: 活跃值 (265)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 活跃值 4 2013-8-20 07:08
8
0
如果是为了破解或开发最好用ios5,当然,有的程序只支持6以上的。

一点小建议:
1、在Window下写个服务端,接收你hook到的数据,这样就可以实时查看了,免去来回倒日志文件的麻烦。
2、对于Gzip的处理,GZip magic标志0x8B1F,一般你数据包要是以它起始,就是Gzip了,你可以写个解压函数尝试自动解密。关于GZip格式的RFC文档:http://www.ietf.org/rfc/rfc1952.txt
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-8-20 09:26
9
0
建议不错,至于第一个嘛,有时间了实现下。第二个主要是数据分片的问题,有的gzip包不是一个数据包回来的,所以没有折腾这个东西。并且想把二进制的plist一块处理了,也是数据包重组的问题,感觉比较折腾,所以就没做。
雪    币: 113
活跃值: 活跃值 (89)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 活跃值 2013-8-20 10:31
10
0
膜拜楼主咯..............
雪    币: 6
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jocover 活跃值 2013-8-22 22:39
11
0
我自己做的CA证书+Charles可以啊
雪    币: 157
活跃值: 活跃值 (265)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 活跃值 4 2013-8-22 23:55
12
0
理论上时可行的,就是“中间人攻击”
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-8-23 14:13
13
0
球6.1.2下可以用的模拟过程~
雪    币: 57
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cquaker 活跃值 2013-8-23 22:13
14
0
ios-ssl-kill-switch前几天作了更新,现在已经可以在6.1.x版本下正常使用了。

https://github.com/iSECPartners/ios-ssl-kill-switch

v0.5: Complete rewrite in order to add support for proxy-ing Apple's App Store application.
v0.4: Added hooks for SecTrustEvaluate().
v0.3: Bug fixes and support for iOS 6.
雪    币: 6
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jocover 活跃值 2013-8-24 00:08
15
0


我本地生产一个CA证书和一个对应的P12证书,一个导入到iphone上去,一个导入到Charles里去,Charles开SSL Proxying 和Use Custom CA Certificate,就能读取ssl连接内容了,不过和appstore的数据还是读不了
上传的附件:
  • 1.jpg (56.92kb,207次下载)
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-8-24 12:20
16
0
说的就是appstore的数据,其余的东西本来就行的。另外楼上有人说 ssl kill switch更新了,可以配合这个试试
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linlinzhu 活跃值 2013-10-18 10:59
17
0
恭喜 教授!!!
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-10-18 11:04
18
0
漂guo,不用这么明显吧~
雪    币: 5726
活跃值: 活跃值 (358)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
NightGuard 活跃值 1 2013-10-18 13:56
19
0
楼主成教授了?
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2013-10-18 14:15
20
0
谣言,哈哈 。魔当真
雪    币: 9
活跃值: 活跃值 (15)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
kgxxx 活跃值 2014-2-13 20:51
21
0
师父,这个源码还在吗?发一份到我邮箱学习?还记得你的面试题写itunes抓包工具呢,师父V5
雪    币: 9
活跃值: 活跃值 (15)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
kgxxx 活跃值 2014-2-13 20:53
22
0
飘哥好哈!
雪    币: 0
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DQDQ 活跃值 2014-3-10 19:21
23
0
貌似信的ssl kill switch 实现是对SSLSetSessionOption()函数做的劫持
雪    币: 14259
活跃值: 活跃值 (1919)
能力值: ( LV15,RANK:880 )
在线值:
发帖
回帖
粉丝
obaby 活跃值 20 2014-3-10 22:33
24
0
最新版的已经可以了~
雪    币: 216
活跃值: 活跃值 (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lovecm 活跃值 2014-4-9 11:48
25
0
Fiddler2 这个软件可以拦到封包的呀!
游客
登录 | 注册 方可回帖
返回