Гость hasio Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Вопрос: как исправить или переделать алгоритм хука, а точнее как правильно хукать. Видел уроки про джампы адресов, но тут совсем иначе. Скрытый текст --Хук: pPanelHook = new CVMTHookManager( ( PDWORD* ) pPanel ); oPaintTraverse = ( PaintTraverse_ )pPanelHook->dwHookMethod( ( DWORD )PaintTraverse_Hooked1, 41 ); --Код методов: CVMTHookManager* pPanelHook; CVMTHookManager* pCreatMoveHook; --Код класса: class CVMTHookManager { public: CVMTHookManager( void ) { memset( this, 0, sizeof( CVMTHookManager ) ); } CVMTHookManager( PDWORD* ppdwClassBase ) { bInitialize( ppdwClassBase ); } ~CVMTHookManager( void ) { UnHook(); } bool bInitialize( PDWORD* ppdwClassBase ) { m_ppdwClassBase = ppdwClassBase; m_pdwOldVMT = *ppdwClassBase; m_dwVMTSize = dwGetVMTCount( *ppdwClassBase ); m_pdwNewVMT = new DWORD[ m_dwVMTSize ]; memcpy( m_pdwNewVMT, m_pdwOldVMT, sizeof( DWORD ) * m_dwVMTSize ); *ppdwClassBase = m_pdwNewVMT; return true; } bool bInitialize( PDWORD** pppdwClassBase ) // fix for pp { return bInitialize( *pppdwClassBase ); } void UnHook( void ) { if ( m_ppdwClassBase ) { *m_ppdwClassBase = m_pdwOldVMT; } } void ReHook( void ) { if ( m_ppdwClassBase ) { *m_ppdwClassBase = m_pdwNewVMT; } } int iGetFuncCount( void ) { return ( int ) m_dwVMTSize; } DWORD dwGetMethodAddress( int Index ) { if ( Index >= 0 && Index <= ( int )m_dwVMTSize && m_pdwOldVMT != NULL ) { return m_pdwOldVMT[ Index ]; } return NULL; } PDWORD pdwGetOldVMT( void ) { return m_pdwOldVMT; } DWORD dwHookMethod( DWORD dwNewFunc, unsigned int iIndex ) { if ( m_pdwNewVMT && m_pdwOldVMT && iIndex <= m_dwVMTSize && iIndex >= 0 ) { m_pdwNewVMT[ iIndex ] = dwNewFunc; return m_pdwOldVMT[ iIndex ]; } return NULL; } private: DWORD dwGetVMTCount( PDWORD pdwVMT ) { DWORD dwIndex = 0; for ( dwIndex = 0; pdwVMT[ dwIndex ]; dwIndex++ ) { if ( IsBadCodePtr( ( FARPROC ) pdwVMT[ dwIndex ] ) ) { break; } } return dwIndex; } PDWORD* m_ppdwClassBase; PDWORD m_pdwNewVMT, m_pdwOldVMT; DWORD m_dwVMTSize; }; // Читаем правила. На первый раз устное предупреждение. Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 Привет! Что говорит отладчик? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 (изменено) Это даже не полный исходник, почитай тему там откуда копировал код, там все написано. 39 минуты назад, hasio сказал: а точнее как правильно хукать Объявляешь прототип функции, после вызываешь функцию из виртуальной таблицы по индексу и передаешь аргументы. Изменено 23 апреля, 2017 пользователем partoftheworlD Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость hasio Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 11 минуту назад, partoftheworlD сказал: Это даже не полный исходник, почитай тему там откуда копировал код, там все написано. Этот код взят с агнлоязычного форума, где в ответах только спасибо. Поэтому пытаюсь разобратся сам. Дело в том, что код рабочий, просто античит палит хук. Чтобы не быть забаненым античитом, нужно переписать хук, а что да как, в этом вопрос. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 апреля, 2017 Поделиться Опубликовано 23 апреля, 2017 1 час назад, hasio сказал: Поэтому пытаюсь разобратся сам. Дело в том, что код рабочий, просто античит палит хук. Код 2014 года, за это время вак обновили и с начала 2016 конца 2015 года он палит любые хуки. Ссылка на комментарий Поделиться на другие сайты Поделиться
roma912 Опубликовано 24 апреля, 2017 Поделиться Опубликовано 24 апреля, 2017 (изменено) Зачем тебе эти усложнения в виде хуков. 1. Эти хуки очень просто вычисляет античит - банан 2. Чит становится internal - намного проще найти матрицу и сделать external 3. Ну и самый главный аргумент - ты будешь вместо простого чтения адресов, использовать еще и запись в память игры. Esp к примеру можно сделать с помощью обычного чтения адресов - external (+ не заметно чита при записи) Изменено 24 апреля, 2017 пользователем roma91212 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения