0

我需要一些关于 C 程序的帮助 - 它是一个反向 shell(https://github.com/arturgontijo/remoteShell/blob/master/reverseShell.c) + 提出一些参数来直接传递 IP 和 PORT,因为它工作得非常好它很稳定(不能用 TAB 自动完成内容的问题我并不在乎)但我真正关心的是,如果我在目标机器上按下,这东西会坏掉CTRL+C程序只是自行退出。现在我用这个例子来阻止CTRL+C调用:

/* Signal Handler for SIGINT */
void sigintHandler(int sig_num) 
{ 
    /* Reset handler to catch SIGINT next time. 
       Refer http://en.cppreference.com/w/c/program/signal */
    signal(SIGINT, sigintHandler); 
    printf("\n Cannot be terminated using Ctrl+C \n"); 
    fflush(stdout); 
} 

signal(SIGINT, sigintHandler); 

我在网上找到了这个例子并将它放在我的循环中,但仍然来自客户端按下ctrl+C中断程序。我想知道dup2()是负责那个还是什么,因为在简单的 C 程序上这实际上工作得很好。

4

1 回答 1

1

您可以使用sigetops 系列函数来操作发送到您的应用程序的信号。

因此,对于您的示例,您可以使用:

#include <signal.h>
#include <unistd.h>

int main(int argc, char **argv)
{
    sigset_t block_set;

    sigemptyset(&block_set);

    sigaddset(&block_set, SIGINT);

    sigprocmask(SIG_BLOCK, &block_set, NULL);

    while(1) {
        sleep(1);
    }
}

运行示例:https ://repl.it/repls/RelevantImaginarySearchservice

您可以稍后通过调用解除对信号的阻塞

sigprocmask(SIG_UNBLOCK, &block_set, NULL);
于 2019-01-24T18:37:31.663 回答