From b96afbbd3af16a86a469f5e97a61662f8293f1cb Mon Sep 17 00:00:00 2001 From: zhaarey <157944548+zhaarey@users.noreply.github.com> Date: Tue, 20 Aug 2024 12:51:47 +0800 Subject: [PATCH] support get-m3u8 --- import.h | 25 ++++++++++++++ test.c | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 121 insertions(+), 3 deletions(-) diff --git a/import.h b/import.h index 4370538..18fcc9b 100644 --- a/import.h +++ b/import.h @@ -32,6 +32,24 @@ static inline union std_string new_std_string(const char *s) { return str; } +static inline struct std_vector new_std_vector(void *begin) { + struct std_vector vector = { + .begin = begin, + .end = begin + 1, + }; + vector.end_capacity = vector.end; + return vector; +} + +static inline union std_string new_std_string_short_mode(const char *str) { + short str_size = strlen(str); + union std_string std_str = { + .mark = str_size << 1, + }; + strcpy(std_str.str, str); + return std_str; +} + static inline const char *std_string_data(union std_string *str) { if ((str->mark & 1) == 0) { return str->str; @@ -215,6 +233,13 @@ extern void _ZN8FootHill24defaultContextIdentifierEv(void *); extern void _ZN21RequestContextManager9configureERKNSt6__ndk110shared_ptrIN17storeservicescore14RequestContextEEE( struct shared_ptr *); +extern struct shared_ptr *_ZN22SVPlaybackLeaseManager12requestAssetERKmRKNSt6__ndk16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEERKb( + void *, void *, unsigned long *, struct std_vector *, uint8_t * +); +extern int _ZNK23SVPlaybackAssetResponse13hasValidAssetEv(void *); +extern struct shared_ptr *_ZNK23SVPlaybackAssetResponse13playbackAssetEv(void *); +extern union std_string *_ZNK17storeservicescore13PlaybackAsset9URLStringEv(void *, uint8_t *); + const char *const android_id = "dc28071e981c439e"; const char *const fairplayCert = "MIIEzjCCA7agAwIBAgIIAXAVjHFZDjgwDQYJKoZIhvcNAQEFBQAwfzELMAkGA1UEBhMCVVMxEz" "ARBgNVBAoMCkFwcGxlIEluYy4xJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9y" diff --git a/test.c b/test.c index 7b057d9..08d3f97 100644 --- a/test.c +++ b/test.c @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -376,7 +377,7 @@ inline static int new_socket() { setsockopt(fd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); static struct sockaddr_in serv_addr = {.sin_family = AF_INET}; - serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); + serv_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); serv_addr.sin_port = htons(port); if (bind(fd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) == -1) { perror("bind"); @@ -388,7 +389,7 @@ inline static int new_socket() { return EXIT_FAILURE; } - fprintf(stderr, "[!] listening 0.0.0.0:%d\n", port); + fprintf(stderr, "[!] listening 127.0.0.1:%d\n", port); close(STDOUT_FILENO); static struct sockaddr_in peer_addr; @@ -423,6 +424,96 @@ inline static int new_socket() { } } + +const char* get_m3u8_method_play(uint8_t leaseMgr[16], unsigned long adam) { + union std_string HLS = new_std_string_short_mode("HLS"); + struct std_vector HLSParam = new_std_vector(&HLS); + static uint8_t z0 = 1; + struct shared_ptr *ptr_result = (struct shared_ptr *) malloc(32); + _ZN22SVPlaybackLeaseManager12requestAssetERKmRKNSt6__ndk16vectorINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEERKb( + ptr_result, leaseMgr, &adam, &HLSParam, &z0 + ); + if (_ZNK23SVPlaybackAssetResponse13hasValidAssetEv(ptr_result->obj)) { + struct shared_ptr *playbackAsset = _ZNK23SVPlaybackAssetResponse13playbackAssetEv(ptr_result->obj); + union std_string *m3u8 = (union std_string *) malloc(24); + _ZNK17storeservicescore13PlaybackAsset9URLStringEv(m3u8, playbackAsset->obj); + return std_string_data(m3u8); + } else { + return NULL; + } +} + +void handle_m3u8(const int connfd) { + while (1) + { + uint8_t adamSize; + if (!readfull(connfd, &adamSize, sizeof(uint8_t))) { + return; + } + if (adamSize <= 0) { + return; + } + char adam[adamSize]; + for (int i=0; i