Гайд Present Hook или Obs bypass(CSGOSimple)

Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
заходим в sdk.hpp и после g_PhysSurface вставляем вот это
Код:
extern IDirect3DDevice9* g_Overlay;
extern IDirect3DDevice9* g_Reset;
потом заходим в sdk.cpp и также после g_PhysSurface вставляем
Код:
IDirect3DDevice9* g_Overlay = nullptr;
IDirect3DDevice9* g_Reset = nullptr;
дальше тут же находим dx9api после него пишем
Код:
auto overlay = GetModuleHandleA("gameoverlayrenderer.dll");
дальше видим g_ClientState после него пишем это
Код:
g_Overlay = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 DB") + 2);
g_Reset = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 FF 78 18") + 2);
дальше заходим в hooks.hpp в index после последнего прописываем
Код:
constexpr auto PresentScene = 17;
дальше ищем ласт typedef,using нашли после него пишем
Код:
using PresentScene = long(__stdcall*)(IDirect3DDevice9*, const RECT*, const RECT*, HWND, const RGNDATA*);
после этого ищем хуки и после последнего прописываем сам хук
Код:
long __stdcall hkPresent (IDirect3DDevice9* pDevice, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion);
дальше идем в hooks.cpp
после clientmode_hook или любой другой прописываем
Код:
VMTHook* present_hook;
VMTHook* reset_hook;
дальше в иницизилизации хуков пишем
Код:
present_hook = new VMTHook(g_Overlay);
reset_hook = new VMTHook(g_Reset);
present_hook->HookFunction(hkPresent,0);
reset_hook-> HookFunction(hkReset,0);
а теперь сами хуки для байпасса обс
Код:
long __stdcall hkPresent(IDirect3DDevice9* device, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion)
{
static auto ofunc = present_hook->GetOriginalFunction<PresentScene>(index::PresentScene);
ImGui_ImplDX9_NewFrame();
auto esp_drawlist = Render::Get().RenderScene();
Menu::Get().Render();
Render::Get().BeginScene();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData(), esp_drawlist);
return ofunc(device, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}
//Reset
long __stdcall hkReset(IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
auto oReset = reset_hook->GetOriginalFunction<Reset>(index::Reset);
Menu::Get().OnDeviceLost();
auto hr = oReset(device, pPresentationParameters);
if (hr >= 0) {
Menu::Get().OnDeviceReset();
}
return hr;
}
вот на это и все, этот метод байпасит обс, да на земетку это кастом vmt hook если че
 
Последнее редактирование:
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
У меня сейчас двоякое чувство и пара вопросов по данной теме:
1) Зачем тебе нужно два указателя на Dx устройство(таблица то одна)
2) Зачем тебе два раза создавать объект VMTHook когда можно обойтись одним(опять же: таблица одна)?
 

UPD: в предоставленном виде код не валиден. Объяснение ниже по теме.
Как-то так:
Код:
IDirect3DDevice9* g_Overlay = nullptr; //хотя зачем это все нужно делать глобально?
VMTHook* DxHookInterface = nullptr;



using PresentFn = long(__stdcall*)(IDirect3DDevice9*, const RECT*, const RECT*, HWND, const RGNDATA*);
using ResetFn   = long(__stdcall*)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);

long __stdcall myPresent(IDirect3DDevice9* device, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion)
{
static auto pPresent = DxHookInterface->GetOriginalFunction<PresentFn>(index::PresentScene);

//you Draw

return pPresent(device, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}

long __stdcall myReset(IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    static auto pReset = DxHookInterface->GetOriginalFunction<ResetFn>(index::Reset);
    //you Lost
    auto hReturn = pReset(device, pPresentationParameters);
    //you Reset
    return hReturn;
}





//youHook
g_Overlay = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 DB") + 2);

DxHookInterface = new VMTHook(g_Overlay);
DxHookInterface->HookFunction(myPresent,index::PresentScene);
DxHookInterface-> HookFunction(myReset,index::Reset);




//you UnHook
DxHookInterface->unhook_index(index::PresentScene);
DxHookInterface-> unhook_index(index::Reset);
 
Последнее редактирование:
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У меня сейчас двоякое чувство и пара вопросов по данной теме:
1) Зачем тебе нужно два указателя на Dx устройство(таблица то одна)
2) Зачем тебе два раза создавать объект VMTHook когда можно обойтись одним(опять же: таблица одна)?
 
Как-то так:
Код:
IDirect3DDevice9* g_Overlay = nullptr; //хотя зачем это все нужно делать глобально?
VMTHook* DxHookInterface = nullptr;



using PresentFn = long(__stdcall*)(IDirect3DDevice9*, const RECT*, const RECT*, HWND, const RGNDATA*);
using ResetFn   = long(__stdcall*)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);

long __stdcall myPresent(IDirect3DDevice9* device, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion)
{
static auto pPresent = DxHookInterface->GetOriginalFunction<PresentFn>(index::PresentScene);

//you Draw

return pPresent(device, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}

long __stdcall myReset(IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    static auto pReset = DxHookInterface->GetOriginalFunction<ResetFn>(index::Reset);
    //you Lost
    auto hReturn = pReset(device, pPresentationParameters);
    //you Reset
    return hReturn;
}





//youHook
g_Overlay = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 DB") + 2);

DxHookInterface = new VMTHook(g_Overlay);
DxHookInterface->HookFunction(myPresent,index::PresentScene);
DxHookInterface-> HookFunction(myReset,index::Reset);




//you UnHook
DxHookInterface->unhook_index(index::PresentScene);
DxHookInterface-> unhook_index(index::Reset);
Это новый уровень кодинга. Но уже каждый второй пКодер знает, как найти указатель на презент в гор.длл
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
У меня сейчас двоякое чувство и пара вопросов по данной теме:
1) Зачем тебе нужно два указателя на Dx устройство(таблица то одна)
2) Зачем тебе два раза создавать объект VMTHook когда можно обойтись одним(опять же: таблица одна)?
 
Как-то так:
Код:
IDirect3DDevice9* g_Overlay = nullptr; //хотя зачем это все нужно делать глобально?
VMTHook* DxHookInterface = nullptr;



using PresentFn = long(__stdcall*)(IDirect3DDevice9*, const RECT*, const RECT*, HWND, const RGNDATA*);
using ResetFn   = long(__stdcall*)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);

long __stdcall myPresent(IDirect3DDevice9* device, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion)
{
static auto pPresent = DxHookInterface->GetOriginalFunction<PresentFn>(index::PresentScene);

//you Draw

return pPresent(device, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}

long __stdcall myReset(IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    static auto pReset = DxHookInterface->GetOriginalFunction<ResetFn>(index::Reset);
    //you Lost
    auto hReturn = pReset(device, pPresentationParameters);
    //you Reset
    return hReturn;
}





//youHook
g_Overlay = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 DB") + 2);

DxHookInterface = new VMTHook(g_Overlay);
DxHookInterface->HookFunction(myPresent,index::PresentScene);
DxHookInterface-> HookFunction(myReset,index::Reset);




//you UnHook
DxHookInterface->unhook_index(index::PresentScene);
DxHookInterface-> unhook_index(index::Reset);
тут надо 2 раза получать, а еще индексы должны быть нулевые. Т.к. это паттерн не на девайс, а на функцию
 
это не указатель на Present, а указатель на таблицу методов DX(Vmt)
в данном случае нет
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
тут надо 2 раза получать, а еще индексы должны быть нулевые. Т.к. это паттерн не на девайс, а на функцию
херню не неси))
даже вот эта дичь(за которую автору нужно все лицо распинать)
Код:
constexpr auto PresentScene = 17;
говорит нам, что мы используем смещение по vmt таблице
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
У меня сейчас двоякое чувство и пара вопросов по данной теме:
1) Зачем тебе нужно два указателя на Dx устройство(таблица то одна)
2) Зачем тебе два раза создавать объект VMTHook когда можно обойтись одним?опять же: таблица одна)?
 
Как-то так:
Код:
IDirect3DDevice9* g_Overlay = nullptr; //хотя зачем это все нужно делать глобально?
VMTHook* DxHookInterface = nullptr;



using PresentFn = long(__stdcall*)(IDirect3DDevice9*, const RECT*, const RECT*, HWND, const RGNDATA*);
using ResetFn   = long(__stdcall*)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);

long __stdcall myPresent(IDirect3DDevice9* device, const RECT *pSourceRect, const RECT *pDestRect, HWND hDestWindowOverride, const RGNDATA *pDirtyRegion)
{
static auto pPresent = DxHookInterface->GetOriginalFunction<PresentFn>(index::PresentScene);

//you Draw

return pPresent(device, pSourceRect, pDestRect, hDestWindowOverride, pDirtyRegion);
}

long __stdcall myReset(IDirect3DDevice9* device, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    static auto pReset = DxHookInterface->GetOriginalFunction<ResetFn>(index::Reset);
    //you Lost
    auto hReturn = pReset(device, pPresentationParameters);
    //you Reset
    return hReturn;
}





//youHook
g_Overlay = **(IDirect3DDevice9***)(Utils::PatternScan(overlay, "FF 15 ? ? ? ? 8B F8 85 DB") + 2);

DxHookInterface = new VMTHook(g_Overlay);
DxHookInterface->HookFunction(myPresent,index::PresentScene);
DxHookInterface-> HookFunction(myReset,index::Reset);




//you UnHook
DxHookInterface->unhook_index(index::PresentScene);
DxHookInterface-> unhook_index(index::Reset);
Пожалуйста, авторизуйтесь для просмотра ссылки.

дв таблица одна, но есть одно, но паттерн разный, и у меня лично олним патерном не робит крашит почему то, но с паттерном ресета и презента норм, idk почему так
 
херню не неси))
даже вот эта дичь(за которую автору нужно все лицо распинать)
Код:
constexpr auto PresentScene = 17;
говорит нам, что мы используем смещение по vmt таблице
где это я говорил про смещение, ась?
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
херню не неси))
даже вот эта дичь(за которую автору нужно все лицо распинать)
Код:
constexpr auto PresentScene = 17;
говорит нам, что мы используем смещение по vmt таблице
Ну ну, конечно. Я сам лично находил этот паттерн. А вот как надо использовать.
Код:
auto present = U::FindPattern("gameoverlayrenderer.dll", "OverlayPresent", "FF 15 ? ? ? ? 8B F8 85 DB") + 2;
oPresent = (PresentFn)((new CVMTHookManager2((PDWORD*)present))->dwHookMethod((DWORD)&Hooked_Present, 0));
еще вопросы?
 
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
и да тут указатель у меня не на сам IDrectDevice таблицу, а оверлей стима
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
вот так согласен. ТАк все встает на свои места, но по тексту ТС я этого не вижу))

где это я говорил про смещение, ась?
советую для начала подучить хотя бы основы.
и да тут указатель у меня не на сам IDrectDevice таблицу, а оверлей стима
совет выше
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,173
Поинты[?]
162K
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
вот так согласен. ТАк все встает на свои места, но по тексту ТС я этого не вижу))


советую для начала подучить хотя бы основы.

совет выше
учить основы ахахахахаха, я их знаю чувак, раз, два у меня vmthook такой что я могу паттерном индекс хукать паттерн мне не мешает хукать индекс виртуальной функции
 
ну а тогда зачем ты юзаешь вмт хуки, так еще и с 17 индексом. как у тебя это вообще работает :NotLikeThis:
ну вопросы к моему вмт
 
Эксперт
Статус
Оффлайн
Регистрация
12 Июн 2014
Сообщения
991
Реакции[?]
1,209
Поинты[?]
3K
учить основы ахахахахаха, я их знаю чувак, раз, два у меня vmthook такой что я могу паттерном индекс хукать паттерн мне не мешает хукать индекс виртуальной функции
хук таблиц и методов у тебя самый обычный, твои "патерны" выдают тебе просто адрес в пространстве.... и да, основ ты не знаешь, судя по этому сообщению
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,173
Поинты[?]
162K
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2018
Сообщения
134
Реакции[?]
35
Поинты[?]
0
хук таблиц и методов у тебя самый обычный, твои "патерны" выдают тебе просто адрес в пространстве.... и да, основ ты не знаешь, судя по этому сообщению
хм, основы это C++ 11,14 , а остальное уже не считается основами, если что
 
выпал в осадок, увозите меня нахуй
я хз, честно сказать я сам хз, как он робит, честно писал под действием алкоголя
 
и да раз при паттерне надо хукать 0 индекс, почему паттерн девайсп ендсцене хукается его индекс?
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,173
Поинты[?]
162K
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что за херня выше? Оно не будет работать в его реализации. Он спастил одно в другое. Пусть индексы по 0 поставит, тогда все будет ок.
учить основы ахахахахаха, я их знаю чувак, раз, два у меня vmthook такой что я могу паттерном индекс хукать паттерн мне не мешает хукать индекс виртуальной функции
 

ну вопросы к моему вмт
как это прочесть? По этим паттернам (грубо говоря) ты получаешь указатель на саму функцию, а не на класс с этими функциями (его вмт таблицу) и индексы сдесь нахуй не нужны. 0 индекс ставится, чтоб хукнуть то, что лежит по этому адресу.
 
потому что блядь это указатель на саму таблицу, а по 17 индексу указатель на функцию.
(Это ему, лень цитировать самому)
 
Псевдоадмин
Администратор
Статус
Оффлайн
Регистрация
17 Май 2018
Сообщения
183
Реакции[?]
635
Поинты[?]
78K
хм, основы это C++ 11,14 , а остальное уже не считается основами, если что
 

я хз, честно сказать я сам хз, как он робит, честно писал под действием алкоголя
 
и да раз при паттерне надо хукать 0 индекс, почему паттерн девайсп ендсцене хукается его индекс?
Тебя зовут Karen
@
Ты нереально гениален
@
Решаешь поделиться с простым людом секретной инфой
@
Тебя называют дебилом и отправляют учить основы
@
Искренне не понимаешь почему тебя отправили учить основы
@
Ведь у тебя такой vmthook, что все тяночки твои
@
Ты уже не Karen, а Гаспарян :roflanPominki:
 
В игре Source SDK
Забаненный
Статус
Оффлайн
Регистрация
10 Янв 2017
Сообщения
2,148
Реакции[?]
806
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу