Beispiel #1
0
BOOL SaveLibrary64ToFile(LPVOID lpBase, TCHAR* lpOutFileName)
{
	DWORD numberOfBytesWritten;
	HANDLE hOutFile = CreateFile( lpOutFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);

	if(hOutFile == INVALID_HANDLE_VALUE)
	return FALSE;
	// DOS header
	PIMAGE_DOS_HEADER dos_header;

	dos_header = (PIMAGE_DOS_HEADER) lpBase;

	if (dos_header->e_magic != IMAGE_DOS_SIGNATURE || dos_header->e_lfanew == 0)
	{
		CloseHandle(hOutFile);
		return FALSE;
	}

	PIMAGE_NT_HEADERS64 pe_header = CALC_OFFSET(PIMAGE_NT_HEADERS64, dos_header, dos_header->e_lfanew);   
	
	PIMAGE_SECTION_HEADER p = IMAGE_FIRST_SECTION(pe_header);

	if( !WriteFile( hOutFile, lpBase, p->PointerToRawData, &numberOfBytesWritten, NULL))
		return FALSE;

	// PE header
	
	if (pe_header->Signature != IMAGE_NT_SIGNATURE)
	{
		CloseHandle(hOutFile);
		return FALSE;
	}

	DWORD dwSizeHeader = pe_header->FileHeader.SizeOfOptionalHeader  + sizeof(pe_header->FileHeader) + 4;// +
	//sizeof(IMAGE_SECTION_HEADER)*pe_header->FileHeader.NumberOfSections;

	PIMAGE_SECTION_HEADER sections = (PIMAGE_SECTION_HEADER)((DWORD)(lpBase) + dwSizeHeader + dos_header->e_lfanew);

	//WriteFile( hOutFile, pe_header, sections[0].PointerToRawData - dos_header->e_lfanew, &numberOfBytesWritten,NULL);

	// write sections...
	for(unsigned short i = 0; i < pe_header->FileHeader.NumberOfSections; i++)
	{
		LPVOID addr = (LPVOID)((DWORD)lpBase + sections[i].VirtualAddress);

		WriteFile( hOutFile, addr, RoundUp(sections[i].SizeOfRawData, pe_header->OptionalHeader.FileAlignment), &numberOfBytesWritten, NULL);
	}

	CloseHandle(hOutFile);
	return TRUE;
} 
Beispiel #2
0
/**
*	\!PatchQword
**/
bool CPeSection::PatchQWord(virtualaddress_t	VirtualAddress, uint64_t *in)
{
	memcpy(CALC_OFFSET(LPVOID, _rawData, VirtualAddress - _base), in, 8);
	return true;
}
Beispiel #3
0
bool CPeSection::ReadQWord(virtualaddress_t	VirtualAddress, uint64_t *out)
{
	memcpy(out, CALC_OFFSET(LPVOID, _rawData, VirtualAddress - _base), 8);
	return true;
}
Beispiel #4
0
/* Creating network devices variables */
int make_net_devs_vars(server_configuration * config)
{
    static const dev_var_descr_t net_device_vars[] =
    {
        {"DEV-NAME", CALC_OFFSET(dhcp_device_t, str_name)},
        {"DEV-ETHERADDR", CALC_OFFSET(dhcp_device_t, str_ether_addr)},
        {"DEV-IPADDR", CALC_OFFSET(dhcp_device_t, str_ipaddr)},
        {"DEV-NETWORK", CALC_OFFSET(dhcp_device_t, str_network)},
        {"DEV-NETMASK", CALC_OFFSET(dhcp_device_t, str_netmask)},
        {"DEV-NETMASK-CIDR", CALC_OFFSET(dhcp_device_t, str_netmask_cidr)},
        {"DEV-IPADDR-INT", CALC_OFFSET(dhcp_device_t, str_ipaddr_int)},
        {"DEV-NETWORK-INT", CALC_OFFSET(dhcp_device_t, str_network_int)},
        {"DEV-NETMASK-INT", CALC_OFFSET(dhcp_device_t, str_netmask_int)},
        {"DEV-SRVPORT", CALC_OFFSET(dhcp_device_t, str_srv_port)},
        {"DEV-CLIPORT", CALC_OFFSET(dhcp_device_t, str_cli_port)}
    };

    int i;
    query_var_t * var;
    for(i = 0; i < sizeof(net_device_vars) / sizeof(net_device_vars[0]); ++i)
    {
        var = add_variable(&config->vars_container);
        CHECK_VALUE_CONF(var, "Can't create device variable.", FAIL);

        var->type = var_device;
        var->name = net_device_vars[i].name;
        var->offset = net_device_vars[i].offset;
    }
    return OK;
}
Beispiel #5
0
#ifdef _WIN32
    ".\\db2dhcp.conf"
#else
    "/etc/db2dhcp.conf"
#endif
    ;

static const char * usage_message =
    "\nUsage:\tdb2dhcp [-L] [-D] [-d] [-q] [-s] [-o] [-c <config-filename>] <interface-name1> [... <interface-nameN>] ";

static const char spaces[] = " \t";

static const option_description_t cfg_options[] =
{
#ifndef _WIN32
    {"User", string_option_handler, CALC_OFFSET(server_configuration, user)},
#endif
    {"LogFile", string_option_handler, CALC_OFFSET(server_configuration, log_file_name)},
    {"DBType", dbm_type_option_handler, CALC_OFFSET(server_configuration, dbm)},
    {"DBServerAddress", string_option_handler, CALC_OFFSET(server_configuration, db_server_address)},
    {"DBServerPort", integer_option_handler, CALC_OFFSET(server_configuration, db_server_port)},
    {"DBUserName", string_option_handler, CALC_OFFSET(server_configuration, db_user_name)},
    {"DBUserPassword", string_option_handler, CALC_OFFSET(server_configuration, db_user_password)},
    {"DBName", string_option_handler, CALC_OFFSET(server_configuration, db_name)},
    {"DBClientsCount", integer_option_handler, CALC_OFFSET(server_configuration, db_clients_count)},
    {"QueryDiscover", string_option_handler, CALC_OFFSET(server_configuration, query_discover)},
    {"QueryHistory", string_option_handler, CALC_OFFSET(server_configuration, query_history)},
    {"QueryRequest", string_option_handler, CALC_OFFSET(server_configuration, query_request)},
    /* TODO 40 QueryRequestRej - запрос выполняемый в случае если клиент не выбрал данный сервер */
    /* TODO 40 QueryInform - нужно обрабатывать DHCPINFORM если указан этот запрос */
    {"QueryRelease", string_option_handler, CALC_OFFSET(server_configuration, query_release)},