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