网页抓取解密(解密浏览器SSL流量的教程,移动端可用的抓包工具)

优采云 发布时间: 2022-04-01 14:04

  网页抓取解密(解密浏览器SSL流量的教程,移动端可用的抓包工具)

  公司需要在移动端抓取经过SSL加密的HTTPS和WebSocket流量,使用WireShark中的Lua插件对私有协议进行解包统计。网上找到的大部分教程都是通过设置环境变量来解密浏览器SSL流量的教程。将浏览器握手过程中生成的ClientRandom和(Pre)MasterKey导出到Wireshark进行解密。很少涉及移动终端的SSL流量解密。通过对一些工具和OpenSSL的了解,有几种方法可以对移动端进行解密。SSL传输的流量记录在这里。

  搭建代理服务器,信任移动终端上的伪服务器或代理证书。代理作为伪客户端与服务器握手,作为伪服务器与客户端握手,同时需要解决Sni等问题。原理在 MitmProxy 文档中有详细描述。见,事实上,大多数移动终端可用的数据包捕获工具,如 Fiddler、Charles 等。以这种方式实现。以这种方式可用的工具是 SSLsplit 和 MitmProxy。这两个工具都可以在代理和真实服务器、代理和客户端之间的握手过程中将MasterKey导出到一个文件中,实现与浏览器流量相同的解密方法。其中MitmProxy地址:,SSLsplit地址:。

  对于您自己的移动应用程序,您可以在客户端调用 OpenSSL 握手时使用以下代码导出 ClientRandom 和 MasterKey:

  /* * Generates a NSS key log format compatible string containing the client

* random and the master key, intended to be used to decrypt externally

* captured network traffic using tools like Wireshark.

*

* Only supports the CLIENT_RANDOM method (SSL 3.0 - TLS 1.2).

*

* https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format

*/

char* ssl_ssl_masterkey_to_str(SSL *ssl)

{

char *str = NULL;

int rv;

unsigned char *k, *r;

#if OPENSSL_VERSION_NUMBER >= 0x10100000L

unsigned char kbuf[48], rbuf[32];

k = &kbuf[0];

r = &rbuf[0];

SSL_SESSION_get_master_key(SSL_get0_session(ssl), k, sizeof(kbuf));

SSL_get_client_random(ssl, r, sizeof(rbuf));

#else /* OPENSSL_VERSION_NUMBER < 0x10100000L */

k = ssl->session->master_key;

r = ssl->s3->client_random;

#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */

rv = asprintf(&str,

"CLIENT_RANDOM "

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

" "

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

"XXXXXXXX"

"\n",

r[ 0], r[ 1], r[ 2], r[ 3], r[ 4], r[ 5], r[ 6], r[ 7],

r[ 8], r[ 9], r[10], r[11], r[12], r[13], r[14], r[15626232261],

r[16], r[17], r[18], r[19], r[20], r[21], r[22], r[23],

r[24], r[25], r[26], r[27], r[28], r[29], r[30], r[31],

k[ 0], k[ 1], k[ 2], k[ 3], k[ 4], k[ 5], k[ 6], k[ 7],

k[ 8], k[ 9], k[10], k[11], k[12], k[13], k[14], k[15626232261],

k[16], k[17], k[18], k[19], k[20], k[21], k[22], k[23],

k[24], k[25], k[26], k[27], k[28], k[29], k[30], k[31],

k[32], k[33], k[34], k[35], k[36], k[37], k[38], k[39],

k[40], k[41], k[42], k[43], k[44], k[45], k[46], k[47]);

return (rv < 0) ? NULL : str;

}

  将其保存为文件并在 WireShark 中设置 SSLKEYLOGFILE。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线