Unreal Engine ProcessEvent Hook

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
kmode exception
Seçkin Üye
Katılım
18 Tem 2022
Mesajlar
325
Çözümler
9
Tepki puanı
87
Ödüller
3
Sosyal
3 HİZMET YILI
C++:
#include "PE_Hook.hpp"

using namespace Hook;

int VTable::GetVTableSize()
{
    if (!ValidPtr((void*)m_vtable))
        return NULL;

    auto count = 0;

    MEMORY_BASIC_INFORMATION mbi;

    while (VirtualQuery(reinterpret_cast<LPVOID>(this->m_vtable[count]), &mbi, sizeof(mbi)))
    {
#define PAGE_TEXT (PAGE_EXECUTE | PAGE_EXECUTE_READ)

        if ((mbi.Protect & PAGE_NOACCESS) || !(mbi.Protect & PAGE_TEXT) || (mbi.State != MEM_COMMIT))
            break;

        if (!ValidPtr(this->m_vtable[count]))
            break;

        count++;
    }

    return count;
}

void VTable::FreeVTableCache()
{
    if (this->m_vtable_cache)
        free(this->m_vtable_cache);
}

int ProcessEventHook::FindProcessEventIndex()
{
    if (!ValidPtr((void*)m_vtable) || this->m_vtablesize == -1)
        return NULL;

    static auto module_base = (std::uintptr_t)GetModuleHandleA(NULL);

    for (int index = 0; index <= this->m_vtablesize; index++)
    {
        auto function = *reinterpret_cast<std::uintptr_t*>(this->m_vtable + (index * 0x8));

        if (!ValidPtr((void*)function))
            continue;

        if (function == (module_base + ProcessEventOffset))
        {
            return index;
        }
    }

    return -1;
}

void ProcessEventHook::ApplyHook(std::uintptr_t pClass, std::uintptr_t pOrgFunc, std::uintptr_t pFunc)
{
    if (this->m_eventindex == -1 || this->m_vtablesize == -1)
        return;

    if (pClass != m_class)
    {
        this->m_vtable = *reinterpret_cast<std::uintptr_t**>(pClass);

        if (!ValidPtr((void*)m_vtable))
            return;

        this->m_vtable_cache = reinterpret_cast<decltype(m_vtable_cache)>(malloc(m_vtablesize));

        if (!m_vtable_cache)
            return;

        memcpy(m_vtable_cache, m_vtable, m_vtablesize);

        pOrgFunc = m_vtable_cache[this->m_eventindex]; // or just (module_base + ProcessEventOffset)

        m_vtable_cache[this->m_eventindex] = pFunc;

        *reinterpret_cast<std::uintptr_t**>(pClass) = m_vtable_cache;

        this->m_class = pClass;
    }
}



C++:
#pragma once

#include <Windows.h>
#include <iostream>
#include <cstdint>

namespace Hook
{
#define ProcessEventOffset 0x274FB70

    template <typename T = void*>
    inline auto ValidPtr(T ptr) -> bool {
        return (ptr && ptr > (T)0xFFFFFF && ptr < (T)0x7FFFFFFFFFFF);
    }

    class VTable
    {
    public:
 
        int GetVTableSize();

 
        void FreeVTableCache();

        std::uintptr_t m_class;
        std::uintptr_t* m_vtable;
        int m_vtablesize;
        std::uintptr_t* m_vtable_cache;
    };

    class ProcessEventHook : public VTable
    {
    public:

        template <typename T = void*> explicit ProcessEventHook(const T pClass)
        {
            m_vtable = *(std::uintptr_t**)pClass;
            m_vtablesize = this->GetVTableSize();
            m_eventindex = this->FindProcessEventIndex();
        };


        void ApplyHook(std::uintptr_t pClass, std::uintptr_t pOrgFunc, std::uintptr_t pFunc);


        int FindProcessEventIndex();


        ~ProcessEventHook()    { this->FreeVTableCache(); }
      
    private:
        int m_eventindex;
    };
}

C++:
#include "PE_Hook.hpp"


typedef void(__fastcall* tProcessEvent)(void* Class, void* Function, void* Parms);
static tProcessEvent hkProcessEvent = nullptr;

void HookedProcessEvent(void* Class, void* Function, void* Parms)
{
    std::printf("[#] Hello From ProcessEvent");

    return hkProcessEvent(Class, Function, Parms);
}


int main()
{
    auto module_base = GetModuleHandleA(NULL);

#define GWorld 0x4633498

    auto world = *reinterpret_cast<std::uintptr_t*>(module_base + GWorld);


    static auto world_peh = Hook::ProcessEventHook(world);


    world_peh.ApplyHook(world, (std::uintptr_t)hkProcessEvent, (std::uintptr_t)HookedProcessEvent);
}


ProcessEventi Bulduktan Sonra Bu Kodları Kullanarak Bulduğunuz Offseti "intercept" edebilir "hook"layabilirsiniz, yazılım ProcessEvent offseti kullanarak process event index'ini bulur. İstediğiniz oyunun fonksiyonlarının %90'lık kısmını dilediğiniz gibi kullanabilirsiniz.

Project Coder : Skengdo
 
Moderatörün son düzenlenenleri:
aka hernos
Süper Üye
Katılım
30 Ağu 2019
Mesajlar
628
Çözümler
10
Tepki puanı
297
Ödüller
4
Yaş
29
Sosyal
6 HİZMET YILI
Bazı yerlerde ufak tefek hatalar olsada güzel çalışma. Vtable hook sessiz hooklama yöntemlerinden birisidir. Bu arada ProcessEventi hooklama sebebiniz nedir? UnrealEngine motoru ile içli dışlı olmadığım için soruyorum.
 
kmode exception
Seçkin Üye
Katılım
18 Tem 2022
Mesajlar
325
Çözümler
9
Tepki puanı
87
Ödüller
3
Sosyal
3 HİZMET YILI
Bazı yerlerde ufak tefek hatalar olsada güzel çalışma. Vtable hook sessiz hooklama yöntemlerinden birisidir. Bu arada ProcessEventi hooklama sebebiniz nedir? UnrealEngine motoru ile içli dışlı olmadığım için soruyorum.
tüm unreal engine oyunlarında eventler ProcessEvent ana fonksiyonundan geçer, fonksiyonları ve rpcl'leri kullanabilmek içinde processeventi hooklamalısın-yakalamlısın, processeventi bulduktan sonra bu şekilde kodlarla onu hooklayabilirsin. Processeventi hooklarsan oyundan istediğin kişiyi banlayabilir susturabilirsin oyun yapımcısına ait tüm fonksiyonları kullanabilirsin, ban yetkin dahi olur.
 
Słyszę, słyszę letni powiew.
Kurucu
Katılım
20 Haz 2015
Mesajlar
7,666
Çözümler
136
Tepki puanı
20,724
Ödüller
25
10 HİZMET YILI
tüm unreal engine oyunlarında eventler ProcessEvent ana fonksiyonundan geçer, fonksiyonları ve rpcl'leri kullanabilmek içinde processeventi hooklamalısın-yakalamlısın, processeventi bulduktan sonra bu şekilde kodlarla onu hooklayabilirsin. Processeventi hooklarsan oyundan istediğin kişiyi banlayabilir susturabilirsin oyun yapımcısına ait tüm fonksiyonları kullanabilirsin, ban yetkin dahi olur.
Process event hookuyla oyun yapımcısına ait tüm fonksiyonları kullanabilirsin adlı bağlantıyı anlamadım. Hayatımda daha çok az salakça bir cümle duydum. Tebrik ederim.
 
Słyszę, słyszę letni powiew.
Kurucu
Katılım
20 Haz 2015
Mesajlar
7,666
Çözümler
136
Tepki puanı
20,724
Ödüller
25
10 HİZMET YILI
Bazı yerlerde ufak tefek hatalar olsada güzel çalışma. Vtable hook sessiz hooklama yöntemlerinden birisidir. Bu arada ProcessEventi hooklama sebebiniz nedir? UnrealEngine motoru ile içli dışlı olmadığım için soruyorum.
Bağlantıları görmek için lütfen Giriş Yap
 
kmode exception
Seçkin Üye
Katılım
18 Tem 2022
Mesajlar
325
Çözümler
9
Tepki puanı
87
Ödüller
3
Sosyal
3 HİZMET YILI
Process event hookuyla oyun yapımcısına ait tüm fonksiyonları kullanabilirsin adlı bağlantıyı anlamadım. Hayatımda daha çok az salakça bir cümle duydum. Tebrik ederim.
Evet şimdi okuyunca banada saçma geldi, kısacası o cümleyi açıklamak gerekirse şöyle söylemek isterim :

Normalde oyun yapımcısının kendi yetkileri olur ve bunları kullanamazsınız, ue'de processevent denilen bir olay vardır tüm fonksiyonları annesi babası sayılır, tüm fonksiyonlar processevent'den geçer, eğer onu hooklayabilirseniz oyunda tam yetki alabilirsiniz. Kısacası gizli tüm fonksiyonlara rpc'lere erişim sağlarsınız, kısacası artık sizde oyunun bir parçası sayılırsınız. RPC'leri callayarak fonksiyonları olduğu sürece istediğiniz şeyleri yapabilirsiniz.
 
Słyszę, słyszę letni powiew.
Kurucu
Katılım
20 Haz 2015
Mesajlar
7,666
Çözümler
136
Tepki puanı
20,724
Ödüller
25
10 HİZMET YILI
Evet şimdi okuyunca banada saçma geldi, kısacası o cümleyi açıklamak gerekirse şöyle söylemek isterim :

Normalde oyun yapımcısının kendi yetkileri olur ve bunları kullanamazsınız, ue'de processevent denilen bir olay vardır tüm fonksiyonları annesi babası sayılır, tüm fonksiyonlar processevent'den geçer, eğer onu hooklayabilirseniz oyunda tam yetki alabilirsiniz. Kısacası gizli tüm fonksiyonlara rpc'lere erişim sağlarsınız, kısacası artık sizde oyunun bir parçası sayılırsınız. RPC'leri callayarak fonksiyonları olduğu sürece istediğiniz şeyleri yapabilirsiniz.
Are u sure u know turkish ? It seems u are using translate.
 
Słyszę, słyszę letni powiew.
Kurucu
Katılım
20 Haz 2015
Mesajlar
7,666
Çözümler
136
Tepki puanı
20,724
Ödüller
25
10 HİZMET YILI
ue'de processevent denilen bir olay vardır tüm fonksiyonları annesi babası sayılır, tüm fonksiyonlar processevent'den geçer
Yanlış.
1692493068724.png

Konu için teşekkürler.
 
kmode exception
Seçkin Üye
Katılım
18 Tem 2022
Mesajlar
325
Çözümler
9
Tepki puanı
87
Ödüller
3
Sosyal
3 HİZMET YILI
UFUnction'u ve UStruct'ı hooklamadan'da rpc'leri kullanabilirsiniz, bunlar eski parametreler. Documentation güncel değil, güncel olarak UObject hooklanıyor. Ne yazıkki bu argüman saçma. Hangi oyundan bahsettiğinizi bilmiyorum ama pso için böyle.
Post automatically merged:

Adam haklı bilgilendirme için teşekkürler reis gidip kendimi admin yapacaktım oyunda az daha
Ahaha, ne yazıkki dediğim gerçek dostum şuanda güncel olarak projeye sahibim. UObject ile ProcessEventi hooklamam yetiyor fonksiyonları ve rpc'leri kullanabilmem için.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst