阻止SIGINT终止程序

时间:2019-01-24 17:44:08

标签: c ctrl reverse-shell

我需要有关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程序上,它确实可以正常工作。

1 个答案:

答案 0 :(得分:1)

您可以使用sigetops family of functions来处理发送到应用程序中的信号。

因此,您可以使用以下示例:

#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);