📖 учебник Как создать MOD MENU для | il2cpp.so | и другие родные игры для Android

Sbenny.com доверяют 1,327,049 XNUMX XNUMX счастливых пользователей с 2014 года.
Зарегистрируйтесь

Havanitos

Чем тише ты становишься, тем больше ты способен слышать
VIP
Участник 6 лет
----------Приветствую всех ----------


PS. Если вам нужна помощь, как подключить MemoryPatch с Меню MOD и игровые функции дайте мне знать ????


Я хотел бы поделиться с вами новым Меню MODчто очень хорошо,
потому что это для игр для Android, которые не только Unity, теперь вы можете Меню MOD
il2cpp и другие родные игры для Android

Теперь вы можете мод меню этой игры!


38072


Вот так это выглядит вживую




Для этого урока вам понадобятся эти инструменты!

- Android Studio 3 * = Ссылка для скачивания!

- APKTool (SBennyAPKT это хорошо) = Ссылка для скачивания!
- Блокнот ++ = Ссылка для скачивания!
* Плавающее хранилище ModMenu = Скачать мод меню проекта! // Оригинальная ссылка автора MrIkso
* знание C ++, Java, Smali

+-Продвинутые моддеры Рекомендуем


Начнем с учебника!


После того, как вы загрузили все необходимые файлы, первое, что вам нужно сделать, это открыть Android-студия и откройте Плавающий Проект Репозитория ModMenu!
Распакуйте проект ModMenu в папку без пробела, просто очистите имя ex. C: Users \ хххххх \ Desktop \ моддинг \ FloatingModMenu-мастер
(«Я говорю это, потому что у меня уже была проблема с компиляцией игры, и это было ИСПРАВЛЕНИЕ» )
Откройте проект в Android-студия


38074

38075


После загрузки вашего проекта вам нужно будет найти файл FloatingModMenuService.java - в этом методе вы добавите параметры для вашего Меню MOD.
Вы можете легко найти этот файл с помощью ярлыка (CTRL + SHIFT + F) а затем поиск
Код:
private void modMenu() {


Теперь вы можете добавить свои чит-опции «Кнопки» в меню MOD, вот несколько примеров!


38076


Когда вы редактируете свои параметры для Меню MODоткройте этот файл / FloatingModMenu / app / src / main / jni / src /main.cpp в этом файле вам нужно будет отредактировать функции, которые будут реализовывать хук. Используемая библиотека KittyMemory. ( Эта библиотека предназначена для исправления кода во время выполнения для Android и iOS ) Далее нужно позвонить из родной библиотеки и связать их с помощью переключателей.

38077

В этом файле вы подключаете MOD-переключатели меню с помощью игровых функций!

После того, как вы добавили все необходимые опции, вы можете построить этот проект и сделать APK!

38079

38080

Убедитесь, что ваша сборка успешно завершена без ошибок!

Следующим шагом будет добавление "Build ModMenu Stuff" в папку с игрой!


Найдите файл файла встроенного MOD меню APK.
38081


Теперь вам нужно будет декомпилировать приложение с помощью SBennyAPKTool или любого другого инструмента.
и тогда вам нужно будет скопировать некоторые вещи в папку с игрой!
это также требует, чтобы вы декомпилировали свою игру после декомпиляции MODMenu APK!

Когда вы будете готовы перенести файлы из созданного Меню MOD Apk, скопируйте эти файлы в папку с игрой
Скопируйте папку «Активы» в папку «Активы игры» (это Меню MOD Картинки)
И вам нужно скопировать libKittyMemory.so в правильную структуру игры .... (блабла)

но будьте осторожны
libKittyMemory.so Вручную, потому что это зависит от того, какую структуру использует ваша игра, и какую вы взламываете!


libKittyMemory.so находится в этой папке, скопируйте только ту папку, которую использует ваша игра.


Далее нам нужно добавить разрешение на отображение приложения поверх других и сервиса Mod-Menu.

Откройте AndroidManifest.xml из папка игры
и добавить этот код в первой строке Права доступа!

Код:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Затем скопируйте этот код также в AndroidManifest.xml после
Код:
<service android:enabled="true" android:exported="false" android:name="com.mrikso.modmenu.FloatingModMenuService"/>
Вот изображение для легкого понимания.


Следующий шаг, пожалуй, самый сложный, потому что вам нужно найти основной вид деятельности вашей игры, и вам нужно ввести свой Меню MOD.
Вам необходимо зарегистрировать Меню MOD вызов и загрузка библиотеки libKittyMemory.
Ищем основное направление нашей игры. Обычно это пишется на (Вот пример «Моя игра»)




Код:
<application android:allowBackup="true" android:icon="@mipmap/app_icon" android:label="@string/app_name" android:name="android.support.multidex.MultiDexApplication" android:supportsRtl="true" android:theme="@style/UnityThemeSelector">
    <service android:enabled="true" android:exported="false" android:name="com.mrikso.modmenu.FloatingModMenuService"/>
        <activity android:configChanges="density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode" android:hardwareAccelerated="false" android:label="@string/app_name" android:launchMode="singleTask" android:name="com.unity3d.player.UnityPlayerActivity" android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
        </activity>
Как мы видим, моя стартовая активность по игре com.unity3d.player.UnityPlayerActivity

В моем случае моя основная игровая активность находится здесь.


Когда вы знаете, в какой папке smali находится ваша основная деятельность, вы можете скопировать папку Smali из декомпилированного меню MOD Apk в Game Smali / Com / Folder





Найти игру Основная деятельность (в моем случае UnityPlayerActivity ) и откройте его с помощью Notepad ++, и скопируйте класс (этот код) в основной класс нашей игры в # виртуальные методы, вы можете вставить его после Last Methode!

Код:
.method public Start()V
    .locals 3

    .line 23
    const-string v0, "KittyMemory"

    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

    .line 24
    sget v0, Landroid/os/Build$VERSION;->SDK_INT:I

    const/16 v1, 0x17

    if-lt v0, v1, :cond_0

    invoke-static {p0}, Landroid/provider/Settings;->canDrawOverlays(Landroid/content/Context;)Z

    move-result v0

    if-nez v0, :cond_0

    .line 25
    new-instance v0, Landroid/content/Intent;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string v2, "package:"

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {p0}, Landroid/app/Activity;->getPackageName()Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    const-string v2, "android.settings.action.MANAGE_OVERLAY_PERMISSION"

    invoke-direct {v0, v2, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

    .line 26
    .local v0, "intent":Landroid/content/Intent;
    const/16 v1, 0x7d2

    invoke-virtual {p0, v0, v1}, Landroid/app/Activity;->startActivityForResult(Landroid/content/Intent;I)V

    .line 27
    .end local v0    # "intent":Landroid/content/Intent;
    goto :goto_0

    .line 28
    :cond_0
    new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/mrikso/modmenu/FloatingModMenuService;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Landroid/app/Activity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    .line 30
    :goto_0
    return-void
.end method

.method public onActivityResult(IILandroid/content/Intent;)V
    .locals 2
    .param p1, "requestCode"    # I
    .param p2, "resultCode"    # I
    .param p3, "data"    # Landroid/content/Intent;

    .line 34
    const/16 v0, 0x7d2

    if-ne p1, v0, :cond_1

    .line 35
    const/4 v0, -0x1

    if-ne p2, v0, :cond_0

    .line 36
    new-instance v0, Landroid/content/Intent;

    const-class v1, Lcom/mrikso/modmenu/FloatingModMenuService;

    invoke-direct {v0, p0, v1}, Landroid/content/Intent;-><init>(Landroid/content/Context;Ljava/lang/Class;)V

    invoke-virtual {p0, v0}, Landroid/app/Activity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;

    goto :goto_0

    .line 38
    :cond_0
    const/4 v0, 0x0

    const-string v1, "Draw over other app permission not available. Closing the application"

    invoke-static {p0, v1, v0}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    move-result-object v0

    invoke-virtual {v0}, Landroid/widget/Toast;->show()V

    .line 39
    invoke-virtual {p0}, Landroid/app/Activity;->finish()V

    goto :goto_0

    .line 42
    :cond_1
    invoke-super {p0, p1, p2, p3}, Landroid/app/Activity;->onActivityResult(IILandroid/content/Intent;)V

    .line 44
    :goto_0
    return-void
.end method


И самое главное, также в том же файле, основной деятельности smali, чтобы добавить этот код в Метод onCreate

Код:
invoke-virtual {p0}, Lcom/unity3d/player/UnityPlayerActivity;->Start()V


Информация о переименовании функции запуска функции!
Пример: предположим, что ваше основное действие Smali называется HavanitosPlayerTutorial -> Lcom / ohyes / idamodding / activity / HavanitosPlayerTutorial.smali.
Когда вы добавляете (Start Load Function, в определенной Деятельности вам нужно использовать это Имя Деятельности)
Это не верно:

Код:
invoke-virtual {p0}, Lcom/mrikso/modmenu/MainActivity;->Start()V
Это верно:
Код:
invoke-virtual {p0}, Lcom/ohyes/idamodding/activity/HavanitosPlayerTutorial;->Start()V
Это было связано в Метод onCreate



Спасибо за чтение Учебник, если вам нужна помощь, не стесняйтесь спрашивать любого продвинутого моддера! 😉

Я надеюсь, что вы понимаете мой английский и мой учебник Наслаждайтесь
 

Вложения

Последнее редактирование:

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
Это очень информативная ветка, большое спасибо за ваш вклад Havanitos! Это очень легко понять, и ваш английский отлично, отличная работа!

#ThreadSticked
 

romeo523

Lurker Уровень 0️⃣
Участник 5 лет
Можете ли вы научить меня, как добавить функцию для второго и третьего в меню.
Пример: в меню есть режим бога, один удар, ...
Я могу мод режим бога, но один удар это не влияет
 

Havanitos

Чем тише ты становишься, тем больше ты способен слышать
VIP
Участник 6 лет
Последнее редактирование:

SuperEvilMafiaBoss

Босс подземного царства Сбеннетопии
Участник 4 лет
Хороший и информативный учебник, но когда я нажимаю сборку, ничего не происходит ... Последняя версия Android Studio ... И как мне сделать переключатели / кнопки? я должен сохранить код по умолчанию или изменить его?
 

Havanitos

Чем тише ты становишься, тем больше ты способен слышать
VIP
Участник 6 лет
Хороший и информативный учебник, но когда я нажимаю сборку, ничего не происходит ... Последняя версия Android Studio ... И как мне сделать переключатели / кнопки? я должен сохранить код по умолчанию или изменить его?
Вот ваша информация :)

Я нажал Build Project, но ничего не произошло.
Используйте имя для папки проекта без пробела, напр. modmenuproject

Можете ли вы научить меня, как добавить функцию для второго и третьего в меню.
Пример: в меню есть режим бога, один удар, ...
Я могу мод режим бога, но один удар это не влияет
Создайте новый поток в Main.cpp и закройте первый поток с помощью [ }; ] , Если вы копируете, вставьте тему, закройте последнюю тему только [ } ]
Код:
void * my_UnlimitedDiamonds_thread(void *) {
    LOGD("I have been loaded...");

    // BLA BLA The rest of the Code...

    return NULL;

};   <------------------ This is First Thread ]

void * my_UnlimitedCoins(void *) {
    LOGD("I have been loaded...");

    // BLA BLA The rest of the Code...

    return NULL;

}   <------------------ This is Last Thread ]
Не забудьте добавить [ частная нативная строка ] и изменить [ Строка переключателя ] (Файл .Java в проекте)
То же самое для файла Main.cpp. Добавьте новый MemoryPatch и измените имена MP в потоках.

Код:
    private native void antiupdate_on();

    private native void antiupdate_off();
 
    ........
 

addSwitch("AntiUpdate Hack", new SW() {
            public void OnWrite(boolean isChecked) {
                if (isChecked) {
                    antiupdate_on();   // <--------- ( Switch String)
                    //Toast.makeText(getBaseContext(), toastFromJNI(), Toast.LENGTH_LONG).show();
                    Toast.makeText(getBaseContext(), "AntiUpdate Hack - On", Toast.LENGTH_SHORT).show();
                } else {
                    antiupdate_off();
                    Toast.makeText(getBaseContext(), "AntiUpdate Hack - Off", Toast.LENGTH_SHORT).show();
                }


----------------------------------------------------------------------------------------------------------------


struct My_Patches {
    MemoryPatch havanitosAntiCheat;  // <---- Patch name
    MemoryPatch havanitosAntiUpdate;
    MemoryPatch havanitosDiamonds;
    MemoryPatch havanitosCoins;
} my_cool_Patches;

void * my_AntiCheat_thread(void *) {
    LOGD("I have been loaded...");

    ProcMap il2cppMap;
    do {
        il2cppMap = KittyMemory::getLibraryMap("libil2cpp.so");
        sleep(1);
    } while (!il2cppMap.isValid());

    my_cool_Patches.havanitosAntiCheat = MemoryPatch("libil2cpp.so", 0xC3E854,    <-------Be carfule to rename Patch name for another Thread)
                                                  "\bla\bla\bla\bla", 4);
                                               
                        [ Same for the Rest... ]

    return NULL;

};
Также не забывайте вызывать функции по нажатию кнопки! в конце Main.cpp добавьте функции вызова для ваших читов

Код:
JNIEXPORT void JNICALL
Java_com_mrikso_modmenu_FloatingModMenuService_antiupdate_1on(JNIEnv *env, jobject instance) {    //   <-------- ( antiupdate_1on , test_1on,,, like_this_explanationmsg_:P_1on

    pthread_t ptid;
    pthread_create(&ptid, NULL, my_AntiUpdate_thread, NULL);

}
extern "C"
JNIEXPORT void JNICALL
Java_com_mrikso_modmenu_FloatingModMenuService_antiupdate_1off(JNIEnv *env, jobject instance) {   //   <-------- ( antiupdate_1off , test_1off,,, like_this_explanationmsg_:P_1off

    // TODO
    // restore & print bytes
    if (my_cool_Patches.havanitosAntiUpdate.Restore()) {     //   <-------- ( Here is what Patch goes Off )
        LOGD("canShowInMinimap has been restored successfully");
        LOGD("Current Bytes: %s", my_cool_Patches.havanitosAntiUpdate.ToHexString().c_str());
        LOGD("===========================");
    }

}
 
Последнее редактирование:

SuperEvilMafiaBoss

Босс подземного царства Сбеннетопии
Участник 4 лет
Извините, что не заметил ответ на мой первый вопрос в уроке выше ... Спасибо за вашу ценную информацию, приятель.
 
Последнее редактирование:

Havanitos

Чем тише ты становишься, тем больше ты способен слышать
VIP
Участник 6 лет
Извините, что не заметил ответ на мой первый вопрос в уроке выше ... Спасибо за вашу ценную информацию, приятель.
Нет проблем, я всегда здесь, чтобы помочь, насколько я могу, я человек, который любит делиться знаниями, если вам нужна любая другая помощь, не стесняйтесь связаться со мной через вечера, если вы не можете использовать вечера опубликовать сообщение на мой профиль, и я свяжусь с вами :)
 

DipiWebi

Lurker Уровень 0️⃣
Участник 4 лет
Здравствуйте, я все еще новичок в этом типе программирования. Увидев это объяснение, он вызвал у меня интерес к предмету. Так что, если я собираюсь создать Меню MOD для игры в fps, как мне запрограммировать цель солдата всегда держать голову врага?
 

forumseo

Ученик Уровень 2️⃣
Участник 6 лет
Я вижу, что androeed.ru загружает .so lib, то в игре есть тост-шоу без тоста; -> show найдено в smali.
 

mrcas

Отношение Уровень 3️⃣
Участник 4 лет
Есть ли способ вызвать функцию в .so файле из меню мод? Не только для исправления, но мне нужно сделать собственный код из меню, и я точно знаю, какую функцию использует игра в файле .so.
 

Havanitos

Чем тише ты становишься, тем больше ты способен слышать
VIP
Участник 6 лет
Здравствуйте, я все еще новичок в этом типе программирования. Увидев это объяснение, он вызвал у меня интерес к предмету. Так что, если я собираюсь создать мод-меню для игры в fps, как мне запрограммировать, чтобы цель солдата всегда держалась в голове врага?
это очень сложный вопрос для новичка в программировании, вам нужен как минимум опыт 2, я не могу помочь вам в этом квесте :(

Есть ли способ вызвать функцию в .so файле из меню мод? Не только для исправления, но мне нужно сделать собственный код из меню, и я точно знаю, какую функцию использует игра в файле .so.
Я не уверен, что я никогда такого не делал, но я знаю, что нужно делать специальные инъекции .so, так что, вероятно, вы можете внедрить ваш файл .so в игру, и тогда ваш код будет отдыхать ..
Извините, я не настолько продвинут :(
 

wandoh

Lurker Уровень 0️⃣
Участник 4 лет
@Havanitos
Можете ли вы сделать учебник, добавив новые функции, учебник с изображениями?
 
Последнее редактирование:
Топовое