Шаблоны адресов C ++ ASM IDA - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь написать шаблон поиска для созданного мной тестового приложения, использующего Directx9, но у меня возникают некоторые проблемы с поиском правильного шаблона запуска.Указатель, который я пытаюсь найти, - это указатель устройства IDIRECT3D9.

unsigned long dwStartAddress = 0x14008613F, dwLen = ( 0x14008613F - 0x14008615D );

bool bDataCompare(const unsigned char* pData, const unsigned char* bMask, const char* szMask)
{
    for (; *szMask; ++szMask, ++pData, ++bMask)
        if (*szMask == 'x' && *pData != *bMask)
            return false;
    return (*szMask) == 0;
}

unsigned long dwFindPattern(unsigned char *bMask, char * szMask, unsigned long dw_Address = dwStartAddress, unsigned long dw_Len = dwLen)
{
    for (unsigned long i = 0; i < dw_Len; i++)
        if (bDataCompare((unsigned char*)(dw_Address + i), bMask, szMask))
            return (unsigned long)(dw_Address + i);
    return 0;
}

Я копал файл d3d9.h и посмотрел примеры проектов для Microsoft DirectX SDK (август 2009 г.), найденные здесь.https://www.microsoft.com/en-us/download/details.aspx?id=23549

Согласно https://msdn.microsoft.com/en-us/library/windows/desktop/bb219676(v=vs.85).aspx Direct3DCreate9Ex проверяет, поддерживаются ли функции D3Dx9ex.

Согласно https://msdn.microsoft.com/en-us/library/windows/desktop/bb174313(v=vs.85).aspx Direct3DCreate9 :: CreateDevice возвращает указатель

enter image description here

ниже я делаю предположение, что могу начать сканирование моего адреса с 0x14008613F и завершить с (0x14008613F - 0x14008615D)

Также я делаюпредположение, что

jnz short loc_14008615E
mov [rbx+0E8h], eax

- это местоположение указателя моего устройства, которое я ищу.с

[rbx+0E8h]

указателем, возвращаемым из Direct3DCreate9 :: CreateDevice

Надеюсь, я получил достаточно информации об этом, так как это моя первая попытка любых реальных манипуляций с памятью.

Редактировать: важна моя подпись и маска:

DWORD  m_dwaddy = dwFindPattern((PBYTE)"\x00\x48\x8B\xF8", (char *)"?xxx");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...