逆向wireshark学习SSL协议算法(转)

小贴士:SSL协议的定义
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。
正文
前不久从网上得到一个https会话数据包文件https.pcap,用32位的wireshark打开(64位的会增加逆向难度,因为用到寄存器传递参数)
如图:

就这么多数据包,非常适合用来研究ssl协议的实现。 wireshark只要导入密钥是可以自动解密出明文的。
点开Edit菜单下的Preferences项,再点开左侧的Protocols里面的SSL,新建一个SSL解密任务。

确定之后,就可以看到明文数据了。 

原来的第24帧就多了一个http协议块,25帧也是如此,这就是wireshark的ssl解密功能。
那么它是怎么实现的呢?这需要调试才能搞清楚。
我调试的版本是Wireshark_win32_V1.12.4_setup.1427188207.exe 大小22.4 MB (23,588,136 bytes)
费了九牛二虎之力定位到了libwireshark.dll文件,所有的ssl加解密都是在这模块中实现的。
贴几张调试截图,这些断点都是比较关键的。






通过调试,终于知道了ssl解密的算法,写了个python脚本,实现了wireshark的ssl解密核心算法。
结果如图:

Default
|
1
2
3
4
5
6
7
8
9
10
11
12
|
-----BEGIN RSA PRIVATE KEY-----
MIIBywIBAAJhAMrZhFV8l+A5Qxoiatcn8MbUPvPUGEafGzdQSbIphD7p+Dsfl3OK
wnT19h9AHyHxkT5LZLsxtVo405jA3+0AsTkvCIlxHESzWeeXbGF/zHNPBuPpXCZH
YJG1L0YueUE9tQIDAQABAmB0DeSHYEQoNbqtXhmQRTqdFtt5dtP4u5i/mcDAHL6b
nBK4CMgGg9HjRsFseawWKHTyjKYQwbl+Xh/66VclzgxrAxw+GIsXGHp5OzIsxABM
Vo52ybJYVC6iotbs1GL/9AECMQDuvm3SPOfpnA4iSf7MRBjDSvdOQYv6cUw3kYKE
FKsY8y/X4JMGKkmwMCJcyEX5mrUCMQDZgux7RA4oadJTXlH5G6zD6266BC4Qbm+H
XD0X5T22X//W5OmjYITOYPg9dU3X9wECMQCnEe/8Xc7U9fYWHL4H5+eEUuO5ibkR
K1Pw1w0ErQoGzbe/VFLOz6z9dNG3KBd/0rkCMQCXWi353DJJ1tDe6Bv8TlCah+Gl
mLEBCAedVgbA8OhPVl+tBd65q7jd7sXt5glDxQECMGPaTUJkasmL/oHWpol6MdKQ
dntcO36IGfmwHw6H2TJLFpeozkoCUIj7+MWl4ZXaag==
-----END RSA PRIVATE KEY-----
|
大致脚本如下:
Default
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
import hashlib
import hmac
from Crypto.Cipher import AES
def calc_n_d(p,q):
...
return N,d
def calc_master_secret(pre_master_secret,hash_seed):
....
return master_secret
def key_expansion(master_secret,hash_seed):
....
return sess_keys
RSA_Encrypted_PreMaster_Secret=0x32b350bd547fcb7d916ee0264549d76c82e9a996f0a3787e077e77f2484ed82cc137a14e7816ef8ec7a509a882af0e8659c077e365519a706fb5324470a0a222e2d57ccf6d6b48350102651cce155ad76b2717dcf83e0dd60b5bef9f0a9d3870
p=0xeebe6dd23ce7e99c0e2249fecc4418c34af74e418bfa714c3791828414ab18f32fd7e093062a49b030225cc845f99ab5
q=0xd982ec7b440e2869d2535e51f91bacc3eb6eba042e106e6f875c3d17e53db65fffd6e4e9a36084ce60f83d754dd7f701
n,d=calc_n_d(p,q)
pre_master_secret =hex(pow(RSA_Encrypted_PreMaster_Secret, d, n)).rstrip("L")[-96:].decode('hex')
client_random=[0x4b,0x99,0x46,0xaf,0xd7,0x08,0x3c,0xa9,0x12,0xb1,0xd1,0x57,0x1c,0xfe,0x5c,0x37,0xdc,0xc2,0xa1,0xcc,0x5a,0x12,0x4d,0x38,0x95,0x76,0x79,0x06,0x89,0xfe,0xdd,0xf5]
server_random=[0x4b,0x99,0x46,0xaf,0xb1,0xb2,0x1c,0xb5,0xf2,0x30,0x88,0x70,0x4f,0xbe,0x6d,0xb5,0x62,0xde,0x5c,0xd1,0x64,0xec,0xd1,0x98,0x0e,0xc5,0x10,0x02,0x0c,0x30,0x28,0x69]
hash_seed='master secret'+''.join([ chr(n) for n in client_random])+''.join([ chr(n) for n in server_random])
master_secret = calc_master_secret(pre_master_secret,hash_seed)
hash_seed='key expansion'+''.join([ chr(n) for n in server_random])+''.join([ chr(n) for n in client_random])
sess_keys=key_expansion(master_secret,hash_seed)
.....
print 'Client_MAC_key: ' + Client_MAC_key.encode('hex')
print 'Server_MAC_key: ' + Server_MAC_key.encode('hex')
print 'Client_Write_key ' + Client_Write_key.encode('hex')
print 'Server_Write_key: ' + Server_Write_key.encode('hex')
print 'Client_Write_IV: ' + Client_Write_IV.encode('hex')
print 'Server_Write_IV: ' + Server_Write_IV.encode('hex')
_Server_Write_IV=''.join(map(chr,[0xe6,0x0b,0x07,0x2c,0x87,0x5c,0x97,0x36,0xa2,0x00, 0x6c,0x7c,0xfe,0x50,0x9d,0x33]))
Application_Data='f497d7d8bca3533967206fb9ba08b483082cbc48445b9bebf8db05bc7a10ea197bfe6a1381842169bba7e92e23c5380db9f0005d363732920044a61871fcd8bbcba468eb9e7a4cf009e8b3add198359873ea3892f898768ace4d3ca471a8e6a36ecd6fb907d35cf514224ce2494cb58a9c703ade20463c08845098664c92fc17a73614213b926eb17497b0220d8064c8b731767b00fa096a4dd43fb392cb48e14172f89e9104b44dc70ce68b383bc7f9'.decode('hex')
aes = AES.new(Server_Write_key, AES.MODE_CBC,_Server_Write_IV)
plain = aes.decrypt(Application_Data)
print '\n'+plain+'\n'
print plain.encode('hex')
|
上面的RSA_Encrypted_PreMaster_Secret、client_random、server_random、_Server_Write_IV、Application_Data都是用wireshark从https.pcap文件中抠出来的。
简单的科普一下,水平有限!
https://www.91ri.org/15396.html
逆向wireshark学习SSL协议算法(转)的更多相关文章
- wireshark分析ssl协议
1.什么是ssl SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种 ...
- RSA算法、SSL协议学习笔记
最近学习计算机网络,涉及到SSL协议,我想起了去年密码学课程讲过的非对称加密RSA算法,结合阮老师的博客,写写学习笔记,这里再回忆一下. RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指 ...
- 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议
node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...
- PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析
Python黑帽编程1.5 使用Wireshark练习网络协议分析 1.5.0.1 本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...
- TLS/SSL 协议 - ClientHello
ClientHello 在一次新的握手流程中,ClientHello消息总是第一条消息.这条消息将客户端的功能和首选项传送给服务器.客户端会在新建连接后,希望重新协商或者响应服务器发起的重新协商请求( ...
- 【转】SSL协议、SET协议、HTTPS简介
一.SSL协议简介 SSL是Secure Socket Layer的缩写,中文名为安全套接层协议层.使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客盗取您的用户名.密 ...
- SSL/TLS算法流程解析
SSL/TLS 早已不是陌生的词汇,然而其原理及细则却不是太容易记住.本文将试图通过一些简单图示呈现其流程原理,希望读者有所收获. 一.相关版本 Version Source Description ...
- 基于SSL协议的双向认证 - SSL协议 [1]
1 概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2 详细介绍 2.1 HTTPS HTTPS全称:Hypertext Transf ...
- SSL协议详解
背景介绍 最近在看<密码学与网络安全>相关的书籍,这篇文章主要详细介绍一下著名的网络安全协议SSL. 在开始SSl介绍之前,先给大家介绍几个密码学的概念和相关的知识. 1.密 ...
随机推荐
- java垃圾回收那点事(二)不同gc策略的heap分配
在前面的文章中曾提到了在java虚拟机启动的时候会对G1,CMS, SerialGC定义不同的heap的类,并且定义不同的policy. CollectorPolicy CollectorPolicy ...
- Linux实现字符设备驱动的基础步骤
Linux应用层想要操作kernel层的API,比方想操作相关GPIO或寄存器,能够通过写一个字符设备驱动来实现. 1.先在rootfs中的 /dev/ 下生成一个字符设备.注意主设备号 和 从设备号 ...
- sql连接错误(Microsoft SQL Server,错误:2)
昨天用SQL语句建表的时候写了一段代码,对于代码的逻辑和内容我不太肯定对不正确.反正是毫不犹豫的让它运行了,过程中出现好几个错误,当时没有太在意,想着大不了出错了再重写一个.结果--玩坏了,从昨天到如 ...
- jquery.ui.accordion的修改(支持展开多个)
原文:jquery.ui.accordion的修改(支持展开多个) 背景:原jquery.ui.accordion插件,最多只能展开一个,不能展开多个,后来在网上找到了一个基于它的一个修改版(http ...
- selenium让人摸不着头脑的问题
selenium让人摸不着头脑的问题 问题一 使用webdriver驱动firefox浏览器时如果不设置参数,默认使用的Firefox的profile和平时打开浏览器使用的firefox不一样,如果要 ...
- hdu5176(并查集)
传送门:The Experience of Love 题意:一个叫Gorwin的女孩和一个叫Vivin的男孩是一对情侣.他们来到一个叫爱情的国家,这个国家由N个城市组成而且只有N−1条小道(像一棵树) ...
- [Ext JS 4] 实战之 Picker 和 Picker Field
前言 所谓的picker , 就是弹出一个选择框,让你选择一些信息.比如选择日期, 选择颜色等: 选择的结果总是要放在一个地方的,Picker Field 就是用来放置选择结果的一个文本框. 在Ext ...
- 京东商城招聘自动调价系统架构师 T4级别
岗位级别:T4 岗位职责: 1.负责自动调价系统的架构设计 2.负责自动调价的预测.相关性算法设计 3.核心代码编写,代码review 任职要求: 1.熟悉数据挖掘.机器学习理论和算法 2.熟悉海量数 ...
- 类似于qq联系人的tablview能够展开和收缩
在.h文件中定义三个数组和一个tablview UITableView *listTable; NSMutableArray *listArray; NSMutableArray *p ...
- HDU 1241 :Oil Deposits
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...