diff --git a/Makefile b/Makefile index 52d7bb999..85aa9c68c 100644 --- a/Makefile +++ b/Makefile @@ -46,9 +46,11 @@ ifeq ($(DEBUG),1) DEBUG_PRINT := -DDEBUG_PRINT endif +BORINGSSL_FLAGS ?= TARGET_TAG ?= linux ifeq ($(ANDROID),1) TARGET_TAG := androidgki +BORINGSSL_FLAGS := -DBORINGSSL endif EXTRA_CFLAGS ?= -O2 -mcpu=v1 \ @@ -89,8 +91,8 @@ CLANG_VERSION = $(shell $(CMD_CLANG) --version 2>/dev/null | \ | .check_$(CMD_CLANG) # @echo $(shell date) - @if [ ${CLANG_VERSION} -lt 9 ]; then - echo -n "you MUST use clang 9 or newer, " + @if [ ${CLANG_VERSION} -lt 12 ]; then + echo -n "you MUST use clang 12 or newer, " echo "your current clang version is ${CLANG_VERSION}" exit 1 fi @@ -290,6 +292,7 @@ $(KERN_OBJECTS): %.o: %.c \ $(CMD_CLANG) -D__TARGET_ARCH_$(LINUX_ARCH) \ $(EXTRA_CFLAGS) \ $(BPFHEADER) \ + $(BORINGSSL_FLAGS) \ -target bpfel -c $< -o $(subst kern/,user/bytecode/,$@) \ -fno-ident -fdebug-compilation-dir . -g -D__BPF_TARGET_MISSING="GCC error \"The eBPF is using target specific macros, please provide -target\"" \ -MD -MP @@ -341,6 +344,7 @@ $(KERN_OBJECTS_NOCORE): %.nocore: %.c \ -I $(KERN_BUILD_PATH)/include/generated/uapi \ $(EXTRA_CFLAGS_NOCORE) \ $(KERNEL_LESS_5_2_FLAGS) \ + $(BORINGSSL_FLAGS) \ -c $< \ -o - |$(CMD_LLC) \ -march=bpf \ diff --git a/kern/masterkey_kern.h b/kern/masterkey_kern.h index a78e69870..d8761542a 100644 --- a/kern/masterkey_kern.h +++ b/kern/masterkey_kern.h @@ -12,8 +12,11 @@ * openssl 1.1.1.X 版本相关的常量 * 参考:https://wiki.openssl.org/index.php/TLS1.3 */ +#ifndef BORINGSSL +//------------------------------------------ -////////// TLS 1.2 or older ///////// +// ssl->version 在 ssl_st 结构体中的偏移量 +#define SSL_VERSION_OFFSET 0 // ssl->session 在 ssl_st 结构中的偏移量 #define SSL_SESSION_OFFSET 0x510 @@ -25,6 +28,27 @@ // s3->client_random 在 ssl3_state_st 中的偏移量 #define SSL_S3_CLIENT_RANDOM_OFFSET 0xD8 +//------------------------------------------ +#else +// android boringssl 版本 +// ssl->version 在 ssl_st 结构体中的偏移量 +#define SSL_VERSION_OFFSET 16 + +// ssl->session 在 ssl_st 结构中的偏移量 +#define SSL_SESSION_OFFSET 88 + +// session->secret 在 SSL_SESSION 中的偏移量 +#define MASTER_KEY_OFFSET 16 + +// ssl->s3 在 ssl_st中的偏移量 +#define SSL_S3_OFFSET 48 + +// s3->client_random 在 ssl3_state_st 中的偏移量 +#define SSL_S3_CLIENT_RANDOM_OFFSET 48 +#endif + +////////// TLS 1.2 or older ///////// + // session->cipher 在 SSL_SESSION 中的偏移量 #define SESSION_CIPHER_OFFSET 496 @@ -162,13 +186,15 @@ int probe_ssl_master_key(struct pt_regs *ctx) { debug_bpf_printk("mastersecret is null\n"); return 0; } + u64 *ssl_version_ptr = (u64 *)(ssl_st_ptr + SSL_VERSION_OFFSET); // Get a ssl_session_st pointer u64 *ssl_session_st_ptr = (u64 *)(ssl_st_ptr + SSL_SESSION_OFFSET); u64 *ssl_s3_st_ptr = (u64 *)(ssl_st_ptr + SSL_S3_OFFSET); + // Get SSL->version pointer int version; int ret = - bpf_probe_read_user(&version, sizeof(version), (void *)ssl_st_ptr); + bpf_probe_read_user(&version, sizeof(version), (void *)ssl_version_ptr); if (ret) { debug_bpf_printk("bpf_probe_read tls_version failed, ret :%d\n", ret); return 0;