Гайд Продолжение. вбе(партикли)

Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
Я, кстати, тоже догадался, что с референсами в функциях типа WorldToScreen будет нечисто

По поводу партиклменеджера наревёрсил вчера:
Код:
class CDOTAParticleManager : public VClass {

public:
    enum class ParticleAttachment_t : int {
        PATTACH_INVALID = -1,
        PATTACH_ABSORIGIN = 0,
        PATTACH_ABSORIGIN_FOLLOW = 1,
        PATTACH_CUSTOMORIGIN = 2,
        PATTACH_CUSTOMORIGIN_FOLLOW = 3,
        PATTACH_POINT = 4,
        PATTACH_POINT_FOLLOW = 5,
        PATTACH_EYES_FOLLOW = 6,
        PATTACH_OVERHEAD_FOLLOW = 7,
        PATTACH_WORLDORIGIN = 8,
        PATTACH_ROOTBONE_FOLLOW = 9,
        PATTACH_RENDERORIGIN_FOLLOW = 10,
        PATTACH_MAIN_VIEW = 11,
        PATTACH_WATERWAKE = 12,
        PATTACH_CENTER_FOLLOW = 13,
        PATTACH_CUSTOM_GAME_STATE_1 = 14,
        PATTACH_HEALTHBAR = 15,
        MAX_PATTACH_TYPES = 16,
    };
    struct ParticleInfo {
        const char* particleName;
        ParticleAttachment_t attachmentType;
        BaseEntity* ent;
    private:
        void* unk0 = nullptr;
        void* unk1 = nullptr;
        void* unk2 = nullptr;
        void* unk3 = nullptr;
        void* unk4 = nullptr;
    };

    class Particle : public VClass {
    public:
        VClass* GetParticleCollection() {
            return Member<VClass*>(0x20);
        }
        void SetControlPoint(int idx, Vector3* pos) {
            auto coll = GetParticleCollection();
            coll->GetVFunc(0x80 / 8)(coll, idx, pos);
        }
    };
    struct ParticleContainer {
        Particle* GetParticle() {
            return *(Particle**)((uintptr_t)this + 0x10);
        }
    };

    int GetParticleCount() {
        return Member<uint32_t>(0x80);
    }
    ParticleContainer** GetParticleArray() {
        return Member<ParticleContainer**>(0x88);
    }

    uint32_t GetHandle() {
        return Member<uint32_t>(0x98);
    }
    void IncHandle() {
        *(uint32_t*)((uintptr_t)this + 0x98) = GetHandle() + 1;
    }

    Particle* CreateParticle(ParticleInfo info) {
        IncHandle();
        GetVFunc(7)(this, GetHandle(), info);
        return GetParticleArray()[GetParticleCount() - 1]->GetParticle();
    }
};
Код:
// да, знаю, на криэйтпартикл надо нормальную обёртку написать
CDOTAParticleManager::ParticleInfo info{};
                info.attachmentType = CDOTAParticleManager::ParticleAttachment_t::PATTACH_ABSORIGIN_FOLLOW;
                info.particleName = "particles/ui_mouseactions/selected_ring.vpcf";
                info.ent = (BaseEntity*)assignedHero;

                Vector3 color{ 255,0,255 };
                Vector3 radius{ 1200, 255, 0 };
                auto particle = Globals::ParticleManager->CreateParticle(info);
                particle->SetControlPoint(1, &color);
                particle->SetControlPoint(2, &radius);
Посмотреть вложение 236577
Ещё вопрос по поводу самых ходовых партиклей. Хотелось бы подобие selection_ring.vpcf, но со свечением(как когда рендж атаки вышки показывает), в мелонити VBE такое вроде бы у друга видел
Посмотреть вложение 236578
C++:
            coll->GetVFunc(0x80 / 8)(coll, idx, pos);
1) не надо так делить. дели руками. 16(десятиричная система) ответ. сразу 16 и пиши
2) вместо просто числа 16 юзай символическую константу(простыми словами - переменную с ясным названием) чтобы ясно и понятно было. дополнительно рекоммендуется задокументировать комментами если возможно откуда ты это взял(например "перед функцией МояФунка" или "после функции Тест123" или "внутри функции блаблабла есть вызов этой функи с индексом 16" или "функция внутри имеет хреф на строку блаблабла") чтобы потом когда индекс апдейтнется ты мог бы его заново легко найти(т.к. у тебя описаны шаги для нахождения этого индекса)
/* inside function: string xref "blablabla" */
constexpr SetControlPoint_VFTABLE_INDEX = 16;
...
GetVFunc(SetControlPoint_VFTABLE_INDEX) blablabla
3) не юзай GetVFunc и потом вызов. юзай сразу CallVFunc которая внутри юзает GetVFunc и вызывает сразу функу
4)
C++:
struct ParticleContainer {
        Particle* GetParticle() {
            return *(Particle**)((uintptr_t)this + 0x10);
        }
    };
перепиши под Member(struct ParticleContainer : public NormalClass {...})
5) cl_particle_log_creates true в помощь тебе квар. врубаешь его жмешь альт и смотришь какие партикли там создает
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
C++:
            coll->GetVFunc(0x80 / 8)(coll, idx, pos);
1) не надо так делить. дели руками. 16(десятиричная система) ответ. сразу 16 и пиши
2) вместо просто числа 16 юзай символическую константу(простыми словами - переменную с ясным названием) чтобы ясно и понятно было. дополнительно рекоммендуется задокументировать комментами если возможно откуда ты это взял(например "перед функцией МояФунка" или "после функции Тест123" или "внутри функции блаблабла есть вызов этой функи с индексом 16" или "функция внутри имеет хреф на строку блаблабла") чтобы потом когда индекс апдейтнется ты мог бы его заново легко найти(т.к. у тебя описаны шаги для нахождения этого индекса)
/* inside function: string xref "blablabla" */
constexpr SetControlPoint_VFTABLE_INDEX = 16;
...
GetVFunc(SetControlPoint_VFTABLE_INDEX) blablabla
3) не юзай GetVFunc и потом вызов. юзай сразу CallVFunc которая внутри юзает GetVFunc и вызывает сразу функу
4)
C++:
struct ParticleContainer {
        Particle* GetParticle() {
            return *(Particle**)((uintptr_t)this + 0x10);
        }
    };
перепиши под Member(struct ParticleContainer : public NormalClass {...})
5) cl_particle_log_creates true в помощь тебе квар. врубаешь его жмешь альт и смотришь какие партикли там создает
Спасибо за, так выразимся, код-ревью. Вообще да, с VClass я чуть проебланил и надо по-человечески организовать наследование, чтобы не пихать vtable куда не надо. По поводу пояснений с хрефами тоже норм тема, я ж всё-таки вдохновляюсь LWSS
Ах вот оно чё, тут оказывается nested structure
Screenshot_360.png
EDIT:
Разобравшись, я понял, что необходимого эффекта таки можно достичьScreenshot_362.png
Но этот партикл(как и некоторые другие) не реагирует на attachType PATTACH_ABSORIGIN_FOLLOW. Максимум, что я могу придумать — каждый кадр тупо ставить ей контрол поинт позиции на героя
Screenshot_363.png
 
Последнее редактирование:
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
Блять, партикл при создании перекидывается на крипов(или после? вроде пару кадров сидит где надо)
Screenshot_364.png
Я какие-то не те параметры ему ставлю при создании чи шо? Я чувствую что рехнусь с этими партиклами
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
Блять, партикл при создании перекидывается на крипов(или после? вроде пару кадров сидит где надо)
Посмотреть вложение 236672
Я какие-то не те параметры ему ставлю при создании чи шо? Я чувствую что рехнусь с этими партиклами
ну скинь код и попробуй удостовериться что контрол поинты правильные выставляешь. там в воркшоп тулсе потыкай
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
ну скинь код и попробуй удостовериться что контрол поинты правильные выставляешь. там в воркшоОтветитьп тулсе потыкай
Прошу прощения, я кретин. Всего-то надо было посмотреть в реклассе на ParticleInfo. Забыл, что после attachType ещё идёт int маска для handle(0x7fff).
C++:
    // Struct used when creating a particle
    struct ParticleInfo {
        const char* particleName;
        ParticleAttachment_t attachType;
        uint32_t mask = 0x7FFF;
        BaseEntity* attachEntity;
    private:
        void* unk0 = nullptr;
        void* unk1 = nullptr;
        void* unk2 = nullptr;
        void* unk3 = nullptr;
        void* unk4 = nullptr;
    };
Теперь норм Всё равно даже так крепится к крипам, как бы я ни пытался. Я уже даже вызываю 1 в 1 как игра делает(4 аргумент массив из ЭнтитиСистем и unk1 = attachEntity), контрол поинтов у данного партикла в принципе нет(ну кроме позиции). Чувствую, что надо чем-то другим заняться, всё равно ВБЕ я изначально текстом на экране пишу

C++:
CDOTAParticleManager::ParticleWrapper CDOTAParticleManager::CreateParticle(const char* name, ParticleAttachment_t attachType, BaseEntity* ent) {
    CDOTAParticleManager::ParticleInfo info{};
    info.attachType = attachType;
    info.attachEntity = ent;
    info.particleName = name;
    info.unk1 = ent;

    IncHandle();
    CallVFunc<7>(GetHandle(), &info, Interfaces::Entity->m_pEntityList);

    ParticleWrapper result{};
    result.info = info;
    result.particle = GetParticleArray()[GetParticleCount() - 1]->GetParticle();
    result.handle = GetHandle();

    return result;
}
//собственно вызов
                Globals::ParticleManager->CreateParticle(
                    "particles/items5_fx/revenant_brooch.vpcf",
                    CDOTAParticleManager::ParticleAttachment_t::PATTACH_ABSORIGIN_FOLLOW,
                    (BaseEntity*)assignedHero
                );
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
Прошу прощения, я кретин. Всего-то надо было посмотреть в реклассе на ParticleInfo. Забыл, что после attachType ещё идёт int маска для handle(0x7fff).
C++:
    // Struct used when creating a particle
    struct ParticleInfo {
        const char* particleName;
        ParticleAttachment_t attachType;
        uint32_t mask = 0x7FFF;
        BaseEntity* attachEntity;
    private:
        void* unk0 = nullptr;
        void* unk1 = nullptr;
        void* unk2 = nullptr;
        void* unk3 = nullptr;
        void* unk4 = nullptr;
    };
Теперь норм Всё равно даже так крепится к крипам, как бы я ни пытался. Я уже даже вызываю 1 в 1 как игра делает(4 аргумент массив из ЭнтитиСистем и unk1 = attachEntity), контрол поинтов у данного партикла в принципе нет(ну кроме позиции). Чувствую, что надо чем-то другим заняться, всё равно ВБЕ я изначально текстом на экране пишу

C++:
CDOTAParticleManager::ParticleWrapper CDOTAParticleManager::CreateParticle(const char* name, ParticleAttachment_t attachType, BaseEntity* ent) {
    CDOTAParticleManager::ParticleInfo info{};
    info.attachType = attachType;
    info.attachEntity = ent;
    info.particleName = name;
    info.unk1 = ent;

    IncHandle();
    CallVFunc<7>(GetHandle(), &info, Interfaces::Entity->m_pEntityList);

    ParticleWrapper result{};
    result.info = info;
    result.particle = GetParticleArray()[GetParticleCount() - 1]->GetParticle();
    result.handle = GetHandle();

    return result;
}
//собственно вызов
                Globals::ParticleManager->CreateParticle(
                    "particles/items5_fx/revenant_brooch.vpcf",
                    CDOTAParticleManager::ParticleAttachment_t::PATTACH_ABSORIGIN_FOLLOW,
                    (BaseEntity*)assignedHero
                );
на самом деле 0x7fff это рандомный мусор(и члена mask там на самом деле нету - там лежит 4 байта мусора).
дело в том что данные размером N-байт(2,4,8,16 и тд) должны(иногда абсолютно должны, иногда просто предпочтительно) находиться на N-байтных границах(в целях оптимизации; кампуктиру так быстрее и приятнее работать). граница это считай просто адрес(или оффсет) кратный какому-то множителю(N в нашем случае). то есть указатель(8 байт) на х64 должен находиться(предпочтительно - не обязательно но зачастую это именно так) на адресе кратном 8. то есть это адреса 0, 8, 16, 24, 32, 40, и тд и тп. инт(4 байт) должен находиться на адресе кратном 4. то есть 0,4,8,12,16,20 и тд. это называется выравнивание.

для некоторых типов(xmmword например) это обязательно(иначе процессор нахуй пошлёт), для большинства типов это просто предпочтительно(быстрее комп работает) но не обязательно. так вот. компилятор, чтобы выравнять до N-ной границы вставляет паддинг - мусорные куски говна которые служат просто чтобы занять место чтобы после них расположить член на нужную границу. в твоем случае структура такая:

const char*//8 байт. адреса кратны 8(0,8,16,24 ...) //оффсет 0
int//4 байт. адреса кратны 4(0,4,8,12,16 ...) // оффсет - оффсет предыдущего типа(0) + размер предыдущего типа(8 байт) + выравнивание если надо(не надо т.к. 8 кратно 4). оффсет 8 кароче
C_BaseEntity*//8 байт. адреса кратны 8(0,8,16,24, ...) // оффсет - оффсет предыдущего(8) + размер предыдущего(4) + выравнивание(оффсет так то получается 12, но т.к. нам нужен адрес(оффсет) кратный 8 то мы выравниваем до 16(ближайшее кратное 8 после 12) наш оффсет). оффсет 16 кароче

и тут вот так интересно получается что байты 12-16 у нас свободные. инт на оффсете 8 занимает всего 4 байта(8-12), а следующий указатель лежит токо на оффсете 16(16-24). в итоге 12-16 свободны. они заполняются мусором(ну точнее они ваще не заполняются. они просто приобретают то значение которое до этого было там в оперативке).
твой "mask" это 4 байта рандомного мусора(паддинг).

конкретно 7FFF это просто потому, что раньше на этом адресе лежал 8 байтовый указатель на так называемый(я его так называю) "PE регион"(это регион оперативки куда винда засовывает большинство "официально" загруженных дллок/ехешек. они прямо пачкой там идут друг за другом. в случае х64 это как раз более менее 7FFF12345678(где 12345678 это просто так байтики кароче 4 штучки) блаблабла. в моем случае у меня токо что когда я запустил доту этот регион(а точнее его часть) был на 7FFB12345678. и мусор("mask") соответственно уже был 7FFB. ну кр4 это регион(а точнее множество регионов) возле конца юзерспейс вирутального пространства). в итоге потом на место этого указателя(7FFF12345678) в оперативке запихали 4 байта ParticleAttachment со значением 0 и стало 7FFF00000000(литтл ендиан поэтому нули в конце(там где 12345678) а не в начале(там где 7FFF)). вот тебе и мусор этот в виде 7FFF(он может быть любым на самом деле)
паддинг не обязателен(исключения xmmword всякие) и опционален. компиляторы по дефолту его вставляют. то же самое относится и к компилятору которым габен доту собирал. он тоже вставил паддинг(эти 4 байта мусора). а так если захотеть можно #pragma pack юзать(выравнивание в 1 байт ставить) для того чтобы вырубить(можно временно. вырубить а потом обратно врубить) выравнивание и хуярить все члены впритык(тогда оффсет на ентити был бы уже 12 а не 16. но габен паддинг не вырубал на эту структуру поэтому 16. в доте есть некоторые структуры где паддинг отрублен)
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
на самом деле 0x7fff это рандомный мусор(и члена mask там на самом деле нету - там лежит 4 байта мусора).
дело в том что данные размером N-байт(2,4,8,16 и тд) должны(иногда абсолютно должны, иногда просто предпочтительно) находиться на N-байтных границах(в целях оптимизации; кампуктиру так быстрее и приятнее работать). граница это считай просто адрес(или оффсет) кратный какому-то множителю(N в нашем случае). то есть указатель(8 байт) на х64 должен находиться(предпочтительно - не обязательно но зачастую это именно так) на адресе кратном 8. то есть это адреса 0, 8, 16, 24, 32, 40, и тд и тп. инт(4 байт) должен находиться на адресе кратном 4. то есть 0,4,8,12,16,20 и тд. это называется выравнивание.

для некоторых типов(xmmword например) это обязательно(иначе процессор нахуй пошлёт), для большинства типов это просто предпочтительно(быстрее комп работает) но не обязательно. так вот. компилятор, чтобы выравнять до N-ной границы вставляет паддинг - мусорные куски говна которые служат просто чтобы занять место чтобы после них расположить член на нужную границу. в твоем случае структура такая:

const char*//8 байт. адреса кратны 8(0,8,16,24 ...) //оффсет 0
int//4 байт. адреса кратны 4(0,4,8,12,16 ...) // оффсет - оффсет предыдущего типа(0) + размер предыдущего типа(8 байт) + выравнивание если надо(не надо т.к. 8 кратно 4). оффсет 8 кароче
C_BaseEntity*//8 байт. адреса кратны 8(0,8,16,24, ...) // оффсет - оффсет предыдущего(8) + размер предыдущего(4) + выравнивание(оффсет так то получается 12, но т.к. нам нужен адрес(оффсет) кратный 8 то мы выравниваем до 16(ближайшее кратное 8 после 12) наш оффсет). оффсет 16 кароче

и тут вот так интересно получается что байты 12-16 у нас свободные. инт на оффсете 8 занимает всего 4 байта(8-12), а следующий указатель лежит токо на оффсете 16(16-24). в итоге 12-16 свободны. они заполняются мусором(ну точнее они ваще не заполняются. они просто приобретают то значение которое до этого было там в оперативке).
твой "mask" это 4 байта рандомного мусора(паддинг).

конкретно 7FFF это просто потому, что раньше на этом адресе лежал 8 байтовый указатель на так называемый(я его так называю) "PE регион"(это регион оперативки куда винда засовывает большинство "официально" загруженных дллок/ехешек. они прямо пачкой там идут друг за другом. в случае х64 это как раз более менее 7FFF12345678(где 12345678 это просто так байтики кароче 4 штучки) блаблабла. в моем случае у меня токо что когда я запустил доту этот регион(а точнее его часть) был на 7FFB12345678. и мусор("mask") соответственно уже был 7FFB. ну кр4 это регион(а точнее множество регионов) возле конца юзерспейс вирутального пространства). в итоге потом на место этого указателя(7FFF12345678) в оперативке запихали 4 байта ParticleAttachment со значением 0 и стало 7FFF00000000(литтл ендиан поэтому нули в конце(там где 12345678) а не в начале(там где 7FFF)). вот тебе и мусор этот в виде 7FFF(он может быть любым на самом деле)
паддинг не обязателен(исключения xmmword всякие) и опционален. компиляторы по дефолту его вставляют. то же самое относится и к компилятору которым габен доту собирал. он тоже вставил паддинг(эти 4 байта мусора). а так если захотеть можно #pragma pack юзать(выравнивание в 1 байт ставить) для того чтобы вырубить(можно временно. вырубить а потом обратно врубить) выравнивание и хуярить все члены впритык(тогда оффсет на ентити был бы уже 12 а не 16. но габен паддинг не вырубал на эту структуру поэтому 16. в доте есть некоторые структуры где паддинг отрублен)
Ах вот оно чё, помню что-то такое с курса по С++, объясняет также хуиту с рандомными двумя 32bit интами в CUtlVector по бокам указателя на массив. Кто же знал, что оно пригодится. По поводу самой партиклопроблемы — ну их нахуй пока что, пойду автоластхит делать, как раз нашёл в мелонитидампе куда смотреть

EDIT: Посмотрел я на 2-9 страницы этой темы и оказывается нужно ставить каждый контролпоинт, они не появляются сами. И хендл всё-таки инкрементится перед созданием, но само создание с ещё неинкрементированным происходит. Блять.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2023
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Всем привет я по такому вопросу.Кто то нашел решение касательно вопроса о мигании партикли VBE,из-за того что нетвар устанавливается в 0.0 на доли секунды(когда героя не видно)?Это кошмар как раздражает.И может надо создать отдельный тред,но кому то удалось обойти вак?За мануал мап с затертым пе хедером банит,хукать GetSystemInfo() и возращать инвалидный пейдж сайз тоже не вариант - траст фактор будет красный,буду играть с такими же как и я.
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
Всем привет я по такому вопросу.Кто то нашел решение касательно вопроса о мигании партикли VBE,из-за того что нетвар устанавливается в 0.0 на доли секунды(когда героя не видно)?Это кошмар как раздражает.И может надо создать отдельный тред,но кому то удалось обойти вак?За мануал мап с затертым пе хедером банит,хукать GetSystemInfo() и возращать инвалидный пейдж сайз тоже не вариант - траст фактор будет красный,буду играть с такими же как и я.
Поставь счётчик. Если нетвар был последние n тиков, то рисовать партикл.
По поводу вака впервые слышу чтобы в доте кого то банили за mmap. Предположу что твой прошлый аккаунт забанили за читы, а ты без чистки регнул новый.

VMT перезаписываешь или копируешь вмт и vptr объекта перезаписываешь ?
 
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2023
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Поставь счётчик. Если нетвар был последние n тиков, то рисовать партикл.
По поводу вака впервые слышу чтобы в доте кого то банили за mmap. Предположу что твой прошлый аккаунт забанили за читы, а ты без чистки регнул новый.

VMT перезаписываешь или копируешь вмт и vptr объекта перезаписываешь ?
Да прошлый забанили за читы(фейковый через лоадлайбрери инжектил чтобы анлоадить для удобства).За счетчик спасибо простое решение,я даже не подумал подумал чего то.По поводу VMT не понял,если ты по поводу VMT хуков,то у меня есть один на StageFrameNorify я там логику пишу,но я не менял адрес в вмт,а хукал инлайном(трамплином).Кстате по поводу хейка или как там чит называется,я читал тред и ты его реверсил?Как успехи дает отладчик подключить,легко понять как реализованы его фичи?Потому что я тоже брал один чит не хейк,так мне отладчик не дали подключить ,даже титанхайд не помог(я и имя девайса переименовал и потоки пооткрывал все равно детектило).
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
Да прошлый забанили за читы(фейковый через лоадлайбрери инжектил чтобы анлоадить для удобства).За счетчик спасибо простое решение,я даже не подумал подумал чего то.По поводу VMT не понял,если ты по поводу VMT хуков,то у меня есть один на StageFrameNorify я там логику пишу,но я не менял адрес в вмт,а хукал инлайном(трамплином).Кстате по поводу хейка или как там чит называется,я читал тред и ты его реверсил?Как успехи дает отладчик подключить,легко понять как реализованы его фичи?Потому что я тоже брал один чит не хейк,так мне отладчик не дали подключить ,даже титанхайд не помог(я и имя девайса переименовал и потоки пооткрывал все равно детектило).
Хейк слабый в плане антидебага, я бы сказал совсем никакой. Более того там разработчики относительно адекватные и даже не закинули мне ратник когда я раз 5 забыл врубить хайд. Но смысла реверсить для поиска информации нет. Луа скрипты там сложно дампить сейчас. Раньше можно было вывести через Log.Write адреса интересных функций

Я знаю какой чит ты реверсил, он использует баги титан хайда.
Более того разработчик защиты этого чита известен закидыванием ратников.
 
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2023
Сообщения
19
Реакции[?]
0
Поинты[?]
0
Хейк слабый в плане антидебага, я бы сказал совсем никакой. Более того там разработчики относительно адекватные и даже не закинули мне ратник когда я раз 5 забыл врубить хайд. Но смысла реверсить для поиска информации нет. Луа скрипты там сложно дампить сейчас. Раньше можно было вывести через Log.Write адреса интересных функций

Я знаю какой чит ты реверсил, он использует баги титан хайда
Я так и понял,типо создает поток открытый запрашивает а хайд возвращет что он скрыт(или создает дебаг обьект а потом запраивает сколько их а титанхайд всегда 0 возвращает и т.д)(+ нужно писать самому стл потому что в кернеле их нету,но лучше пропатчить).Но там темида так то пропатчить будет не проблема,если не вирутализация.Разработчики кстате походу наложили самую навороченую виртуальную машину(секунд 40 отладчик работает потом скип,может такое быть?).То есть чтобы научиться делать читы на доту реверсить читы бессмысленно?А ту же панораму нельзя разобрать или нетчен с помощью хейка или других читов?Хах ну пусть кидает ратник у меня ничего на компе нету,и что он под темидой ратник кидает хочешь сказать?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
Я так и понял,типо создает поток открытый запрашивает а хайд возвращет что он скрыт(или создает дебаг обьект а потом запраивает сколько их а титанхайд всегда 0 возвращает и т.д)(+ нужно писать самому стл потому что в кернеле их нету,но лучше пропатчить).Но там темида так то пропатчить будет не проблема,если не вирутализация.Разработчики кстате походу наложили самую навороченую виртуальную машину(секунд 40 отладчик работает потом скип,может такое быть?).То есть чтобы научиться делать читы на доту реверсить читы бессмысленно?А ту же панораму нельзя разобрать или нетчен с помощью хейка или других читов?Хах ну пусть кидает ратник у меня ничего на компе нету,и что он под темидой ратник кидает хочешь сказать?
По поводу виртуализации там разве темида а не код виртуалайзер в дллке? Я хз я сам не реверсил его ни разу. Это информация от людей что реверсили.

Я думаю что есть смысл реверсить только если ты хочешь кряк сделать. А для своего чита слишком времязатратно.
 
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2023
Сообщения
19
Реакции[?]
0
Поинты[?]
0
По поводу виртуализации там разве темида а не код виртуалайзер в дллке? Я хз я сам не реверсил его ни разу. Это информация от людей что реверсили.

Я думаю что есть смысл реверсить только если ты хочешь кряк сделать. А для своего чита слишком времязатратно.
Понял спасибо, да ты прав CodeVirtualizer не темида(по моему разницы нету там виртуальные машины одинаковые).А в лоадере вмпротект.Ну ок буду сам пытаться тогда.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
10 Янв 2023
Сообщения
19
Реакции[?]
0
Поинты[?]
0
А что случилось снетвром m_flStartSequenceCycle он сегодня перестал работать для отображения вбе?если раньше он был равен 0,когда я был на вижене,сейчас он просто скачет после обновления доты на 60 мб?
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
107
Поинты[?]
56K
А что случилось снетвром m_flStartSequenceCycle он сегодня перестал работать для отображения вбе?если раньше он был равен 0,когда я был на вижене,сейчас он просто скачет после обновления доты на 60 мб?
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
ЧВК YAROSLAV
Забаненный
Статус
Оффлайн
Регистрация
25 Дек 2019
Сообщения
595
Реакции[?]
184
Поинты[?]
31K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Полезная тема, спасибо
 
Shitcode lord 💩
Забаненный
Статус
Оффлайн
Регистрация
25 Ноя 2020
Сообщения
272
Реакции[?]
84
Поинты[?]
8K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу