Synapse Softworks
-
Автор темы
- #1
17 января роблокс выпустили патч для hyperion из за чего многие экстерналы перестали работать
а именно удалили получение datamodel и renderview с логов
поэтому вот способы как доставать datamodel без помощи логов
1.
по сути scriptcontext.parent = datamodel
2.
3. c использованием оффсетов
использование:
бонус:
а именно удалили получение 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();
}
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();
}
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);
Последнее редактирование: