Перейти к содержанию

helldrg

Пользователи+
  • Постов

    142
  • Зарегистрирован

  • Посещение

  • Победитель дней

    3

Сообщения, опубликованные helldrg

  1. В 20.09.2016в18:24, keng сказал:

    Во-первых, отладчик - в помощь

    Судя по нику вы создатель этих уроков, я поклонник вашего творчества, желаю успехов в дальнейшем творчестве =) 
    А  теперь по делу, у вас есть видео где вы курочете d3d приложение, я пробовал с ollydbg 1.1 и 2.01, но код(asm) у меня в отладчике сильно отличается от вашего и из-за этого я не смог разобраться в основах. Кроме кода у вас еще функции все выделены, а у меня нет. Может это плагины или еще что то я к сожалению не знаю. Вот код:
     

    Скрытый текст
    
    void CopyVMT9(DWORD* vtableFrag)
    {
    	HWND hWnd = CreateWindowA("STATIC", "dummy", 0, 0, 0, 0, 0, 0, 0, 0, 0);
    	HMODULE hD3D9 = GetModuleHandleA("d3d9");
    	DIRECT3DCREATE9 Direct3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9"); // это можно но закоментить и подключить библиотеку d3d9.lib
    	IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);
    	D3DDISPLAYMODE d3ddm;
    	d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp, sizeof(d3dpp));
    	d3dpp.Windowed = 1;
    	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	IDirect3DDevice9* d3dDevicee = 0;
    	d3d->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3dDevicee);
    	DWORD* vtablePtr = (DWORD*)(*((DWORD*)d3dDevicee));// в этом месте крашит программу после инжекта
    	printf("gfg\n");
    	for (int i = 0; i < 4; i++)
    	{
    		vtableFrag[i] = vtablePtr[i + 6];
    		
    	}
    	d3dDevicee->Release();
    	d3d->Release();
    	DestroyWindow(hWnd);
    }

     

    Я тестил не на игре, а на простом приложении, если надо могу проект скинуть или exe написано на VS13, может кода хватить:
     

    Скрытый текст
    
    #include <Windows.h>
    #include <d3d9.h>
    
    #pragma comment(lib, "d3d9.lib")
    
    LPDIRECT3D9 d3d;
    LPDIRECT3DDEVICE9 d3ddev;
    
    bool globalRunning = true;
    
    void CleanD3D()
    {
    	d3ddev->Release();
    	d3d->Release();
    }
    
    void RenderFrame()
    {
    	d3ddev->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0);
    	d3ddev->BeginScene();
    	d3ddev->EndScene();
    	d3ddev->Present(0, 0, 0, 0);
    }
    
    void InitD3D(HWND window)
    {
    	d3d = Direct3DCreate9(D3D_SDK_VERSION);
    	D3DPRESENT_PARAMETERS d3dpp;
    	ZeroMemory(&d3dpp, sizeof(d3dpp));
    	d3dpp.Windowed = 1;
    	d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	d3dpp.hDeviceWindow = window;
    	d3d->CreateDevice(0, D3DDEVTYPE_HAL, window, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
    }
    
    LRESULT CALLBACK Win32MainWindowCallbak(HWND window, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch (message)
    	{
    	case WM_DESTROY:
    	{
    		PostQuitMessage(0);
    		return 0;
    	}
    	}
    	return DefWindowProc(window, message, wParam, lParam);;
    }
    
    int CALLBACK WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	WNDCLASS windowClass = {};
    
    	windowClass.style = CS_VREDRAW | CS_HREDRAW;
    	windowClass.lpfnWndProc = Win32MainWindowCallbak;
    	windowClass.lpszClassName = "test";
    	windowClass.hInstance = instance;
    
    	RegisterClass(&windowClass);
    
    	HWND window = CreateWindowEx(0, windowClass.lpszClassName, "test", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT,
    		CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, instance, 0);
    
    	MSG message;
    
    	InitD3D(window);
    	while (true)
    	{
    		while (PeekMessage(&message, 0, 0, 0, PM_REMOVE))
    		{
    			TranslateMessage(&message);
    			DispatchMessage(&message);
    		}
    		if (message.message == WM_QUIT)
    			break;
    		RenderFrame();
    	}
    
    	CleanD3D();
    
    
    	return 0;
    }

     

     

  2. Всем привет, в уроке [gamehacking] D3D9 hook - Часть 2 в функции : GetDevice9Method есть строка 
    DWORD* vtablePtr = (DWORD*)(*((DWORD*)d3dDevicee)); которая в одних примерах работает, а в других крашит процесс, подскажите, что делать, что бы не крашило

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.