Вопрос PostReceivedNetMessage new idx?

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
20 Янв 2022
Сообщения
188
Реакции
40
PostReceivedNetMessage new idx?
 
а чо он не экзекьютиться?
Вчера смотрел в классе CNetChan 71 индекс брякнув его на локалке, функция не вызывалась.
Бля, реально не вызывается
Я думал это я проебланил индекс, но функция-то та же
 
потому что PostReceivedNetMessage виртуальная функа нихуя не делает она токо вызывает CTSQueue<CNetworkMessageSignalQueue<CEventIDManager_NetChan,BogusType_t>::QueuedMessage_t,false>::PushItem
которая нынче просто напрямую вызывается вместо вызова PostReceivedNetMessage
(ну т.е. если у гейба раньше был код в стиле условно
C++:
Expand Collapse Copy
CNetChan::ProcessPackets:
...
this->PostReceivedNetMessage(blablabla);
...

CNetChan::PostReceivedNetMessage
this->in_network_queue.PushItem(blablabla)
то щас он стал
C++:
Expand Collapse Copy
CNetChan::ProcessPackets:
...
this->in_network_queue.PushItem(blablabla)
...
)
 
потому что PostReceivedNetMessage виртуальная функа нихуя не делает она токо вызывает CTSQueue<CNetworkMessageSignalQueue<CEventIDManager_NetChan,BogusType_t>::QueuedMessage_t,false>::PushItem
которая нынче просто напрямую вызывается вместо вызова PostReceivedNetMessage
(ну т.е. если у гейба раньше был код в стиле условно
C++:
Expand Collapse Copy
CNetChan::ProcessPackets:
...
this->PostReceivedNetMessage(blablabla);
...

CNetChan::PostReceivedNetMessage
this->in_network_queue.PushItem(blablabla)
то щас он стал
C++:
Expand Collapse Copy
CNetChan::ProcessPackets:
...
this->in_network_queue.PushItem(blablabla)
...
)
Ну я так и понял, хотел написать, что перешёл в ту сабку, что была в ПостРесиве и там всё вызывается, но не стал.
Ну ничего, как-нибудь там хукнём что-то ещё, либо забью на чит из-за этого.
 
Ну я так и понял, хотел написать, что перешёл в ту сабку, что была в ПостРесиве и там всё вызывается, но не стал.
Ну ничего, как-нибудь там хукнём что-то ещё, либо забью на чит из-за этого.
ну можно хукнуть что-нибудь повыше и самому in_network_queue эту обрабатывать(это linked-list-like структурка замкнутая/кольцевая(вместо нуллптр в последнем элементе там указатель на саму структуру))(там есть CNetworkSerializerPB и само сообщение), на CNetChan + 0xF0 вроде она(PostReceivedNetMessage просто в нее добавляет)
 
Либо использовать фильтры. Ниже PostRecieveeNetMsg по виртуалкам есть функция что регает листнера. Он возвращает bool (Может блочить получение опр мсг например)
 
Либо использовать фильтры. Ниже PostRecieveeNetMsg по виртуалкам есть функция что регает листнера. Он возвращает bool (Может блочить получение опр мсг например)
если кому-то надо,
CNetChan::InstallMessageFilter(INetworkMessageProcessingPreFilter *)
только она не ниже а выше на две(69 индекс) PostReceivedNetMsg
1716313581635.png

C++:
Expand Collapse Copy
class INetworkMessageProcessingPreFilter
{
    enum EFilterResult : bool
    {
        ALLOW_MESSAGE,
        DROP_MESSAGE,
    };
    virtual EFilterResult FilterMessage(CNetworkSerializerPB*, google::protobuf::Message*, CNetChan*) = 0;
}
 
если кому-то надо,
CNetChan::InstallMessageFilter(INetworkMessageProcessingPreFilter *)
только она не ниже а выше на две(69 индекс) PostReceivedNetMsg
Посмотреть вложение 277294
C++:
Expand Collapse Copy
class INetworkMessageProcessingPreFilter
{
    enum EFilterResult : bool
    {
        ALLOW_MESSAGE,
        DROP_MESSAGE,
    };
    virtual EFilterResult FilterMessage(CNetworkSerializerPB*, google::protobuf::Message*, CNetChan*) = 0;
}
А еще есть CGameMessages через которые можно фильтровать. Весь трафик вальв можно фильтровать без хуков. Листнеры онли. Включая GC.
Сурс2 позволяет сделать полностью хак на листнерах и тому подобному, не знаю кто еще юзает хуки для с2.

Про индекс проебался. сорян, я уставший ласт неделю и иногда мозг вмирает полностью.
 
so i need to do something like this one

cpp:
Expand Collapse Copy
    template<typename T = void>
    static T* GetInterface(const char* dllName, const char* interfaceName) {
        auto CreateInterface = GetExport(dllName, "CreateInterface");
        return (T*)CreateInterface(interfaceName, nullptr);
    }


static auto networksystemMgr = GetInterface <VClass>("networksystem.dll", "CNetChan");
networksystemMgr ->GetVFunc< 69 >()


 ===================
HERE IS MY    VCLASS    
===================   

public:
    virtual void dummy_fn() = 0; // so that classes have a vtable

    template<typename T>
    T&Field(int offset) const {
        if (!IsValidReadPtr((uintptr_t)this + offset))
            throw "VClass::Field access violation";
        return [I](T[/I])((uintptr_t)this + offset);
    }

    template<typename T>
    T Member(int offset/[I], T defaultValue = T{}[/I]/) const {
        if (!IsValidReadPtr((uintptr_t)this + offset))
            return T{};
        return [I](T[/I])((uintptr_t)this + offset);
    }

    // Gets a pointer to a type via the offset but does not dereference it
    template<typename T>
    T* MemberInline(int offset) const {
        return (T*)((uintptr_t)this + offset);
    }

    Function GetVFunc(int index) const
    {
        return Function(([I](uintptr_t*[/I])this)[index]);
    }

    template<uint32_t index, typename RET = void*, typename ...T>
    RET CallVFunc(T... t) {
        return GetVFunc(index).Call<RET>(this, t...);
    }
};
did i get everything right?
 
Последнее редактирование:
so i need to do something like this one

cpp:
Expand Collapse Copy
    template<typename T = void>
    static T* GetInterface(const char* dllName, const char* interfaceName) {
        auto CreateInterface = GetExport(dllName, "CreateInterface");
        return (T*)CreateInterface(interfaceName, nullptr);
    }


static auto networksystemMgr = GetInterface <VClass>("networksystem.dll", "CNetChan");
networksystemMgr ->GetVFunc< 69 >()


===================
HERE IS MY    VCLASS   
===================  

public:
    virtual void dummy_fn() = 0; // so that classes have a vtable

    template<typename T>
    T&Field(int offset) const {
        if (!IsValidReadPtr((uintptr_t)this + offset))
            throw "VClass::Field access violation";
        return [I](T[/I])((uintptr_t)this + offset);
    }

    template<typename T>
    T Member(int offset/[I], T defaultValue = T{}[/I]/) const {
        if (!IsValidReadPtr((uintptr_t)this + offset))
            return T{};
        return [I](T[/I])((uintptr_t)this + offset);
    }

    // Gets a pointer to a type via the offset but does not dereference it
    template<typename T>
    T* MemberInline(int offset) const {
        return (T*)((uintptr_t)this + offset);
    }

    Function GetVFunc(int index) const
    {
        return Function(([I](uintptr_t*[/I])this)[index]);
    }

    template<uint32_t index, typename RET = void*, typename ...T>
    RET CallVFunc(T... t) {
        return GetVFunc(index).Call<RET>(this, t...);
    }
};
did i get everything right?
CNetChan is neither an interface nor a singleton https://yougame.biz/threads/312511/#post-3115952
and the index is currently 67 not 69
 
Назад
Сверху Снизу