int main(char* argv[], int argc){ stuff(); if (argv[0] == "-x" || "-X") { exploit(); return 1; } else if (argv[0] == "-b" || "-B") { device_autoboot(); return 1; } else if (argv[0] == "-f" || "-F") { device_upload(argv[1]); return 1; } else { printf("Command not found\n"); return -1; } }
int prog_parse(char *command) { char* action = strtok(strdup(command), " "); if(! strcmp(action, "help")) { printf("Commands:\n"); printf("\t/exit\t\t\texit from recovery console.\r\n"); printf("\t/upload <file>\t\tupload file to device.\r\n"); printf("\t/exploit [payload]\tsend usb exploit packet.\r\n"); printf("\t/batch <file>\t\texecute commands from a batch file.\r\n"); printf("\t/auto-boot\t\t\tenable auto-boot (exit recovery loop).\r\n"); } else if(! strcmp(action, "exit")) { free(action); return -1; } else if(strcmp(action, "upload") == 0) { char* filename = strtok(NULL, " "); if(filename != NULL) device_upload(filename); } else if(strcmp(action, "exploit") == 0) { char* payload = strtok(NULL, " "); if (payload != NULL) device_exploit(payload); else device_exploit(NULL); } else if (! strcmp(action, "batch")) { char* filename = strtok(NULL, " "); if (filename != NULL) prog_batch(filename); } else if (! strcmp(action, "auto-boot")) { device_autoboot(); } free(action); return 0; }
int device_exploit(char* payload) { if(payload != NULL) { if(device_upload(payload) < 0) { printf("[Device] Error uploading payload.\r\n"); return -1; } } if(!libusb_control_transfer(device, 0x21, 2, 0, 0, 0, 0, 1000)) { printf("[Device] Error sending exploit.\r\n"); return -1; } return 0; }
void prog_handle(int argc, char *argv[]) { if (! strcmp(argv[1], "-a")) { device_autoboot(); } else if (! strcmp(argv[1], "-c")) { if (argc >= 3) { if (argc > 3) { char command[0x200]; int i = 2; for (i; i < argc; i++) { if (i > 2) strcat(command, " "); strcat(command, argv[i]); } argv[2] = command; } device_sendcmd(&argv[2]); } } else if (! strcmp(argv[1], "-r")) { device_reset(); } else if (! strcmp(argv[1], "-b")) { prog_batch(argv[2]); } else if (! strcmp(argv[1], "-u") || ! strcmp(argv[1], "-x")) { if (argc == 3) { device_upload(argv[2]); if (! strcmp(argv[1], "-x")) { device_reset(); } } } else if(! strcmp(argv[1], "-e")) { if(argc >= 3) device_exploit(argv[2]); else device_exploit(NULL); } else if (! strcmp(argv[1], "-s")) { if (argc >= 3) //Logfile specified prog_console(argv[2]); else prog_console(NULL); } else { printf("[Program] Invalid program argument specified.\r\n"); prog_usage(); } }