小贴士: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都是用wiresharkhttps.pcap文件中抠出来的。
简单的科普一下,水平有限!

https://www.91ri.org/15396.html

转载于:https://www.cnblogs.com/softidea/p/5268880.html

逆向wireshark学习SSL协议算法(转)相关推荐

  1. Wireshark分析SSL协议

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  2. TLS/SSL协议 RC4算法安全漏洞CVE-2013-2566

    ** 漏洞描述 TLS协议和SSL协议中使用的的RC4算法中存在漏洞,该漏洞源于使用大量的单字节偏差.通过在使用相同明文的大量会话中密文的统计分析,远程攻击者利用该漏洞进行明文恢复攻击 ** 修复方案 ...

  3. 深入学习http协议(转)

    http://www.blogjava.net/zjusuyong/articles/304788.html转载来的,没看到原文地址. http协议学习系列 1. 基础概念篇 1.1 介绍   HTT ...

  4. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  5. 如何通过抓包实战来学习Web协议?

    我发现大部分技术人,多多少少都会遇到下面的困惑,比如: AJAX 跨域访问时总被浏览器的同源策略阻止,其背后的原理及符合其设计思想的解决方案是什么? 缓存可以提升性能,但什么样的 HTTP 消息才会被 ...

  6. SSL协议密钥交换过程理解

    SSL协议 一.SSL 1 为什么需要SSL? 2 名词解释 3 使用SSL作为Web服务的传输协议(Https) 二.密匙交换过程 三.SSLVPN 1 为什么需要SSL 2 SSLVPN.IPse ...

  7. 通过openssl学习ssl证书。

    通过抓包学习ssl:https://www.cnblogs.com/xiaxveliang/p/13183175.html 通过openssl学习ssl:http://3ms.huawei.com/k ...

  8. 一文教你了解SSL协议

    什么是SSL 简称是SSL,全称Secure Sockets Layer 安全套接字协议,一般我们在学习 SSL 的时候,都会和 TLS一起来学习的,为什么呢?因为 SSL 和 TLS 都是为网络通信 ...

  9. 密码学专题 SSL协议

    SSL协议为不同的高层协议(http.FTP)提供安全服务 SSL握手协议.SSL修改密文协议和SSL告警协议的目的是为了 管理 和SSL相关的密文交换 连接:两台主机之间提供特定类型的数据传输,是点 ...

最新文章

  1. 丢弃Transformer,FCN也可以实现E2E检测
  2. .net简单算法实现无限级分类(一)
  3. FreeTextBox 3.1.6 的实践总结
  4. 中国再生金属行业发展前景及投资策略研究报告2021版
  5. Mybatis配置文件注释
  6. Error: Could not find or load main class org.elasticsearch.tools.JavaVersionChecker
  7. 5W2H分析法,哪哪儿都能用到的方法,人生也可以套路进来
  8. python基础知识大一总结与反思_Python第一课教学设计及反思
  9. mysql官网下载页面
  10. Windows消息钩子[键盘监控]
  11. 王阳明让你内心强大的100句名言
  12. kafka消费者报错:Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
  13. 频繁默认网关不可用_Win10经常断网提示默认网关不可用的解决方法
  14. 新手前端程序员就职指南之 - 入职第一天
  15. Datawhale组队学习NLP之transformer Task 01
  16. Vue-DataV 数据可视化工具
  17. 【翻译】CEDEC2014[跨越我的尸体2]跨越Stylized Rendering
  18. 生产系统执行下线操作--泪奔
  19. Coursera 机器学习 -- 逻辑回归 笔记 【第二周】
  20. 基于S7-200 PLC和MCGS组态的水箱水位控制系统设计 组态王动画仿真,带PLC源代码,plc程序每一条都带着解释

热门文章

  1. powerdesigner 导出word
  2. 太牛了!3年Android开发工程师面试经验分享,跳槽薪资翻倍
  3. 2021计算机行业还有前途吗?从业十二年的程序员告诉你优缺!
  4. 如何去除QTableWidget表格选中Item时的虚线框?
  5. 【无标题】我哈哈哈哈家
  6. 计算机文件夹不在桌面显示,为什么我的电脑桌面上的有个文件夹里的文件突然不见了呢...
  7. Android 解决华为虚拟键冲突遮挡底部按钮
  8. Systemverilog覆盖率的合并和计算方式
  9. 开通企业邮箱多少钱?企业邮箱怎么注册申请?
  10. 考计算机等级证真的很难吗?