Вопрос Не получается загрузить классы

Начинающий
Статус
Оффлайн
Регистрация
8 Окт 2022
Сообщения
14
Реакции[?]
1
Поинты[?]
0

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Всем привет, сегодня у меня появилась проблема, когда я, пытаюсь загрузить джарку и все классы из нее то у меня ничего не получается, я получаю класс лоадер, загружаю через статический метод "forName", путь до джарки верный, пакет верный, но jarClass все равно возвращает NULL, буду рад если поможете, потому что c++ я начал изучать недели две назад, и с jni/jvmti почти не работал, код:

(если захотите помочь в дс то юз: idea64)

код:
void loadJar(JNIEnv *jni)
        {
            logger::info("void loadJar(JNIEnv *jni)", [B]LINE[/B], "patcher.cpp");
            logger::info("[+] Attempt to loading jar...", [B]LINE[/B], "patcher.cpp");
            const char* javaNetUrlClassName = "java/net/URL";
            char* jarPath = (char*) "file://C:/Users/Egor/IdeaProjects/kraken.jar";
            logger::info(std::format("JarPath is: {}", jarPath), [B]LINE[/B], "patcher.cpp");
            jclass urlClass = jni->FindClass(javaNetUrlClassName);
            if (urlClass == NULL) {
                char msg[50];
                sprintf(msg, "couldn't find class: %s\n", javaNetUrlClassName);
                logger::error(std::format("[FATAL] Couldn't find class: {}", javaNetUrlClassName), [B]LINE[/B], "patcher.cpp");
                jni->FatalError((char*)msg);
            }
            logger::info("[+] URLClass created", [B]LINE[/B], "patcher.cpp");
            std::cout << "[INFO] " << std::format("[{}, {}] ", [B]LINE[/B], "patcher.cpp") << "[+] URLClass address: " << javaNetUrlClassName << std::endl;

            jmethodID urlConstructor = jni->GetMethodID(urlClass, "<init>", "(Ljava/lang/String;)V");
            jstring jarPathJString = jni->NewStringUTF(jarPath);
            jobject url = jni->NewObject(urlClass, urlConstructor, jarPathJString);
            jni->ReleaseStringUTFChars(jarPathJString, NULL);

            if (url == NULL)
            {
                logger::error("[FATAL] Couldn't create URL Object", [B]LINE[/B], "patcher.cpp");
                jni->FatalError("[FATAL ERROR] Couldn't create URL Object");
            }

            logger::info("[+] Jar URL Created", [B]LINE[/B], "patcher.cpp");
            std::cout << "[INFO] " << std::format("[{}, {}] ", [B]LINE[/B], "patcher.cpp") << "[+] Jar URL: " << url << std::endl;

            jobjectArray urls = jni->NewObjectArray(1, jni->FindClass(javaNetUrlClassName), NULL);
            jni->SetObjectArrayElement(urls, 0, url);

            jclass classLoaderClass = jni->FindClass("java/net/URLClassLoader");
            jmethodID constructor = jni->GetMethodID(classLoaderClass, "<init>", "([Ljava/net/URL;)V");
            jobject classLoader = jni->NewObject(classLoaderClass, constructor, urls);

            logger::info("[+] ClassLoader successfull created.", [B]LINE[/B], "patcher.cpp");
            std::cout << "[INFO] " << std::format("[{}, {}] ", [B]LINE[/B], "patcher.cpp") << "[+] ClassLoader address: " << classLoader << std::endl;

            jclass clazz = jni->FindClass("java/lang/Class");
            jmethodID classForNameMethod = jni->GetStaticMethodID(clazz, "forName", "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;");

            if (classForNameMethod == NULL)
            {
                logger::error("[FATAL] Class.forName(String, boolean, java.lang.ClassLoader)java.lang.Class method not found", [B]LINE[/B], "patcher.cpp");
                jni->FatalError("Class.forName(String, boolean, java.lang.ClassLoader)java.lang.Class method not found");
            }

            logger::info("[+] classForNameMethod found", [B]LINE[/B], "patcher.cpp");
            std::cout << "[INFO] " << std::format("[{}, {}] ", [B]LINE[/B], "patcher.cpp") << "[+] classForNameMethod address: " << classForNameMethod << std::endl;
       
            const char *jarInitClass = "xyz.idea64.Main";
            std::cout << "1" << std::endl;
            jstring classToLoad = jni->NewStringUTF(jarInitClass);
            std::cout << classToLoad << std::endl;
            std::cout << "2" << std::endl;
            jclass jarClass = (jclass)jni->CallStaticObjectMethod(clazz, classForNameMethod, classToLoad, true, classLoader);
            std::cout << "3" << std::endl;
            jni->ReleaseStringUTFChars(classToLoad, NULL);
            std::cout << "4" << std::endl;
            if (jarClass == NULL)
            {
                char msg[100];
                sprintf(msg, "jar init class not found: %s\n", jarInitClass);
                logger::info("jar init class not found", [B]LINE[/B], "patcher.cpp");
                std::cout << jarClass << std::endl;
                std::this_thread::sleep_for(std::chrono::milliseconds(1000));
                jni->FatalError((char*)msg);
            }
            std::cout << 5 << std::endl;
            jmethodID mainMethod = jni->GetStaticMethodID(jarClass, "sum", "(II)I");
            std::cout << 6 << std::endl;
            jint result = jni->CallStaticIntMethod(jarClass, mainMethod, 15, 8);
            logger::info("[+] Jar loaded and executed", [B]LINE[/B], "patcher.cpp");
        }
 
Последнее редактирование:
Сверху Снизу