/* * This is desock_dup.c from the amazing preeny project * https://github.com/zardus/preeny * * It is packaged in afl++ to have it at hand if needed * */ #define _GNU_SOURCE #include #include #include #include #include // #include // #include // #include // #include #include #include #include #include #include #include //#include "logging.h" // switche from preeny_info() to fprintf(stderr, "Info: " // // originals // int (*original_close)(int); int (*original_dup2)(int, int); __attribute__((constructor)) void preeny_desock_dup_orig() { original_close = dlsym(RTLD_NEXT, "close"); original_dup2 = dlsym(RTLD_NEXT, "dup2"); } int close(int sockfd) { if (sockfd <= 2) { fprintf(stderr, "Info: Disabling close on %d\n", sockfd); return 0; } else { return original_close(sockfd); } } int dup2(int old, int new) { if (new <= 2) { fprintf(stderr, "Info: Disabling dup from %d to %d\n", old, new); return 0; } else { return original_dup2(old, new); } } int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen) { (void)sockfd; (void)addr; (void)addrlen; fprintf(stderr, "Info: Emulating accept on %d\n", sockfd); return 0; } int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen) { (void)sockfd; (void)addr; (void)addrlen; fprintf(stderr, "Info: Emulating bind on port %d\n", ntohs(((struct sockaddr_in *)addr)->sin_port)); return 0; } int listen(int sockfd, int backlog) { (void)sockfd; (void)backlog; return 0; } int setsockopt(int sockfd, int level, int optid, const void *optdata, socklen_t optdatalen) { (void)sockfd; (void)level; (void)optid; (void)optdata; (void)optdatalen; return 0; }