Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 13 Ноя 2022
- Сообщения
- 132
- Реакции
- 3
namespace FieldHelper {
inline uint32_t GetEncryptedFieldAddrByFirstObjectDataType(const char* TypeClass, const wchar_t* DataType, int skipType = 0, bool checkAttr = false, Unity::FieldAttributes TargetAttr = Unity::FieldAttributes::PrivateScope) {
int Counter = 0;
auto type = (Unity::Type*)il2cpp::TypeGetObject(_(""), TypeClass);
if (!MemUtils::IsValidCheck(type))
return 0;
Unity::BindingFlags flags = Unity::BindingFlags::Public | Unity::BindingFlags::NonPublic | Unity::BindingFlags::Instance | Unity::BindingFlags::Static;
auto fields = type->GetFields(flags);
if (!MemUtils::IsValidCheck(fields))
return 0;
for (int i = 0; i < fields->GetSize(); i++) {
auto field = fields->Get(i);
if (!MemUtils::IsValidCheck(field))
continue;
auto fieldType = field->get_FieldType();
if (!MemUtils::IsValidCheck(fieldType))
continue;
auto attr = field->get_Attributes();
if (checkAttr && attr != TargetAttr)
continue;
auto addr = field->GetFieldOffset() + 0x10;
auto className = fieldType->get_FullNameOrDefault();
if (className->Contains(DataType)) {
if (Counter >= skipType)
return addr;
else Counter++;
}
}
return 0;
}
inline uintptr_t GetDecryptedFieldInsideObject(Unity::Component* component, const wchar_t* FieldClass) {
if (!MemUtils::IsValidCheck(component))
return 0;
auto components = component->GetComponentsInChildren((Unity::Type*)il2cpp::TypeGetObject(_("UnityEngine"), _("Component")));
if (!MemUtils::IsValidCheck(components))
return 0;
for (int i = 0; i < components->GetSize(); i++) {
auto obj = components->Get(i);
if (!MemUtils::IsValidCheck((void*)obj))
continue;
auto type = Unity::Object::GetType(obj);
if (!MemUtils::IsValidCheck(type))
continue;
auto className = type->get_FullNameOrDefault();
if (className->Contains(FieldClass))
return obj;
}
return 0;
}
inline const wchar_t* FindEncryptedClassNameByFirstObjectDataType(const char* TypeClass, const wchar_t* DataType, int skipType = 0, bool checkAttr = false, Unity::FieldAttributes TargetAttr = Unity::FieldAttributes::PrivateScope) {
int Counter = 0;
auto type = (Unity::Type*)il2cpp::TypeGetObject(_(""), TypeClass);
if (!MemUtils::IsValidCheck(type))
return _(L"");
Unity::BindingFlags flags = Unity::BindingFlags::Public | Unity::BindingFlags::NonPublic | Unity::BindingFlags::Instance | Unity::BindingFlags::Static;
auto fields = type->GetFields(flags);
if (!MemUtils::IsValidCheck(fields))
return _(L"");
for (int i = 0; i < fields->GetSize(); i++) {
auto field = fields->Get(i);
if (!MemUtils::IsValidCheck(field))
continue;
auto fieldType = field->get_FieldType();
if (!MemUtils::IsValidCheck(fieldType))
continue;
auto attr = field->get_Attributes();
if (checkAttr && attr != TargetAttr)
continue;
auto addr = field->GetFieldOffset() + 0x10;
auto className = fieldType->get_FullNameOrDefault();
if (className->Contains(DataType)) {
if (Counter >= skipType)
return className->str;
else Counter++;
}
}
return _(L"");
}
} вот код encrypt (engine.h)
playerNames = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"System.String"), 0, true, Unity::FieldAttributes::Family);
playerFlags = il2cpp::GetOffset(_("BasePlayer"), _("playerFlags"));
model = il2cpp::GetOffset(_("BaseEntity"), _("model"));
boneTransforms = il2cpp::GetOffset(_("Model"), _("boneTransforms"));
ItemContainer = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public);
ItemContainer2 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 1, true, Unity::FieldAttributes::Public);
ItemContainer3 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 2, true, Unity::FieldAttributes::Public);
char buffer[128];
auto ItemContainerClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
ItemList = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public);
auto ItemClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
ItemClass = RebuildChar(ItemClass, FindCharPos(ItemClass, '%'), FindCharPos(ItemClass, ','), buffer, sizeof(buffer));
itemInfo = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemClass, _(L"ItemDefinition"));
shortname = il2cpp::GetOffset(_("ItemDefinition"), _("shortname"));
playerModel = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"PlayerModel"));
movement = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"BaseMovement"));
groundAngleNew = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerWalkMovement"), _(L"PlayerWalkMovement"), 2); (dump.cpp)
if (DrawName) {
//if (isCorpse) {
// GetSwprintf(buff, _(L"Corpse [%dm]"), int(dist));
//}
// else {
auto playerName = Player->GetName();
GetSwprintf(buff, _(L"%s [%dm]"), playerName, int(dist));
// }
DrawString({ leftSide + (box_width / 2.f) - 100.f, bounds.top - 20.f, 200, 30 }, buff, { 255,255,255,255 }, true);
}
float offset = 1.f;
auto itemList = Player->GetInventory()->GetContainer(0)->itemList();
if (DrawPlayerWeapons) {
for (int i = 0; i < itemList->GetSize(); i++) {
auto item = itemList->GetValue(i);
if (!MemUtils::IsValidCheck(item))
continue;
auto name = item->itemInfo()->shortName();
DrawString({ leftSide + (box_width / 2.f) - 50.f, bounds.bottom - 10.f + offset, 100, 30 }, name, { 255,255,255,255 }, true);
offset += 5.f;
}
} (Func.cpp)
почему у меня не отображается оружие (как пофиксить encrypt)
inline uint32_t GetEncryptedFieldAddrByFirstObjectDataType(const char* TypeClass, const wchar_t* DataType, int skipType = 0, bool checkAttr = false, Unity::FieldAttributes TargetAttr = Unity::FieldAttributes::PrivateScope) {
int Counter = 0;
auto type = (Unity::Type*)il2cpp::TypeGetObject(_(""), TypeClass);
if (!MemUtils::IsValidCheck(type))
return 0;
Unity::BindingFlags flags = Unity::BindingFlags::Public | Unity::BindingFlags::NonPublic | Unity::BindingFlags::Instance | Unity::BindingFlags::Static;
auto fields = type->GetFields(flags);
if (!MemUtils::IsValidCheck(fields))
return 0;
for (int i = 0; i < fields->GetSize(); i++) {
auto field = fields->Get(i);
if (!MemUtils::IsValidCheck(field))
continue;
auto fieldType = field->get_FieldType();
if (!MemUtils::IsValidCheck(fieldType))
continue;
auto attr = field->get_Attributes();
if (checkAttr && attr != TargetAttr)
continue;
auto addr = field->GetFieldOffset() + 0x10;
auto className = fieldType->get_FullNameOrDefault();
if (className->Contains(DataType)) {
if (Counter >= skipType)
return addr;
else Counter++;
}
}
return 0;
}
inline uintptr_t GetDecryptedFieldInsideObject(Unity::Component* component, const wchar_t* FieldClass) {
if (!MemUtils::IsValidCheck(component))
return 0;
auto components = component->GetComponentsInChildren((Unity::Type*)il2cpp::TypeGetObject(_("UnityEngine"), _("Component")));
if (!MemUtils::IsValidCheck(components))
return 0;
for (int i = 0; i < components->GetSize(); i++) {
auto obj = components->Get(i);
if (!MemUtils::IsValidCheck((void*)obj))
continue;
auto type = Unity::Object::GetType(obj);
if (!MemUtils::IsValidCheck(type))
continue;
auto className = type->get_FullNameOrDefault();
if (className->Contains(FieldClass))
return obj;
}
return 0;
}
inline const wchar_t* FindEncryptedClassNameByFirstObjectDataType(const char* TypeClass, const wchar_t* DataType, int skipType = 0, bool checkAttr = false, Unity::FieldAttributes TargetAttr = Unity::FieldAttributes::PrivateScope) {
int Counter = 0;
auto type = (Unity::Type*)il2cpp::TypeGetObject(_(""), TypeClass);
if (!MemUtils::IsValidCheck(type))
return _(L"");
Unity::BindingFlags flags = Unity::BindingFlags::Public | Unity::BindingFlags::NonPublic | Unity::BindingFlags::Instance | Unity::BindingFlags::Static;
auto fields = type->GetFields(flags);
if (!MemUtils::IsValidCheck(fields))
return _(L"");
for (int i = 0; i < fields->GetSize(); i++) {
auto field = fields->Get(i);
if (!MemUtils::IsValidCheck(field))
continue;
auto fieldType = field->get_FieldType();
if (!MemUtils::IsValidCheck(fieldType))
continue;
auto attr = field->get_Attributes();
if (checkAttr && attr != TargetAttr)
continue;
auto addr = field->GetFieldOffset() + 0x10;
auto className = fieldType->get_FullNameOrDefault();
if (className->Contains(DataType)) {
if (Counter >= skipType)
return className->str;
else Counter++;
}
}
return _(L"");
}
} вот код encrypt (engine.h)
playerNames = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"System.String"), 0, true, Unity::FieldAttributes::Family);
playerFlags = il2cpp::GetOffset(_("BasePlayer"), _("playerFlags"));
model = il2cpp::GetOffset(_("BaseEntity"), _("model"));
boneTransforms = il2cpp::GetOffset(_("Model"), _("boneTransforms"));
ItemContainer = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public);
ItemContainer2 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 1, true, Unity::FieldAttributes::Public);
ItemContainer3 = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 2, true, Unity::FieldAttributes::Public);
char buffer[128];
auto ItemContainerClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(_("PlayerInventory"), _(L"%"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
ItemList = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public);
auto ItemClass = wcharToChar(FieldHelper::FindEncryptedClassNameByFirstObjectDataType(ItemContainerClass, _(L"List"), 0, true, Unity::FieldAttributes::Public), buffer, sizeof(buffer));
ItemClass = RebuildChar(ItemClass, FindCharPos(ItemClass, '%'), FindCharPos(ItemClass, ','), buffer, sizeof(buffer));
itemInfo = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(ItemClass, _(L"ItemDefinition"));
shortname = il2cpp::GetOffset(_("ItemDefinition"), _("shortname"));
playerModel = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"PlayerModel"));
movement = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("BasePlayer"), _(L"BaseMovement"));
groundAngleNew = FieldHelper::GetEncryptedFieldAddrByFirstObjectDataType(_("PlayerWalkMovement"), _(L"PlayerWalkMovement"), 2); (dump.cpp)
if (DrawName) {
//if (isCorpse) {
// GetSwprintf(buff, _(L"Corpse [%dm]"), int(dist));
//}
// else {
auto playerName = Player->GetName();
GetSwprintf(buff, _(L"%s [%dm]"), playerName, int(dist));
// }
DrawString({ leftSide + (box_width / 2.f) - 100.f, bounds.top - 20.f, 200, 30 }, buff, { 255,255,255,255 }, true);
}
float offset = 1.f;
auto itemList = Player->GetInventory()->GetContainer(0)->itemList();
if (DrawPlayerWeapons) {
for (int i = 0; i < itemList->GetSize(); i++) {
auto item = itemList->GetValue(i);
if (!MemUtils::IsValidCheck(item))
continue;
auto name = item->itemInfo()->shortName();
DrawString({ leftSide + (box_width / 2.f) - 50.f, bounds.bottom - 10.f + offset, 100, 30 }, name, { 255,255,255,255 }, true);
offset += 5.f;
}
} (Func.cpp)
почему у меня не отображается оружие (как пофиксить encrypt)