int choose_manager_features() { driver_info *phead; char choice[3]; phead = file_to_mem(); if (phead->next == NULL) {printf("\n\n\t\t\t\t信息文件无记录,请新建,在学号处输入end回车结束\n"); phead = entry_driver_information(); mem_to_file(phead); } while(1) { system("clear"); printf("\n\n\n\n\n\n\n\n\n\n\n"); printf("\t\t 您想做什么?\n"); printf("\n\n"); printf("\t\t 1. 查看现有司机全部信息\n"); printf("\t\t 2. 新建一个司机信息\n"); printf("\t\t 3. 删除一个司机信息\n"); printf("\t\t 4. 修改一个司机信息\n"); printf("\t\t 5. 精确查询司机信息\n"); printf("\t\t 6. 模糊查询司机信息\n"); printf("\t\t 7. 排序查看司机信息\n"); printf("\t\t 8. 统计查看司机信息\n"); printf("\t\t 9. 返回上一级菜单\n"); printf("\t\t 0. 退出程序\n"); printf("\t\t x. 删除所有信息\n"); printf("\t\t n. 新建所有信息\n"); printf("\t\t "); fgets(choice,3,stdin); switch(choice[0]) { case '1':system("clear");printf("\n\n\n\n\n\n\n\n\n\n\n");print(phead);printf("\n\n\n 按任意键返回前一级菜单\n");getchar();continue; case '2':create_new_driver(phead);free(phead); choose_manager_features(); case '3':delete_old_driver(phead); free(phead);choose_manager_features(); case '4':change_old_driver(phead); free(phead);choose_manager_features(); case '5':search_simple_car_number(phead) ;free(phead);choose_manager_features(); case '6':search_vague_car_color_type(phead);free(phead); choose_manager_features(); case '7':choose_sort(phead);print(phead);printf("\n\n\t\t\t\t按任意键返回前一级菜单");getchar();free(phead);choose_manager_features(); case '8':count(phead);printf("\n\n\t\t\t\t按任意键返回前一级菜单");getchar();free(phead); choose_manager_features(); case '9':free(phead);choose_user_in() ; case '0':printf("\n\n\t\t\t\t确认退出?(y/n)\n ");if(getchar() == 'y') {free(phead);exit(0);}else {printf("\n\n\t\t\t\t按任意键返回前一级菜单");getchar(); choose_manager_features();} case 'x':system("clear");printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t 请再次确认!!!(y/n)\n");if(getchar() == 'y') {system("rm driver_information");exit(1);}else { printf("\n\n\t\t\t\t按任意键返回前一级菜单");getchar();choose_manager_features();} case 'n': phead = entry_driver_information();mem_to_file(phead);exit(1); default :continue; } } }
int copack_make_package_apps(PACKAGE* package, char* root_dir, char* output_dir) { assert(package); assert(root_dir); int run_result = 0; long launch_size; void* launch_exe = make_launch(package, &launch_size); char* file_name; char src_pe_file[MAX_PATH]; /* 如果需要,则生成launch,其实就是直接释放出来,launch和普通repack的区别,仅仅在于: 1)是否设置了repack_whoami_index,标名repack的真实名字 2)有没有STOREPE节段,这是存储pe文件的节段 */ if (package->launch_exe.length) { file_name = (char*)PACKAGE(package->launch_exe); if (output_dir) { char* short_name = seek_short_file_name(file_name); sprintf(src_pe_file, "%slaunch_%s", output_dir, short_name); } else { sprintf(src_pe_file, "%slaunch_%s", root_dir, file_name); } DbgPrint("launch filename: %s", src_pe_file); if (mem_to_file(src_pe_file, launch_exe, launch_size) == 0) { DbgPrint("launch release error"); run_result--; } } //打包程序 if (package->repack_app_dir.length) { STORE_ITEM* repack_item = (STORE_ITEM*)PACKAGE(package->repack_app_dir); while (repack_item->length) { file_name = (char*)PACKAGE(*repack_item); sprintf(src_pe_file, "%s%s", root_dir, file_name); long output_file_size; char* output_file_base = make_repack_app(file_name, src_pe_file, launch_exe, launch_size, &output_file_size, 1); //确定输出目录 if (output_dir) { char* short_name = seek_short_file_name(file_name); sprintf(src_pe_file, "%s%s", output_dir, short_name); } //覆盖或输出生成的文件 DbgPrint("dist filename : %s", src_pe_file); if (mem_to_file(src_pe_file, output_file_base, output_file_size) == 0) { run_result--; } repack_item++; } } return (run_result); }
char* stub_make_session_apps(PACKAGE* package, SEARCH_PARAM *search) { int run_result = 0; char* root_dir = search->root_dir; assert(package); assert(root_dir); void* session_dll = (void*)PACKAGE(package->session_dll); long session_dll_size = package->session_dll.length; assert(session_dll); assert(session_dll_size); //生成session.dll,添加package节段 long output_size; void* output_base = append_section(session_dll, session_dll_size, &output_size, PACKAGE_SECTION_NAME, package, package->size); //准备startup节段 STARTUP* startup = init_startup(); append_string_to_startup(root_dir, &startup->root_path); append_string_to_startup(GetCommandLineA(), &startup->stub_command_line); char session_dll_name[MAX_PATH]; sprintf(session_dll_name, "%s%s", root_dir, DAEMON_EXE_NAME); char* daemon_process_name = strdup(session_dll_name); append_string_to_startup(session_dll_name, &startup->daemon_process); sprintf(session_dll_name, "%s%s", root_dir, SESSION_DLL_NAME); append_string_to_startup(session_dll_name, &startup->session_dll); DbgPrint("root_dir: %s", (char*)STARTUP(startup->root_path)); DbgPrint("daemon: %s", (char*)STARTUP(startup->daemon_process)); DbgPrint("session: %s", (char*)STARTUP(startup->session_dll)); startup->stub_is_launch=(is_section_exists_main(ORIGIN_APP_SECTION_NAME))? 0 : 1; startup->stub_process_id = GetCurrentProcessId(); DWORD pid = get_parent_process_id(); startup->stub_parent_process_id = pid; append_string_to_startup(pid_to_exepath(pid), &startup->stub_parent_process); append_string_to_startup(current_process_name(), &startup->stub_process_name); //添加动态生成的“内核对象名字”,daemon调试通道名 append_string_to_startup(gen_guid_str(), &startup->daemon_dbg_name); append_string_to_startup(gen_guid_str(), &startup->share_mutex_name); //添加实际的被打包文件名和被注入进程文件名 append_list_string_to_startup(search->repack_list, &startup->realy_repack_apps); append_list_string_to_startup(search->plugto_list, &startup->realy_plugin_apps); append_list_string_to_startup(search->map_list, &startup->map_file_names); //添加startup节段 long output_file_size; char* output_file_base = append_section(output_base, output_size, &output_file_size, STUB_START_SECTION_NAME, startup, startup->size); //产生2个pe文件 if (mem_to_file(session_dll_name, output_file_base, output_file_size) == 0) { run_result--; } char* daemon_base = (void*)PACKAGE(package->daemon_exe); if (mem_to_file(daemon_process_name, daemon_base, package->daemon_exe.length) == 0) { run_result--; } return ((run_result == 0)? daemon_process_name : NULL); }
int system_copy_qson(IO_Structure *from,IO_Structure *to ) { machine_reset(get_ready_stmt()); // big deal, start fresh // if the source is memory format if(from->sa_family == AF_MEMORY) { if(to->sa_family== AF_FILE) { FILE *fd; fd= fopen((char *)to->addr, "w+"); printf("File out %s\n",(char *) to->addr); mem_to_file(fd,(int *) from->buff,AF_FILE); fflush(fd); fclose(fd); } else if(to->sa_family== AF_CONSOLE) { mem_to_file(stdout,(int *) from->buff,AF_CONSOLE); } else if(to->sa_family== AF_TABLE){ TABLE * table; init_table((char *) to->addr,1,&table); to->buff = (void*) table; mem_to_table(table,(int *) from->buff,AF_TABLE); } else if(to->sa_family== AF_INET) mem_to_net(to->fd,(int *) from->buff,Qson_IO); // If the source is a table }else if(from->sa_family== AF_TABLE ) { TABLE * table; if( (to->sa_family== AF_CONSOLE) || ( to->sa_family== AF_INET)) { printf("Table from %s\n",(char *) from->addr); init_table((char *) from->addr,0,&table); to->buff = (void*) table; table_to_Json(table,to); }else if(to->sa_family== AF_TABLE) dup_table((char *) from->addr,(char *) to->addr); else if(to->sa_family== AF_MEMORY){ init_table((char *) from->addr,0,&table); to->buff = (void *) table_to_mem(table); } // else this might be from the network } else if ((from->sa_family== AF_INET) || (from->sa_family== AF_CONSOLE)|| (from->sa_family== AF_FILE) ) { if( to->sa_family== AF_TABLE) { TABLE * table; DBG_printf("New Table %s\n",(char *) to->addr); init_table((char *) to->addr,1,&table); to->buff = (void*) table; if(from->format == Json_IO) parser((char *) from->buff,table); // Json from the net else if (from->format == Qson_IO) qson_to_table(table,(char *) to->buff,to->count); } // source is file } else if(from->sa_family== AF_FILE) { if(to->sa_family== AF_MEMORY){ FILE *fd; printf("File in %s\n",(char *) from->addr); fd= fopen((char *) from->addr, "r"); to->buff = file_to_mem(fd); fclose(fd); } } return 0; }