💾 Archived View for republic.circumlunar.space › users › grimmware › no_execve › fexecve_preload.c captured on 2024-07-09 at 02:41:29.

View Raw

More Information

⬅️ Previous capture (2020-10-31)

-=-=-=-=-=-=-

#define _GNU_SOURCE

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/mman.h>
#include <errno.h>
#include <err.h>

int execve(const char *path, char *const argv[], char *const envp[]) {
  int fd = memfd_create(path, 0);
  if(fd == -1){
    perror("memfd_create");
  }
  FILE * inbinfile;
  inbinfile = fopen(path, "r");
  // TODO error check the above, see "Disclaimers" in README.md
  fseek(inbinfile, 0, SEEK_END);
  long binsize = ftell(inbinfile) + 1;
  rewind(inbinfile);
  char inbin[binsize];
  fread(inbin, 1, binsize, inbinfile);
  write(fd, inbin, binsize);

  fexecve(fd, (char * const *) argv, (char * const *) envp);

  err(1, "%s failed", "fexecve");
}