diff --git a/.gitignore b/.gitignore index 87ce42d81..f24438885 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ kern/bpf/x86/vmlinux.h bin/* /.check* +/deps/* diff --git a/Makefile b/Makefile index 341410958..8fda2d9fa 100644 --- a/Makefile +++ b/Makefile @@ -187,11 +187,8 @@ BPF_NOCORE_TAG = $(subst .,_,$(KERN_RELEASE)).$(subst .,_,$(VERSION)) # BPF Source file # -TARGETS := kern/openssl_1.1.1a -TARGETS += kern/openssl_1.1.1b-c -TARGETS += kern/openssl_1.1.1d-i -TARGETS += kern/openssl_1.1.1j-q -TARGETS += kern/boringssl_1.1.1 +TARGETS := $(foreach var,$(shell echo {a..r}),kern/openssl_1_1_1$(var)) +TARGETS += kern/boringssl_1_1_1 TARGETS += kern/bash TARGETS += kern/gnutls TARGETS += kern/nspr diff --git a/kern/boringssl_1.1.1_kern.c b/kern/boringssl_1_1_1_kern.c similarity index 99% rename from kern/boringssl_1.1.1_kern.c rename to kern/boringssl_1_1_1_kern.c index e536b2412..c85fc5e4f 100644 --- a/kern/boringssl_1.1.1_kern.c +++ b/kern/boringssl_1_1_1_kern.c @@ -94,8 +94,7 @@ // ssl->exporter_master_secret 在 ssl_st 中的偏移量 #define SSL_ST_EXPORTER_MASTER_SECRET 0x3BC // 956 +#endif + #include "openssl.h" #include "boringssl_masterkey.h" - - -#endif \ No newline at end of file diff --git a/kern/openssl_1.1.1j-q_kern.c b/kern/openssl_1.1.1j-q_kern.c deleted file mode 100644 index 5aa1f44c0..000000000 --- a/kern/openssl_1.1.1j-q_kern.c +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef ECAPTURE_OPENSSL_1_1_1_J_Q_H -#define ECAPTURE_OPENSSL_1_1_1_J_Q_H - -/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1j 16 Feb 2021, OPENSSL_VERSION_NUMBER:269488303 */ - -// ssl->version 在 ssl_st 结构体中的偏移量 -#define SSL_ST_VERSION 0x0 - -// ssl->session 在 ssl_st 结构中的偏移量 -#define SSL_ST_SESSION 0x510 - -// ssl->s3 在 ssl_st中的偏移量 -#define SSL_ST_S3 0xa8 - -// session->master_key 在 SSL_SESSION 中的偏移量 -#define SSL_SESSION_ST_MASTER_KEY 0x50 - -// s3->client_random 在 ssl3_state_st 中的偏移量 -#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 - -// session->cipher 在 SSL_SESSION 中的偏移量 -#define SSL_SESSION_ST_CIPHER 0x1f0 - -// session->cipher_id 在 SSL_SESSION 中的偏移量 -#define SSL_SESSION_ST_CIPHER_ID 0x1f8 - -// cipher->id 在 ssl_cipher_st 中的偏移量 -#define SSL_CIPHER_ST_ID 0x18 - -// ssl->handshake_secret 在 ssl_st 中的偏移量 -#define SSL_ST_HANDSHAKE_SECRET 0x17c - -// ssl->master_secret 在 ssl_st 中的偏移量 -#define SSL_ST_MASTER_SECRET 0x1bc - -// ssl->server_finished_hash 在 ssl_st 中的偏移量 -#define SSL_ST_SERVER_FINISHED_HASH 0x2bc - -// ssl->handshake_traffic_hash 在 ssl_st 中的偏移量 -#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc - -// ssl->exporter_master_secret 在 ssl_st 中的偏移量 -#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc - -#endif - -#include "openssl.h" -#include "openssl_masterkey.h" \ No newline at end of file diff --git a/kern/openssl_1.1.1a_kern.c b/kern/openssl_1_1_1a_kern.c similarity index 53% rename from kern/openssl_1.1.1a_kern.c rename to kern/openssl_1_1_1a_kern.c index 98cab995f..d4e2fb710 100644 --- a/kern/openssl_1.1.1a_kern.c +++ b/kern/openssl_1_1_1a_kern.c @@ -1,22 +1,49 @@ -#ifndef ECAPTURE_OPENSSL_1_1_1_A_H -#define ECAPTURE_OPENSSL_1_1_1_A_H +#ifndef ECAPTURE_OPENSSL_1_1_1_A_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_A_KERN_H -/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1a 20 Nov 2018, OPENSSL_VERSION_NUMBER:269488159 */ +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1a 20 Nov 2018, OPENSSL_VERSION_NUMBER: 269488159 */ + +// ssl_st->version #define SSL_ST_VERSION 0x0 + +// ssl_st->session #define SSL_ST_SESSION 0x510 + +// ssl_st->s3 #define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key #define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random #define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher #define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id #define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id #define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret #define SSL_ST_HANDSHAKE_SECRET 0x174 + +// ssl_st->master_secret #define SSL_ST_MASTER_SECRET 0x1b4 + +// ssl_st->server_finished_hash #define SSL_ST_SERVER_FINISHED_HASH 0x2b4 + +// ssl_st->handshake_traffic_hash #define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2f4 + +// ssl_st->exporter_master_secret #define SSL_ST_EXPORTER_MASTER_SECRET 0x3b4 +#include "openssl.h" +#include "openssl_masterkey.h" + #endif -#include "openssl.h" -#include "openssl_masterkey.h" \ No newline at end of file diff --git a/kern/openssl_1.1.1b-c_kern.c b/kern/openssl_1_1_1b_kern.c similarity index 53% rename from kern/openssl_1.1.1b-c_kern.c rename to kern/openssl_1_1_1b_kern.c index f51a84e30..48eb563ce 100644 --- a/kern/openssl_1.1.1b-c_kern.c +++ b/kern/openssl_1_1_1b_kern.c @@ -1,22 +1,49 @@ -#ifndef ECAPTURE_OPENSSL_1_1_1_B_C_H -#define ECAPTURE_OPENSSL_1_1_1_B_C_H +#ifndef ECAPTURE_OPENSSL_1_1_1_B_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_B_KERN_H -/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1b 26 Feb 2019, OPENSSL_VERSION_NUMBER:269488175 */ +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1b 26 Feb 2019, OPENSSL_VERSION_NUMBER: 269488175 */ + +// ssl_st->version #define SSL_ST_VERSION 0x0 + +// ssl_st->session #define SSL_ST_SESSION 0x508 + +// ssl_st->s3 #define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key #define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random #define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher #define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id #define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id #define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret #define SSL_ST_HANDSHAKE_SECRET 0x174 + +// ssl_st->master_secret #define SSL_ST_MASTER_SECRET 0x1b4 + +// ssl_st->server_finished_hash #define SSL_ST_SERVER_FINISHED_HASH 0x2b4 + +// ssl_st->handshake_traffic_hash #define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2f4 + +// ssl_st->exporter_master_secret #define SSL_ST_EXPORTER_MASTER_SECRET 0x3b4 +#include "openssl.h" +#include "openssl_masterkey.h" + #endif -#include "openssl.h" -#include "openssl_masterkey.h" \ No newline at end of file diff --git a/kern/openssl_1_1_1c_kern.c b/kern/openssl_1_1_1c_kern.c new file mode 100644 index 000000000..c216fd8bb --- /dev/null +++ b/kern/openssl_1_1_1c_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_C_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_C_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1c 28 May 2019, OPENSSL_VERSION_NUMBER: 269488191 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x508 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x174 + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1b4 + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2b4 + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2f4 + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3b4 + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1.1.1d-i_kern.c b/kern/openssl_1_1_1d_kern.c similarity index 53% rename from kern/openssl_1.1.1d-i_kern.c rename to kern/openssl_1_1_1d_kern.c index 12bdb03fa..0acb2cd25 100644 --- a/kern/openssl_1.1.1d-i_kern.c +++ b/kern/openssl_1_1_1d_kern.c @@ -1,22 +1,49 @@ -#ifndef ECAPTURE_OPENSSL_1_1_1_D_I_H -#define ECAPTURE_OPENSSL_1_1_1_D_I_H +#ifndef ECAPTURE_OPENSSL_1_1_1_D_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_D_KERN_H -/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1d 10 Sep 2019, OPENSSL_VERSION_NUMBER:269488207 */ +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1d 10 Sep 2019, OPENSSL_VERSION_NUMBER: 269488207 */ + +// ssl_st->version #define SSL_ST_VERSION 0x0 + +// ssl_st->session #define SSL_ST_SESSION 0x510 + +// ssl_st->s3 #define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key #define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random #define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher #define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id #define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id #define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret #define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret #define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash #define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash #define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret #define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc +#include "openssl.h" +#include "openssl_masterkey.h" + #endif -#include "openssl.h" -#include "openssl_masterkey.h" \ No newline at end of file diff --git a/kern/openssl_1_1_1e_kern.c b/kern/openssl_1_1_1e_kern.c new file mode 100644 index 000000000..3afbe377b --- /dev/null +++ b/kern/openssl_1_1_1e_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_E_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_E_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1e 17 Mar 2020, OPENSSL_VERSION_NUMBER: 269488223 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1f_kern.c b/kern/openssl_1_1_1f_kern.c new file mode 100644 index 000000000..1b8d51441 --- /dev/null +++ b/kern/openssl_1_1_1f_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_F_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_F_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1f 31 Mar 2020, OPENSSL_VERSION_NUMBER: 269488239 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1g_kern.c b/kern/openssl_1_1_1g_kern.c new file mode 100644 index 000000000..f2ed138a0 --- /dev/null +++ b/kern/openssl_1_1_1g_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_G_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_G_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1g 21 Apr 2020, OPENSSL_VERSION_NUMBER: 269488255 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1h_kern.c b/kern/openssl_1_1_1h_kern.c new file mode 100644 index 000000000..f52553572 --- /dev/null +++ b/kern/openssl_1_1_1h_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_H_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_H_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1h 22 Sep 2020, OPENSSL_VERSION_NUMBER: 269488271 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1i_kern.c b/kern/openssl_1_1_1i_kern.c new file mode 100644 index 000000000..9a03158c5 --- /dev/null +++ b/kern/openssl_1_1_1i_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_I_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_I_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1i 8 Dec 2020, OPENSSL_VERSION_NUMBER: 269488287 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f8 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x200 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1j_kern.c b/kern/openssl_1_1_1j_kern.c new file mode 100644 index 000000000..fdad2df52 --- /dev/null +++ b/kern/openssl_1_1_1j_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_J_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_J_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1j 16 Feb 2021, OPENSSL_VERSION_NUMBER: 269488303 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1k_kern.c b/kern/openssl_1_1_1k_kern.c new file mode 100644 index 000000000..74ab50ac3 --- /dev/null +++ b/kern/openssl_1_1_1k_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_K_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_K_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1k 25 Mar 2021, OPENSSL_VERSION_NUMBER: 269488319 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1l_kern.c b/kern/openssl_1_1_1l_kern.c new file mode 100644 index 000000000..948190c37 --- /dev/null +++ b/kern/openssl_1_1_1l_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_L_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_L_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1l 24 Aug 2021, OPENSSL_VERSION_NUMBER: 269488335 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1m_kern.c b/kern/openssl_1_1_1m_kern.c new file mode 100644 index 000000000..6094fb6a1 --- /dev/null +++ b/kern/openssl_1_1_1m_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_M_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_M_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1m 14 Dec 2021, OPENSSL_VERSION_NUMBER: 269488351 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1n_kern.c b/kern/openssl_1_1_1n_kern.c new file mode 100644 index 000000000..93dee5dec --- /dev/null +++ b/kern/openssl_1_1_1n_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_N_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_N_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1n 15 Mar 2022, OPENSSL_VERSION_NUMBER: 269488367 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1o_kern.c b/kern/openssl_1_1_1o_kern.c new file mode 100644 index 000000000..2a5f8dea1 --- /dev/null +++ b/kern/openssl_1_1_1o_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_O_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_O_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1o 3 May 2022, OPENSSL_VERSION_NUMBER: 269488383 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1p_kern.c b/kern/openssl_1_1_1p_kern.c new file mode 100644 index 000000000..2ea08ff8f --- /dev/null +++ b/kern/openssl_1_1_1p_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_P_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_P_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1p 21 Jun 2022, OPENSSL_VERSION_NUMBER: 269488399 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1q_kern.c b/kern/openssl_1_1_1q_kern.c new file mode 100644 index 000000000..9a11d5439 --- /dev/null +++ b/kern/openssl_1_1_1q_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_Q_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_Q_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1q 5 Jul 2022, OPENSSL_VERSION_NUMBER: 269488415 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/kern/openssl_1_1_1r_kern.c b/kern/openssl_1_1_1r_kern.c new file mode 100644 index 000000000..78da6bf8d --- /dev/null +++ b/kern/openssl_1_1_1r_kern.c @@ -0,0 +1,49 @@ +#ifndef ECAPTURE_OPENSSL_1_1_1_R_KERN_H +#define ECAPTURE_OPENSSL_1_1_1_R_KERN_H + +/* OPENSSL_VERSION_TEXT: OpenSSL 1.1.1r 11 Oct 2022, OPENSSL_VERSION_NUMBER: 269488431 */ + +// ssl_st->version +#define SSL_ST_VERSION 0x0 + +// ssl_st->session +#define SSL_ST_SESSION 0x510 + +// ssl_st->s3 +#define SSL_ST_S3 0xa8 + +// ssl_session_st->master_key +#define SSL_SESSION_ST_MASTER_KEY 0x50 + +// ssl3_state_st->client_random +#define SSL3_STATE_ST_CLIENT_RANDOM 0xb8 + +// ssl_session_st->cipher +#define SSL_SESSION_ST_CIPHER 0x1f0 + +// ssl_session_st->cipher_id +#define SSL_SESSION_ST_CIPHER_ID 0x1f8 + +// ssl_cipher_st->id +#define SSL_CIPHER_ST_ID 0x18 + +// ssl_st->handshake_secret +#define SSL_ST_HANDSHAKE_SECRET 0x17c + +// ssl_st->master_secret +#define SSL_ST_MASTER_SECRET 0x1bc + +// ssl_st->server_finished_hash +#define SSL_ST_SERVER_FINISHED_HASH 0x2bc + +// ssl_st->handshake_traffic_hash +#define SSL_ST_HANDSHAKE_TRAFFIC_HASH 0x2fc + +// ssl_st->exporter_master_secret +#define SSL_ST_EXPORTER_MASTER_SECRET 0x3bc + +#include "openssl.h" +#include "openssl_masterkey.h" + +#endif + diff --git a/script/openssl_1.1.1_offset.c b/script/openssl_1.1.1_offset.c deleted file mode 100644 index c107a4361..000000000 --- a/script/openssl_1.1.1_offset.c +++ /dev/null @@ -1,33 +0,0 @@ -// clang -I include/ -I . offset.c -o off - -#include -#include -#include -#include - -#define SSL_STRUCT_OFFSETS \ - X(ssl_st, version) \ - X(ssl_st, session) \ - X(ssl_st, s3) \ - X(ssl_session_st, master_key) \ - X(ssl3_state_st, client_random) \ - X(ssl_session_st, cipher) \ - X(ssl_session_st, cipher_id) \ - X(ssl_cipher_st, id) \ - X(ssl_st, handshake_secret) \ - X(ssl_st, master_secret) \ - X(ssl_st, server_finished_hash) \ - X(ssl_st, handshake_traffic_hash) \ - X(ssl_st, exporter_master_secret) - -int main() { - printf("/* OPENSSL_VERSION_TEXT: %s, OPENSSL_VERSION_NUMBER:%ld */\n", - OPENSSL_VERSION_TEXT, OPENSSL_VERSION_NUMBER); - -#define X(struct_name, field_name) \ - printf("// "#struct_name"->"#field_name" \n#define " #struct_name "_" #field_name " 0x%lx\n", \ - offsetof(struct struct_name, field_name)); - SSL_STRUCT_OFFSETS -#undef X - return 0; -} \ No newline at end of file diff --git a/script/openssl_offset.sh b/script/openssl_offset.sh deleted file mode 100644 index 3d60e7460..000000000 --- a/script/openssl_offset.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env bash - -# shellcheck disable=SC2164 -cd ~ -git clone https://github.com/openssl/openssl.git -git checkout -b OpenSSL_1_1_1-stable origin/OpenSSL_1_1_1-stable -# create include/openssl/opensslconf.h -./config -make - -# cp openssl_1.1.1_offset.c to openssl directory. -cp openssl_offset.c ~/openssl/ -# create offset.h -# in OpenSSL_1_1_1* , tag a to d, use ssl/ssl_locl.h ,not ssl/ssl_local.h . -# so ,need to modify filename by yourself. -#for tag in "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" -for tag in "a" "b" "c" "d" -do -git checkout OpenSSL_1_1_1$tag -date -tag_name=`git describe --tags --abbrev=0` -echo $tag_name -clang -I include/ -I . offset.c -o openssl_offset -./openssl_offset > $tag_name.h -done \ No newline at end of file diff --git a/user/module/const.go b/user/module/const.go index 951ebe7c2..1119e52ae 100644 --- a/user/module/const.go +++ b/user/module/const.go @@ -16,6 +16,11 @@ const ( MODULE_NAME_NSPR = "EBPFProbeNSPR" MODULE_NAME_GOSSL = "EBPFProbeGoSSL" ) + const ( BASH_ERRNO_DEFAULT int = 128 ) + +const ( + MaxSupportedOpenSSL111Version = 'r' +) diff --git a/user/module/probe_openssl.go b/user/module/probe_openssl.go index a718a58dd..fc96fbd5d 100644 --- a/user/module/probe_openssl.go +++ b/user/module/probe_openssl.go @@ -519,7 +519,6 @@ func (this *MOpenSSLProbe) saveMasterSecret(secretEvent *event.MasterSecretEvent case event.TLS1_2_VERSION: b = bytes.NewBufferString(fmt.Sprintf("%s %02x %02x\n", hkdf.KeyLogLabelTLS12, secretEvent.ClientRandom, secretEvent.MasterKey)) case event.TLS1_3_VERSION: - // secretEvent.CipherId = 0x1301 // 50336513 var length int var transcript crypto.Hash switch uint16(secretEvent.CipherId & 0x0000FFFF) { @@ -530,16 +529,8 @@ func (this *MOpenSSLProbe) saveMasterSecret(secretEvent *event.MasterSecretEvent length = 48 transcript = crypto.SHA384 default: - // TODO: multi version compatible. - // root cause : cipher's offset in ssl_st struct was changed between 1.1.1*. - // group a : 1.1.1a - // group b : 1.1.1b-1.1.1c - // group c : 1.1.1d-1.1.1i - // group e : 1.1.1j-1.1.1q - length = 32 - transcript = crypto.SHA256 - this.logger.Printf("non-TLSv1.3 cipher suite in tls13_hkdf_expand, CipherId: %d, use SHA256 default.", secretEvent.CipherId) - //return + this.logger.Printf("non-TLSv1.3 cipher suite found, CipherId: %d", secretEvent.CipherId) + return } clientHandshakeSecret := hkdf.ExpandLabel(secretEvent.HandshakeSecret[:length], diff --git a/user/module/probe_openssl_lib.go b/user/module/probe_openssl_lib.go index dbeccfe44..f3ab1bf60 100644 --- a/user/module/probe_openssl_lib.go +++ b/user/module/probe_openssl_lib.go @@ -15,30 +15,17 @@ func (this *MOpenSSLProbe) initOpensslOffset() { this.sslVersionBpfMap = map[string]string{ // openssl 1.1.1* - "OpenSSL 1.1.1a": "openssl_1.1.1a_kern.o", - "OpenSSL 1.1.1b": "openssl_1.1.1b-c_kern.o", - "OpenSSL 1.1.1c": "openssl_1.1.1b-c_kern.o", - "OpenSSL 1.1.1d": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1e": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1f": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1g": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1h": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1i": "openssl_1.1.1d-i_kern.o", - "OpenSSL 1.1.1j": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1k": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1l": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1m": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1n": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1o": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1p": "openssl_1.1.1j-q_kern.o", - "OpenSSL 1.1.1q": "openssl_1.1.1j-q_kern.o", - LinuxDefauleFilename: "openssl_1.1.1j-q_kern.o", + LinuxDefauleFilename: "openssl_1_1_1" + string(MaxSupportedOpenSSL111Version) + "_kern.o", // openssl 3.0.* // boringssl - "BoringSSL 1.1.1": "boringssl_1.1.1_kern.o", - AndroidDefauleFilename: "boringssl_1.1.1_kern.o", + "BoringSSL 1.1.1": "boringssl_1_1_1_kern.o", + AndroidDefauleFilename: "boringssl_1_1_1_kern.o", + } + + for ch := 'a'; ch <= MaxSupportedOpenSSL111Version; ch++ { + this.sslVersionBpfMap["OpenSSL 1.1.1"+string(ch)] = "openssl_1_1_1" + string(ch) + "_kern.o" } } diff --git a/script/boringssl-offset.c b/utils/boringssl-offset.c similarity index 100% rename from script/boringssl-offset.c rename to utils/boringssl-offset.c diff --git a/utils/openssl_1_1_1_offset.c b/utils/openssl_1_1_1_offset.c new file mode 100644 index 000000000..80fef105b --- /dev/null +++ b/utils/openssl_1_1_1_offset.c @@ -0,0 +1,54 @@ +#include +#include +#include +#include + +#if defined(SSL_LOCL_H) +#include +#else +#include +#endif + +#define SSL_STRUCT_OFFSETS \ + X(ssl_st, version) \ + X(ssl_st, session) \ + X(ssl_st, s3) \ + X(ssl_session_st, master_key) \ + X(ssl3_state_st, client_random) \ + X(ssl_session_st, cipher) \ + X(ssl_session_st, cipher_id) \ + X(ssl_cipher_st, id) \ + X(ssl_st, handshake_secret) \ + X(ssl_st, master_secret) \ + X(ssl_st, server_finished_hash) \ + X(ssl_st, handshake_traffic_hash) \ + X(ssl_st, exporter_master_secret) + +void toUpper(char *s) { + int i = 0; + while (s[i] != '\0') { + putchar(toupper(s[i])); + i++; + } +} + +void format(char *struct_name, char *field_name, size_t offset) { + printf("// %s->%s\n", struct_name, field_name); + printf("#define "); + toUpper(struct_name); + printf("_"); + toUpper(field_name); + printf(" 0x%lx\n\n", offset); +} + +int main() { + printf("/* OPENSSL_VERSION_TEXT: %s, OPENSSL_VERSION_NUMBER: %ld */\n\n", + OPENSSL_VERSION_TEXT, OPENSSL_VERSION_NUMBER); + +#define X(struct_name, field_name) \ + format(#struct_name, #field_name, offsetof(struct struct_name, field_name)); + SSL_STRUCT_OFFSETS +#undef X + + return 0; +} diff --git a/utils/openssl_offset.sh b/utils/openssl_offset.sh new file mode 100644 index 000000000..95af04e40 --- /dev/null +++ b/utils/openssl_offset.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -e + +PROJECT_ROOT_DIR=$(pwd) +OPENSSL_DIR="${PROJECT_ROOT_DIR}/deps/openssl" +OUTPUT_DIR="${PROJECT_ROOT_DIR}/kern" + +if [[ ! -f "go.mod" ]]; then + echo "Run the script from the project root directory" + exit 1 +fi + +# skip cloning if the header file of the max supported version is already generated +if [[ ! -f "${OUTPUT_DIR}/openssl_1_1_1r_kern.c" ]]; then + # skip cloning if the openssl directory already exists + if [[ ! -d "${OPENSSL_DIR}" ]]; then + git clone https://github.com/openssl/openssl.git ${OPENSSL_DIR} + fi +fi + +function run() { + git fetch --tags + cp -f ${PROJECT_ROOT_DIR}/utils/openssl_1_1_1_offset.c ${OPENSSL_DIR}/offset.c + + for ver in {a..r}; do + tag="OpenSSL_1_1_1${ver}" + header_file="${OUTPUT_DIR}/openssl_1_1_1${ver}_kern.c" + header_define="OPENSSL_1_1_1_$(echo ${ver} | tr "[:lower:]" "[:upper:]")_KERN_H" + + if [[ -f ${header_file} ]]; then + echo "Skip ${header_file}" + continue + fi + + git checkout ${tag} + echo "Generating ${header_file}" + + # config and make openssl/opensslconf.h + ./config + make include/openssl/opensslconf.h + + # set flag to include ssl/ssl_locl.h in OpenSSL_1_1_1{a..d} + if [[ $ver == [a-d] ]]; then + flags="-DSSL_LOCL_H" + else + unset flags + fi + clang ${flags} -I include/ -I . offset.c -o offset $flag + + echo -e "#ifndef ECAPTURE_${header_define}" >${header_file} + echo -e "#define ECAPTURE_${header_define}\n" >>${header_file} + ./offset >>${header_file} + echo -e "#include \"openssl.h\"" >>${header_file} + echo -e "#include \"openssl_masterkey.h\"" >>${header_file} + echo -e "\n#endif\n" >>${header_file} + + # clean up + make clean + + done + + rm offset.c +} + +pushd ${OPENSSL_DIR} +(run) +[[ "$?" != 0 ]] && popd +popd