#include #include #include #include <pthread.h> #include #include #include #include <jni.h> #include <unistd.h> #include #include #include <dlfcn.h> #include "Includes/Logger.h" #include "Includes/obfuscate.h" #include "Includes/Utils.hpp" #include "Menu/Menu.hpp" #include "Menu/Jni.hpp" #include "Includes/Macros.h" #include "dobby.h"
// Arayüzdeki butonların listesi jobjectArray GetFeatureList(JNIEnv *env, jobject context) { jobjectArray ret;
const char *features[] = {
OBFUSCATE("Toggle_Sınırsız Altın") // 0. Butonumuz
};
int Total_Feature = (sizeof features / sizeof features[0]);
ret = (jobjectArray)
env->NewObjectArray(Total_Feature, env->FindClass(OBFUSCATE("java/lang/String")),
env->NewStringUTF(""));
for (int i = 0; i < Total_Feature; i++)
env->SetObjectArrayElement(ret, i, env->NewStringUTF(features[i]));
return (ret);
}
// Hedef kütüphane dosyamız #define targetLibName OBFUSCATE("libil2cpp.so")
// Butonlara basıldığında gerçekleşecek işlemler void Changes(JNIEnv *env, jclass clazz, jobject obj, jint featNum, jstring featName, jint value, jlong Lvalue, jboolean boolean, jstring text) { switch (featNum) { case 0: // Sınırsız Altın Hilesi (0x2E6AB6C senin offset adresin) PATCH_SWITCH(targetLibName, "0x2E6AB6C", "20 00 80 D2 C0 03 5F D6", boolean); break; } }
// Hilelerin oyunun ana işleyişini dondurmaması için arka planda çalışan döngü void hack_thread() { // Oyunun libil2cpp.so dosyası hafızaya yüklenene kadar bekle while (!isLibraryLoaded(targetLibName)) { sleep(1); }
#if defined(aarch64) // İleride kanca (hook) işlemi yapacağımız zaman adresleri buraya ekleyeceğiz. #elif defined(arm) // ARMv7 (32-bit) cihazlar için kod alanı #endif
LOGI(OBFUSCATE("Done"));
}
// Mod dosyası oyuna enjekte edildiği an tetiklenen başlangıç kodu attribute((constructor)) void lib_main() { std::thread(hack_thread).detach(); }