Exemple #1
0
int find_repack_index(PACKAGE* package, const char* ori_name)
{
	STORE_ITEM* repack_item = (STORE_ITEM*)PACKAGE(package->repack_app_dir);

	int index = 0;
	while (repack_item->length)
	{
		char* file_name = (char*)PACKAGE(*repack_item);
		if (stricmp(file_name, ori_name) == 0)
		{
			return (index);
		}

		index++;
		repack_item++;
	}
	
	return (-1);
}
Exemple #2
0
/* static */
wxString ChipPackage::GetStringFromPackageType(PackageType type)
{
#undef PACKAGE
#define PACKAGE(x)          \
    if (type == x)          \
        return wxString(#x);

    PACKAGE(PDIP);
    PACKAGE(SOIC);
    PACKAGE(SSOP);
    PACKAGE(MQFP);
    PACKAGE(TQFP);
	PACKAGE(QFN);
    PACKAGE(PLCC);

    return wxEmptyString;
}
Exemple #3
0
/* static */
PackageType ChipPackage::GetPackageTypeFromString(const wxString& str)
{

#define PACKAGE(x)                       \
    if (str.CmpNoCase(#x) == 0)          \
        return x;


	PACKAGE(PDIP);
    PACKAGE(SOIC);
    PACKAGE(SSOP);
    PACKAGE(MQFP);
    PACKAGE(TQFP);
	PACKAGE(QFN);
    PACKAGE(PLCC);

    return UPP_INVALID_PACKAGETYPE;
}
Exemple #4
0
void* make_launch(PACKAGE* package, long* launch_size)
{
	void* stub_base = (void*)PACKAGE(package->stub_exe);
	long stub_size = package->stub_exe.length;

	assert(stub_base);
	assert(stub_size);

	long section_va;
	long section_raw;
	append_section_try(stub_base, &section_va, &section_raw);

	long output_size;
	void* launch_exe = append_section(stub_base, stub_size, &output_size, PACKAGE_SECTION_NAME, package, package->size);

	PACKAGE* package_out = (PACKAGE*)RVATOVA(launch_exe, section_raw);
	package_out->repack_whoami_index = -1;

	*launch_size = output_size;
	return (launch_exe);
}
Exemple #5
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);
}
Exemple #6
0
char* find_repack_name(PACKAGE* package, int index)
{
	STORE_ITEM* repack_item = (STORE_ITEM*)PACKAGE(package->repack_app_dir);
	char* file_name = (char*)PACKAGE(repack_item[index]);
	return (strdup(file_name));
}
Exemple #7
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);
}