Гайд NoSmoke Overlay

Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,791
Реакции[?]
1,073
Поинты[?]
29K
для начала вам нужен CViewRender класс, скипайте этот шаг если он у вас уже есть
Код:
class CViewSetup;

class CViewRender
{
public:
    void RenderView(CViewSetup &view, CViewSetup &hud, int nClearFlags, int whatToDraw)
    {
        using vfunc = void(__thiscall*)(void*, CViewSetup&, CViewSetup&, int, int);
        return CallVFunction<vfunc>(this, 6)(this, view, hud, nClearFlags, whatToDraw);
    }
};
после этого нужно захватить интерфейс CViewRender
Код:
CViewRender* Interfaces::m_pViewRender = nullptr;
CViewRender* Interfaces::ViewRender()
{
    if (!m_pViewRender)
    {
        m_pViewRender = **reinterpret_cast<CViewRender***>(Utils::FindSignature("client_panorama.dll", "A1 ? ? ? ? B9 ? ? ? ? C7 05 ? ? ? ? ? ? ? ? FF 10") + 1);
    }
    return m_pViewRender;
}
теперь нужно хукнуть RenderSmokeOverlay, его индекс - 41
Код:
using RenderSmokeOverlay_t = void(__thiscall*)(CViewRender*, bool);

void __stdcall Hooked_RenderSmokeOverlay(bool unknown);

extern RenderSmokeOverlay_t g_fnOriginalRenderSmokeOverlay;
unique_ptr<VFTableHook> g_pViewRenderHook = nullptr;
RenderSmokeOverlay_t g_fnOriginalRenderSmokeOverlay = nullptr;
в инициализацию хуков:
g_pViewRenderHook = make_unique<VFTableHook>(Interfaces::ViewRender());
g_fnOriginalRenderSmokeOverlay = g_pViewRenderHook->Hook(41, reinterpret_cast<RenderSmokeOverlay_t>(Hooked_RenderSmokeOverlay)); // CViewRender::RenderSmokeOverlay
и осталось лишь сделать
Код:
void __stdcall Hooked_RenderSmokeOverlay(bool unknown)
{
    if(!g_Options.misc.no_smoke)
        g_fnOriginalRenderSmokeOverlay(Interfaces::ViewRender(), unknown);
}
вот и все (я надеюсь вам хватит мозга переделать все под свой сдк) :)
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
27 Сен 2018
Сообщения
45
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
I get crash.
 
Похожие темы
Сверху Снизу