ölmedim geri döndüm kaldığımız yerden devam
Süper Üye
Bu forumdan öğrendiğim birçok şey oldu ve şimdi bu bilgileri paylaşmak istiyorum, özellikle PBO hider'ları nasıl çalıştığını anlamaya çalışan herkese yardımcı olabilecek bir şey sunmak istiyorum. Ofsetleri paylaşmıyorum ancak bunları forumda veya IDA üzerinden oldukça kolay bulabilirsiniz. C++ konusunda hâlâ çok iyi değilim, bu yüzden lütfen çok sert eleştirmeyin.
PBO Hider
Memory functions:
Bağlantıları görmek için lütfen
Giriş Yap
Bağlantıları görmek için lütfen
Giriş Yap
PBO Hider
C++:
std::vector<std::string> GetPBOList()
{
std::vector<std::string> vecPBOs;
uint64_t pPBOManager = Memory::Read<uint64_t>(Offsets::Arma3::BaseAddress + Offsets::Arma3::PBOManager);
uint64_t pPBOList = Memory::Read<uint64_t>(pPBOManager);
int iLoadedPBOs = Memory::Read<int>(pPBOManager + 0x8);
for (int i = 0; i < iLoadedPBOs; i++)
{
uint64_t pPBO = Memory::Read<uint64_t>(pPBOList + (i * 0x8));
if (!pPBO)
continue;
uint64_t pPBOName = Memory::Read<uint64_t>(pPBO + 0x20);
int iPBONameLength = Memory::Read<int>(pPBOName + 0x8);
std::string PBONameString;
PBONameString.resize(iPBONameLength - 1);
sj.qRVM(pPBOName + 0x10, (void*)PBONameString.c_str(), iPBONameLength);
vecPBOs.push_back(std::to_string(i + 1) + " | " + PBONameString);
}
return vecPBOs;
}
void HidePBO(int idx)
{
uint64_t pPBOManager = Memory::Read<uint64_t>(Offsets::Arma3::BaseAddress + Offsets::Arma3::PBOManager);
uint64_t pPBOList = Memory::Read<uint64_t>(pPBOManager);
int iLoadedPBOs = Memory::Read<int>(pPBOManager + 0x8);
Memory::Write(pPBOManager + 0x8, (iLoadedPBOs - 1)) // Subtract one from loaded PBO count
for (int i = 0; i < loaded; i++)
{
uint64_t pPBO = Memory::Read<uint64_t>(pPBOList + (i * 0x8));
if (!pPBO)
continue;
if (i >= idx)
{
uint64_t pNextPBO = Memory::Read<uint64_t>(pPBOList + ((i + 1) * 0x8)); // Read next PBO
Memory::Write(pPBOList + (i * 0x8), pNextPBO); // Write next PBO to current
}
}
}
Memory functions:
C++:
template <typename T>
var Read(uint64_t Address)
{
T Buffer;
sj.qRVM(Address, &Buffer, sizeof(T));
return Buffer;
}
template <typename T>
bool Write(uint64_t Address, T Value)
{
return sj.qWVM(Address, &Value, sizeof(T));
}
Son düzenleme: