From 3916c7f46236e4d477b8ba680ed7cc456ca5c1f9 Mon Sep 17 00:00:00 2001 From: Madura Date: Sat, 20 May 2017 02:10:35 +0530 Subject: added floader files --- src/floader/README.md | 9 +++ src/floader/loader.c | 161 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/floader/makefile | 7 +++ 3 files changed, 177 insertions(+) create mode 100644 src/floader/README.md create mode 100644 src/floader/loader.c create mode 100644 src/floader/makefile diff --git a/src/floader/README.md b/src/floader/README.md new file mode 100644 index 000000000..d437763a7 --- /dev/null +++ b/src/floader/README.md @@ -0,0 +1,9 @@ +READ ME +------- + +* Run 'make' +* Add comma separated process names to ~/.loader.conf +* export LD_PRELOAD=./loader.so (ideally to .bashrc) +* Run any application within shell + + diff --git a/src/floader/loader.c b/src/floader/loader.c new file mode 100644 index 000000000..0970794e9 --- /dev/null +++ b/src/floader/loader.c @@ -0,0 +1,161 @@ +/* + * Copyright (C) 2017 Madura A. (madura.x86@gmail.com) + * + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#define MAX_MATCHES 32 +#define MAX_ARGS 1024 +#define MAX_ARGS_LEN 4096 +static void loader_main() __attribute__((constructor)); + +char cmdline[MAX_ARGS_LEN]; +char *args[MAX_ARGS]; +char loader[] = "firejail"; +char confFile[256]; +char *names[MAX_MATCHES]; + +#ifdef DEBUG +#define DBG printf +#else +#define DBG +#endif +void remove_trailing_spaces(char *str) +{ + while (!isspace(*str)) + { + str++; + } + + while (*str != '\0') + { + *str = '\0'; + str++; + } +} + +void read_cmdline() +{ + int fd = open("/proc/self/cmdline", O_RDONLY); + ssize_t ret = 0, total = 0; + char* wcmdbuf = cmdline; + while ((ret = read(fd, wcmdbuf, 1)) != 0) + { + wcmdbuf++; + total += ret; + if (total > MAX_ARGS_LEN) + { + printf("Not enough memory\n"); + close(fd); + return ; + } + } + close(fd); +} + +void make_args() +{ + int cI = 0, argI=0; + char* argstart = &cmdline[0]; + for (;cI