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