Пример #1
0
int					main(void)
{
	bool			retVal = false;
	ProcessMemory*	pProcMem = NULL;
	HANDLE			hThread = NULL;

	/* DialogBox(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, About); */

	pProcMem = new ProcessMemory();
	retVal = pProcMem->loadProcessByWindowName("Might and Magic® VI");
	if (retVal) {
		std::cout << "Might and Magic VI Found !" <<std::endl
			<< "==========================" <<std::endl <<std::endl
			<< "F2  \t  Give 2000 Gold" <<std::endl
			<< "F3  \t  Give 10 Food" <<std::endl <<std::endl
			<< "F5  \t  Set each heroes life points to 4000" <<std::endl;
		hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread_fct, pProcMem, 0, 0);
		if (hThread)
			WaitForSingleObject(hThread, -1);
	}
	else
		std::cout << "Game not Found..." <<std::endl;
	delete pProcMem;

	system("PAUSE");
	return (EXIT_SUCCESS);
}
Пример #2
0
/// <summary>
/// Allocate new memory block
/// </summary>
/// <param name="process">Process memory routines</param>
/// <param name="size">Block size</param>
/// <param name="desired">Desired base address of new block</param>
/// <param name="protection">Memory protection</param>
/// <returns>Memory block. If failed - returned block will be invalid</returns>
MemBlock MemBlock::Allocate( ProcessMemory& process, size_t size, ptr_t desired /*= 0*/, DWORD protection /*= PAGE_EXECUTE_READWRITE */ )
{
    ptr_t desired64 = desired;
    DWORD newProt = CastProtection( protection, process.core().DEP() );
    
    if (process.core().native()->VirualAllocExT( desired64, size, MEM_COMMIT, newProt ) != STATUS_SUCCESS)
    {
        desired64 = 0;
        if (process.core().native()->VirualAllocExT( desired64, size, MEM_COMMIT, newProt ) == STATUS_SUCCESS)
            LastNtStatus( STATUS_IMAGE_NOT_AT_BASE );
        else
            desired64 = 0;
    }

    return MemBlock( &process, desired64, size, protection );
}
Пример #3
0
int					thread_fct(LPVOID param)
{
	ProcessMemory*	pProcMem = (ProcessMemory*)param;
	bool			is_running = true;
	bool			key_pressed = false;
	bool			retVal = false;

	while (is_running && pProcMem) {
		if (GetAsyncKeyState(VK_F2)) {
			if (!key_pressed) {
				retVal = pProcMem->write4(0x908D50, pProcMem->read4(0x908D50) + 2000);
				key_pressed = true;
			}
		} else if (GetAsyncKeyState(VK_F3)) {
			if (!key_pressed) {
				retVal = pProcMem->write4(0x908D2C, pProcMem->read4(0x908D2C) + 10);
				key_pressed = true;
			}
		} else if (GetAsyncKeyState(VK_F5)) {
			if (!key_pressed) {
				pProcMem->write4(0x90A348, 4000);
				pProcMem->write4(0x90B964, 4000);
				pProcMem->write4(0x90CF80, 4000);
				pProcMem->write4(0x90E59C, 4000);
				key_pressed = true;
			}
		}
		else
			key_pressed = false;
		Sleep(50);
	}
	return (0);
}
Пример #4
0
/// <summary>
/// Allocate new memory block
/// </summary>
/// <param name="process">Process memory routines</param>
/// <param name="size">Block size</param>
/// <param name="desired">Desired base address of new block</param>
/// <param name="protection">Memory protection</param>
/// <param name="own">false if caller will be responsible for block deallocation</param>
/// <returns>Memory block. If failed - returned block will be invalid</returns>
call_result_t<MemBlock> MemBlock::Allocate( ProcessMemory& process, size_t size, ptr_t desired /*= 0*/, DWORD protection /*= PAGE_EXECUTE_READWRITE */, bool own /*= true*/ )
{
    ptr_t desired64 = desired;
    DWORD newProt = CastProtection( protection, process.core().DEP() );
    
    NTSTATUS status = process.core().native()->VirtualAllocExT( desired64, size, MEM_COMMIT, newProt );
    if (!NT_SUCCESS( status ))
    {
        desired64 = 0;
        status = process.core().native()->VirtualAllocExT( desired64, size, MEM_COMMIT, newProt );
        if (NT_SUCCESS( status ))
            return call_result_t<MemBlock>( MemBlock( &process, desired64, size, protection, own ), STATUS_IMAGE_NOT_AT_BASE );
        else
            return status;
    }

    return MemBlock( &process, desired64, size, protection, own );
}