• Я зарабатываю 100 000 RUB / месяц на этом сайте!

    А знаешь как? Я всего-лишь публикую (создаю темы), а админ мне платит. Трачу деньги на мороженое, робуксы и сервера в Minecraft. А ещё на паль из Китая. 

    Хочешь так же? Пиши и узнавай условия: https://t.me/alex_redact
    Реклама: https://t.me/yougame_official

Вопрос FindDeclaredClass и дизасембл (как играться со схемой?)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
1 Ноя 2019
Сообщения
3
Реакции
0
Сразу прошу понять и простить, я только панда которая пытается разобраться.
Смотрел исходники читов, видел в них такую штуку, что вытаскивают интерфейс SchemaSystem_001 из schemasystem.dll, после чего способны вытащить некоторые смехы классов, к примеру C_BaseEntity из client.dll.

Есть у меня вот такой вот класс Interfaces, который хранит как раз в себе интерфесы (я не стал остальные прикладывать)
C++:
Expand Collapse Copy
#define ui unsigned long long

namespace Interfaces {
  
    inline uintptr_t Schema = NULL;
  
    typedef void* (*oCreateInterface)(const char*, int);
    oCreateInterface pCreateInterface;
    ui CreateInterface(const char* szModule, const char* szInterface) {
        pCreateInterface = (oCreateInterface)GetProcAddress(GetModuleHandleA(szModule), "CreateInterface");

        return (ui)pCreateInterface(szInterface, 0);

    }

    inline void InitInterfaces() {
        Schema = CreateInterface("schemasystem.dll", "SchemaSystem_001");
    }
}

Есть у меня вот такой Schema.h который по моей логике вытаскивает схемы

C++:
Expand Collapse Copy
namespace Schema {

    inline std::unordered_map<std::string, std::unordered_map<std::string, uintptr_t>> Netvars;

    struct ClassDescription;

    struct SchemaParent {
        ui idk;
        ClassDescription* parent;
    };

    struct ClassDescription {
        ui idk;//0
        ui classname;//8
        ui modulename;//10
        int sizeofclass;//18
        short memberstoiterate;//1c
        char pad[6];//20
        ui MemberInfo;//28
        ui idk2;//30
        SchemaParent* parent;//38
    };


    struct SchemaTypeDescription {
        ui idk;
        ui name;
        ui idk2;
    };



    struct MemberDescription {
        ui name;
        SchemaTypeDescription* schematypeptr;
        int offset;
        int idk;
        ui idk2;
    };
  
    void SchemaDumpToMap(const char* _module, const char* _class) {
    typedef uintptr_t(__fastcall* GetScopeFn)(uintptr_t schemasys, const char* _mod);

    std::cout << "Shema: " << Interfaces::Schema << "\n";
  
    ui Scope = ((ui(__fastcall*)(ui schemasys, const char* _mod, char** idk))
         ([I](ui[/I])(point+0x68)))(Interfaces::Schema, _module, NULL);

    if (!Scope) { std::cout<<"No such scope!\n"; return; }

    std::cout << "Scope "<< Scope<<"\n";

    ui result = 0;
    ui Test1 = ((ui(__fastcall*)(ui scope,ui [I]a2, const char[/I] _class))

        ([I](ui[/I])([I](ui[/I])(Scope)+0x10)))(Scope,&result, _class);
    if (!Test1) { std::cout << "No such class "<<(ui)_class<<"\n"; return; }
    std::cout << "Result: " << result << "\n";
    std::cout << "ClassResult: " << Test1 << " ClassResultPointer: " << Test1 << "\n";
  
    ClassDescription* a = (ClassDescription*)Test1;
label_1: {}
    std::string className = (cc)a->classname;
    std::cout << "Class name: " << className << "\n";
    for (uintptr_t i = 0; i < a->memberstoiterate; i++) {
        MemberDescription* z = (MemberDescription*)(a->MemberInfo + i * 0x20);
        Netvars[className][(cc)z->name] = z->offset;
    }

    if (a->parent) { a = a->parent->parent; goto label_1; }
  
}

Всё покрывал выводами в консоль, чтобы понимать на каком моменте всё умирает.
Запускаю - всё работает супер, но есть одно но.
Консоль пишет что-то вот такое
fVRpP7C.png

А дальше всё ломается.
Япредполагаю что всё ломается на моменте, когда я пытаюсь преобразовать мой Test1 в ClassDescription, но немного не понимаю что не так и как мне узнать что не так.
Буду очень признателень если кто-то меня вразумит и наставит на путь правильный
 
Test1 это просто &result. можешь его игнорить впринципе. юзай онли result. он у тебя правильный.
GCClient у меня на client.dll + 0x511a1a8, у тебя это 7FFDD8F5A1A8, т.е. твой client.dll(на скрине) на 00007FFDD3E40000
результат C_BaseEntity у тебя 7FFDD88020E0, т.е. client.dll+0x49c20e0, у меня client.dll+0x49c20e0, т.е. всё сходится.
кароче забей хуй на Test1 можешь вообще не сохранять возврат(оно просто возвращает то что ты передал - &result)
 
Назад
Сверху Снизу