Гайд Методы получения Datamodel

Synapse Softworks
Пользователь
Статус
Оффлайн
Регистрация
3 Май 2020
Сообщения
380
Реакции[?]
40
Поинты[?]
8K
17 января роблокс выпустили патч для hyperion из за чего многие экстерналы перестали работать
а именно удалили получение datamodel и renderview с логов
поэтому вот способы как доставать datamodel без помощи логов

1.
по сути scriptcontext.parent = datamodel

C++:
cbyte::sdk::inst_t cbyte::sdk::TaskScheduler::Job::get_datamodel() {
    auto context = get_script_context();
    if (!context.self) return cbyte::sdk::inst_t{};
    return context.parent();
}
2.
C++:
cbyte::sdk::inst_t cbyte::sdk::TaskScheduler::get_datamodel() {
    auto jobs = name("WaitingHybridScriptsJob");
    if (jobs.empty()) return cbyte::sdk::inst_t{};
    return jobs[0].get_datamodel();
}
3. c использованием оффсетов
C++:
class TaskScheduler {
private:
    std::vector<std::uintptr_t> Jobs;
    std::uintptr_t Scheduler;
public:
    TaskScheduler() {
        this->Scheduler = functions::GetScheduler();

        auto jobsStart = *(uintptr_t*)(this->Scheduler + offsets::TaskScheduler::JobStart);
        auto jobsEnd = *(uintptr_t*)(this->Scheduler + offsets::TaskScheduler::JobEnd);

        for (auto Job = jobsStart; Job < jobsEnd; Job += 0x10)
            this->Jobs.push_back(*(uintptr_t*)Job);
    }
    auto GetJobByName(std::string_view name) -> std::uintptr_t {
        for (const auto Job : this->Jobs) {
            if (*(std::string*)(Job + offsets::TaskScheduler::JobName) == name)
                return Job;
        }
    }
    auto GetLuaState() -> lua_State* {
        auto WaitingHybridScriptsJob = this->GetJobByName("WaitingHybridScriptsJob");
        auto ScriptContext = *(std::uintptr_t*)(WaitingHybridScriptsJob + offsets::TaskScheduler::ScriptContext);

        uintptr_t x = 0;
        return (lua_State*)lua_newthread((lua_State*)functions::DecryptState(functions::GetState(ScriptContext + 0x118, &x, &x) + 0x88));
    }
};
использование:

C++:
TaskScheduler Scheduler;
auto whsj = Scheduler.GetJobByName("WaitingHybridScriptsJob");
uintptr_t scctx = whsj + 0x1F8;

uintptr_t datamodel = scctx + 0x50; // datamodel = scriptcontext + parent

// you can also use job `Render` to get Renderview but im lazy to code that :<

C++:
#include <Windows.h>

namespace offsets {
    namespace TaskScheduler {
        constexpr std::int64_t JobStart = 0x198; // TaskScheduler::Job:
        constexpr std::int64_t JobEnd = 0x1A0; // TaskScheduler::Job:
        constexpr std::int64_t JobName = 0x90; // TaskScheduler::Job:
        constexpr std::int64_t ScriptContext = 0x1F8; // WaitingHybridScriptsJob
    }
}

// ...

#define REBASE(x) (x + reinterpret_cast<uintptr_t>(GetModuleHandle(nullptr)))

namespace addresses {
    constexpr std::uintptr_t GetScheduler = 0xSIGMA; // initializeThermalStatus (scroll up till you see sub_yap / 1000.0)
}

namespace types {
    using GetScheduler = uintptr_t(__fastcall*)();
}

namespace functions {
    static types::GetScheduler GetScheduler = reinterpret_cast<types::GetScheduler>(REBASE(addresses::GetScheduler));
}

бонус:

C++:
uintptr_t BaseAddress = mem::find_image(); // use your own method to get BaseAddress
uintptr_t VisualEngine = read<uintptr_t>(BaseAddress + 0x599B0A0);
uintptr_t FakeDataModel = read<uintptr_t>(VisualEngine + 0x720);
uintptr_t DataModel = read<uintptr_t>(FakeDataModel + 0x1A8);
 
Последнее редактирование:
‮expenis paster
Пользователь
Статус
Оффлайн
Регистрация
20 Апр 2021
Сообщения
1,677
Реакции[?]
47
Поинты[?]
63K
пиздец, кто будет делать экстернал ваще по твоему?
 
Сверху Снизу