Начинающий
- Статус
- Оффлайн
- Регистрация
- 14 Май 2023
- Сообщения
- 8
- Реакции
- 2
Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:
- бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
- маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
- приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
- обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.
Спасибо!
Всем привет, хочу получить instance игры, но постоянно при получении jobject через CallStaticObjectMethod (также и с GetStaticObjectField) у меня возвращается NULL (нулевой адрес). Но прикол в том, что когда использую env->IsInstanceOf(jobject, jclass), то возвращает JNI_TRUE, что является странным... Вот, что возвращает консолька:
[INFO] Successfully attached to JVM. JNIEnv*: 000001FFF186BAC0
MinecraftClass is not null!
GetStaticMethodID is not null!
CallStaticObjectMethod is null!
000001FFF1970870
000001FFA62EE688
0000000000000000
Маппинги все правильные с использованием обфускации. Вот код. Уже 2 дня не могу понять, почему возвращает NULL. Пробовал через forge, forgeoptifine, optifine, vanilla, менял версии, jdk и т.д., но все безуспешно...
Вот мой код ниже:
Очень надеюсь найти уже решение...
[INFO] Successfully attached to JVM. JNIEnv*: 000001FFF186BAC0
MinecraftClass is not null!
GetStaticMethodID is not null!
CallStaticObjectMethod is null!
000001FFF1970870
000001FFA62EE688
0000000000000000
Маппинги все правильные с использованием обфускации. Вот код. Уже 2 дня не могу понять, почему возвращает NULL. Пробовал через forge, forgeoptifine, optifine, vanilla, менял версии, jdk и т.д., но все безуспешно...
Вот мой код ниже:
dllmain.cpp:
typedef jint(*pJNI_GetCreatedJavaVMs)(JavaVM**, jsize, jsize*);
extern FILE* console_buffer1 = nullptr;
extern JavaVM* jvm = nullptr;
extern JNIEnv* env = nullptr;
bool getEnv()
{
HMODULE jvmModule = GetModuleHandleA("jvm.dll");
if (!jvmModule) {
std::cerr << "[ERROR] Failed to get handle to jvm.dll" << std::endl;
return false;
}
auto JNI_GetCreatedJavaVMs = reinterpret_cast<pJNI_GetCreatedJavaVMs>(
GetProcAddress(jvmModule, "JNI_GetCreatedJavaVMs")
);
if (!JNI_GetCreatedJavaVMs) {
std::cerr << "[ERROR] Failed to get address of JNI_GetCreatedJavaVMs" << std::endl;
return false;
}
if (JNI_GetCreatedJavaVMs(&jvm, 1, nullptr) != JNI_OK || jvm == nullptr) {
std::cerr << "[ERROR] Failed to get JavaVM instance" << std::endl;
return false;
}
if (jvm->AttachCurrentThread(reinterpret_cast<void**>(&env), nullptr) != JNI_OK || env == nullptr) {
std::cerr << "[ERROR] Failed to attach current thread to JVM" << std::endl;
return false;
}
std::cout << "[INFO] Successfully attached to JVM. JNIEnv*: " << env << std::endl;
return true;
}
bool getInstance()
{
if (!env) {
std::cerr << "JNIEnv is null!" << std::endl;
return false;
}
jclass mcClass = env->FindClass("dvp"); // net/minecraft/client/Minecraft для 1.17.1
//jclass mcClass = env->FindClass("djz"); // net/minecraft/client/Minecraft
if (!mcClass) {
std::cerr << "Failed to find Minecraft class!" << std::endl;
return false;
}
std::cout << "MinecraftClass is not null!" << std::endl;
Sleep(1500);
jmethodID method = env->GetStaticMethodID(mcClass, "C", "()Ldvp;"); // getInstance()
if (!method) {
std::cerr << "Failed to get static method!" << std::endl;
return false;
}
std::cout << "GetStaticMethodID is not null!" << std::endl;
Sleep(1500);
jobject minecraftObj = env->CallStaticObjectMethodA(mcClass, method, nullptr);
if (env->ExceptionCheck()) { // не ловит
std::cout << "JNI Exception caught!" << std::endl;
env->ExceptionDescribe();
env->ExceptionClear();
}
if (!minecraftObj) {
env->ExceptionDescribe();
std::cout << "CallStaticObjectMethod is null!" << std::endl;
std::cout << mcClass << std::endl;
std::cout << method << std::endl;
std::cout << minecraftObj << std::endl;
}
Sleep(3000);
return false;
}
void MainThread(HMODULE hModule)
{
AllocConsole();
freopen_s(&console_buffer1, "CONOUT$", "w", stdout);
getEnv();
while (true)
{
if (!getInstance())
{
continue;
}
else
{
break;
}
}
FreeConsole();
FreeLibraryAndExitThread(hModule, 0);
fclose(console_buffer1);
}
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MainThread, hModule, 0, 0);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Очень надеюсь найти уже решение...