📖 учебник Как взломать Android-игры Unity при отсутствии Assembly-Csharp.dll (метод libil2cpp.so)

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

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
Я помогал своему другу в моддинге игр Unity без файлов Assembly-Csharp.dll (или других dll), поэтому после написания этого простого урока я решил поделиться им со всеми, в надежде, что это поможет новым моддерам подняться на Лестница успеха.

Первое, что нужно сделать, это убедиться, что это правильный метод. Что ж, если вы ранее модифицировали свой apk, отредактировав файл Assembly-Csharp.dll, а теперь в последнем обновлении вы переходите в Assets / Bin / Data / Managed / и СЮРПРИЗ! файлов dll больше нет, то вам определенно нужно продолжить чтение этого руководства.

Причина, по которой вы больше не находите dll, заключается в том, что Unity недавно добавила возможность экспорта игр с использованием метода il2cpp, который, в отличие от dll, экспортирует все игровые коды в файл с именем «libil2cpp.so». Это будет не так просто, как модификация файлов DLL, но немного попрактиковавшись, вы обнаружите, что с помощью этого нового метода можно было бы даже быстрее, чем с модификацией обычных dll, как только вы узнаете, что искать.

В этом учебнике в идеале вам потребуется немного знаний о моддинге в общей библиотеке (о моддинге .so-файлов), так как этот метод не слишком далек от редактирования обычной игры lib, но каким-то образом помогает, поскольку предоставляет точную позицию и имена функции, которые нужно редактировать, в отличие от большинства игр lib.


Сложность: средняя
Требуемое время: минуты 30 в первый раз, затем минуты 5 или около того
Требуемые навыки: среднее знание моддинга + опциональное знание языка ARM



1) Первое, что нужно сделать, это взять последнюю версию дампера Il2cpp: Perfare / Il2CppDumper И распакуйте его

2) Теперь из APK-файла вам нужно извлечь файлы:

активы / бен / Data / Управляемый / Metadata / глобальный metadata.dat
lib / armeabi-v7a / libil2cpp.so (я предлагаю сохранить дополнительную копию этого файла)

Рекомендуется распаковать их в той же папке дампера il2cpp.

3) Если есть папка lib / x86, вы можете удалить ее из файла apk (если вы не знаете коды операций x86, и в любом случае вам придется выполнять двойную работу, в то время как большинство устройств могут читать файлы apk даже без версии x86, поэтому Вы могли бы избежать этого ненужного шага)

4) Теперь запустите файл «Il2CppDumper.exe», и он попросит вас выбрать два файла. Первый, который вам нужно выбрать, - это файл libil2cpp.so, который вы ранее переместили из файла apk, а второй - global-metadata.dat.

5) если вы используете последнюю версию, ПРОПУСТИТЕ ШАГ 5 и 6 и переходите к шагу 7.
Затем он может спросить вас о версии Unity (в зависимости от загруженной вами версии дампера il2cpp), вы можете попробовать, набрав сначала 1, и если он выдаст ошибку, вы можете повторить процесс и вместо этого ввести 2 (насколько я знаю , у моддера нет быстрого и простого способа узнать, какая версия Unity использовалась для сборки игры, но если я ошибаюсь, дайте мне знать, и я обновлю этот шаг).

6) Он попросит вас выбрать метод дампа, предлагая диапазон для выбора от 1 (Ручной) до 5 (Символ), я обычно выбираю 4.

7) Сценарий теперь сгенерирует файл с именем dump.cs и папку с именем «Managed», если этого не произойдет, вам, вероятно, придется обратиться к шагу 5 и повторить попытку, иначе игра, вероятно, защищена от сброса.

8) dump.cs - это простой текстовый файл (откройте его с помощью Notepad ++) со списком функций, за которым следует смещение, например: общедоступный int get_accuracy //0x123456. Вы можете найти свою функцию, выполнив поиск по ее имени, если оно вам уже известно, в противном случае обратитесь к шагу 8a.

где:
общедоступный int указывает, что это Int32 функция (другие распространенные типы функций bool = логическое значение, float = одиночное, и Void);
get_accuracy
- это имя функции (идентично имени функции в старой dll-версии игры);
0x123456 что в упрощенном виде просто: 123456, это смещение (позиция этой функции в файле libil2cpp.so);

8a) папка Managed содержит обычные файлы .dll, но с пустыми функциями полезно найти функцию, только если вы еще не знаете, как она вызывается. Если вы хотите перейти к этому альтернативному методу, чтобы найти функцию, просто перетащите все библиотеки в NET Reflector (или DnSpy) и найдите функцию, которую нужно отредактировать, затем перейдите в файл dump.cs и найдите ту же функцию. чтобы найти смещения, как показано в шаге 8.

9) Откройте "Hxd", если у вас его нет, скачать его здесь.

10) Перетащите файл libil2cpp.so в окно Hxd, нажмите Ctrl + G, чтобы открыть окно «Смещение поиска», и вставьте смещение из найденной функции (в данном примере 123456) и нажмите клавишу ввода.

11) Если измененная вами функция представляет собой INT32 и вы просто хотите вернуть очень высокое значение, выполните следующие действия: выберите первые байты 8 в окне Hxd, начиная с точки, которую вы взяли после нажатия клавиши Enter (байт последовательность букв и цифр 2 (например, 4F или 4C и т. д.) и, после выбора, вставьте вместо них следующие байты: FF 04 E0 E3 1E FF 2F E1 (убедитесь, что вы заменяете только 8 байтов с этими другими байтами 8).

Что это?

FF 04 E0 E3 = MOV R0, 0xFFFFFF = ldc.i4 -> 16777215
1E FF 2F E1 = BX LR = ret

так что вы возвращаете очень очень высокое значение.

Если вы хотите вернуть только 1 (true), вы можете написать:

01 00 A0 E3 = MOV R0, 1 = ldc.i4.1
1E FF 2F E1 = BX LR = ret

и если вы хотите вернуть 0 (false), вы можете написать:

00 00 A0 E3 = MOV R0, 0 = ldc.i4.0
1E FF 2F E1 = BX LR = ret


Это руководство не касается кодов операций ARM, в любом случае приведенные выше коды являются HEX-эквивалентом значений ARM, которые используются в файле libil2cpp.so и многих других файлах lib, которые вы будете редактировать в своей жизни моддинга. 😜

Хороший способ проверить коды операций ARM - использовать наши эксклюзивные ЛУЧШИЙ ПРЕОБРАЗОВАТЕЛЬ РЫЧАГА но я не буду освещать этот аспект в этом уроке, так как в противном случае он окажется слишком длинным. Возможно, в будущем я напишу более обширное руководство, посвященное кодам операций ARM или общему взлому IDA.

Важно всегда следить за тем, чтобы вы не добавляли (или не удаляли) байты из файла .so, поэтому ВСЕГДА заменяйте 4, 8, 16 и т. Д. Байтами на 4, 8, 16 байтов соответственно, иначе сама библиотека сломается. Причина кроется в структуре разделяемых библиотек, которая определяет начало и конец функций в своих заголовках, а добавление или удаление байтов приведет к тому, что все функции будут начинаться / завершаться в разных положениях, что приведет к поломке всей библиотеки.


Теперь, после внесения изменений, просто сохраните нажатием Ctrl + S или нажатием на значок дискеты в верхней части Hxd и перетащите измененный файл libil2cpp.so в файл apk.

Вы заметите, что Hxd также создаст файл libil2cpp.so.bak, который является файлом, который у вас был до его сохранения (который не является резервной копией исходного файла, а всего лишь за шаг до его сохранения). Это по-прежнему удобно, хотя я предпочитаю начинать с нуля, когда все становится слишком сложно (например, редактирование функций 10 +), поскольку это быстрее и проще, поэтому я предложил взять копию файла libil2cpp.so в верхней части этого простого руководства.

Теперь, как всегда, чтобы увидеть, работает ли он, просто отмените файл apk (если у вас нет рутов / исправлений) и установите его.

Если вы ранее модифицировали эту игру, когда она использовала более старую версию Unity (Assembly-Csharp.dll), вам будет намного проще, потому что вы будете знать, какие функции искать и как их редактировать.

Также важно указать, что, в отличие от редактирования dll, этот подход прост только тогда, когда вы полностью заменяете функцию (например, когда вы возвращаете true, false, высокое значение или просто обнуляете его, добавляя только ret). Если вместо этого вы сделали расширенный мод, редактируя строки в середине / конце функции, вы, скорее всего, не справитесь с этим, если только у вас нет хорошего понимания хорошего программного обеспечения под названием IDA (которое может потребоваться в этом случае. так как вам придется изучить всю функцию).

Надеюсь, это поможет. Для любых предложений или вопросов, не стесняйтесь задавать мне ниже, и я буду рад помочь вам :)
 
Последнее редактирование:

SentinelVendetta

Lurker Уровень 0️⃣
Участник 5 лет
Что касается пункта 5, вероятно, вы ищете это
Откройте файл APK с помощью Winrar или 7-zip. Перейдите в \ assets \ bin \ Data \ откройте один из файлов ресурсов в Notepad ++ или перейдите в Go to \ assets \ bin \ Data \ Resources и откройте unity_builtin_extra, и вы увидите версию Unity, как показано ниже.

1556918181417.png
 

Sbenny

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

LolHacksRule

Начинающий Уровень 1️⃣
Участник 5 лет
Как насчет помощи в модификации игр IL2CPP без global-metadata.dat? Хороший учебник, хотя.
 

Sbenny

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

AndnixSH

Дикарь Уровень 6️⃣
Отряд СБ Мод ⭐
Участник 8 лет
Что касается пункта 5, вероятно, вы ищете это
Откройте файл APK с помощью Winrar или 7-zip. Перейдите в \ assets \ bin \ Data \ откройте один из файлов ресурсов в Notepad ++ или перейдите в Go to \ assets \ bin \ Data \ Resources и откройте unity_builtin_extra, и вы увидите версию Unity, как показано ниже.

Просмотр вложения 32175
В моей версии GUI Il2CppDumper я реализовал автоматическое получение версии Unity при удалении любого файла ресурса или файла APK :)
Попробуйте: Il2CppDumper GUI Tool
 

Elyprince

Ученик Уровень 2️⃣
Участник 7 лет
На шаге 5 после того, как я выберу режим, он говорит: «Обнаружено, что это может быть файл дампа. Если нет, он должен быть защищен. Введите адрес дампа:»

Я не знаю, что здесь делать (кстати, я новичок в моддинге)
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
На шаге 5 после того, как я выберу режим, он говорит: «Обнаружено, что это может быть файл дампа. Если нет, он должен быть защищен. Введите адрес дампа:»

Я не знаю, что здесь делать (кстати, я новичок в моддинге)
Убедитесь, что вы сначала выбрали файл libil2cpp.so, а затем файл global-metadata.dat. Это должно решить проблему.
 

Presian

Lurker Уровень 0️⃣
Участник 4 лет
У меня есть папка Dummy Dll, содержащая сборку cs harp, которую я редактировал обычным способом. Будет ли это работать, и как его перекомпилировать (если нужно), чтобы я мог перенести его обратно в папку apk? Tnx
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
У меня есть папка Dummy Dll, содержащая сборку cs harp, которую я редактировал обычным способом. Будет ли это работать, и как его перекомпилировать (если нужно), чтобы я мог перенести его обратно в папку apk? Tnx
Вы не должны иметь возможность редактировать эту dll «обычным способом», так как она пуста (разве вы не заметили, что у каждой функции есть только «nop»?). Вы не можете модифицировать их таким образом, вам нужно следовать приведенному выше руководству. Если бы был доступен более простой способ, я бы его описал.
 

sasa097

Lurker Уровень 0️⃣
Участник 4 лет
я пробовал единую версию 1 и 2, но выдает ошибку
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
я пробовал единую версию 1 и 2, но выдает ошибку
Если это так (и если я правильно понимаю), вам необходимо загрузить самую последнюю версию дампера il2cpp, так как он дает вам возможность указать, на какой версии Unity основан файл apk, вместо старой версии, запрашивающей вас. набрать 1 или 2.
 

atkins2080

Ученик Уровень 2️⃣
Участник 5 лет
У меня есть старая версия модифицированного C Sharp.dll из предыдущей игры Oz Magic Match, она была для мода чисел ходов, который у меня все еще есть, но я не знаю, что делать, потому что я не знаю нового метод, и я только что извлек фиктивные dll-файлы из версии 1.0.4059 игры, которая является новейшим обновлением.
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
У меня есть старая версия модифицированного C Sharp.dll из предыдущей игры Oz Magic Match, она была для мода чисел ходов, который у меня все еще есть, но я не знаю, что делать, потому что я не знаю нового метод, и я только что извлек фиктивные dll-файлы из версии 1.0.4059 игры, которая является новейшим обновлением.
Откройте dummy.cs, найдите ту же функцию, которую вы редактировали в предыдущей версии, и отредактируйте значения HEX относительного смещения :)
 

atkins2080

Ученик Уровень 2️⃣
Участник 5 лет
Привет, я открыл файл dummy.cs, нашел раздел бонусных ходов и открыл его в редакторе гексагонов в DNspy, но не могу найти, где написано бонусные ходы, вот скриншот того, что я делаю до сих пор.
37955
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
Вам не нужно редактировать DLL, но libil2cpp.so .
 

atkins2080

Ученик Уровень 2️⃣
Участник 5 лет
Привет, я пытался использовать notepad ++, но не могу открыть в нем шестнадцатеричный редактор, чтобы найти значения, я кое-что прочитал о декомпиляторе IDS, но не могу себе позволить эту программу.
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
Привет, я пытался использовать notepad ++, но не могу открыть в нем шестнадцатеричный редактор, чтобы найти значения, я кое-что прочитал о декомпиляторе IDS, но не могу себе позволить эту программу.
Пожалуйста, обратитесь к моему руководству, которое все объясняет внимательно. Я нигде не упомянул декомпилятор IDS, поэтому я полагаю, что вы перепутали два разных руководства (мое и кое-что еще найденное в другом месте), которое не поможет вам решить ваши проблемы.
 

chu121su12

Lurker Уровень 0️⃣
Участник 4 лет
Hy,

Могу ли я спросить возвращаемое значение как логическое истина и ложь?
Кроме того, имеет ли значение возвращаемое значение, если я редактирую публичную или приватную статическую функцию?

Спасибо
 
Топовое