1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Лаунчер Пересобранная jvm.

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем fereter, 19 июн 2019.

  1. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    Любопытно то, как себя будут вести при этом моды, использующие кастомные classloader и манипулирующие байт-кодом.
     
  2. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    На сталкрафте как-то сдампили все динамические классы от своих модов и так же зашифровали. Не знаю, как именно это сделали и в каких пределах это можно делать вообще, но - возможно.
     
  3. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    Моды их => могли и просто написать classloader, который расшифровывает массив байтов при чтении классов. В случае дешифровки на уровне JVM затронуты будут все classloader: чтение класса в бинарном представлении (как обычный файл) выявит наличие шифрования и т.о. загрузка повалится.
     
  4. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    Это уже детали реализации. Думаю, для начала подойдёт некий рабочий концепт, который в принципе умеет что-то шифровать и расшифровывать. Или не расшифровывать, а проверять некие метки в самих классах. Т.е., привязывать конкретные классы к конкретной jvm любым способом.
     
  5. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    Для привязки к конкретной JVM надо б гарантировать, что всякие средства вроде ASM не будут пытаться такие вот "привязанные к конкретной JVM классы" редактировать (иначе попросту завалится при попытке редактирования) или вообще пытаться свои генерировать. Естественно, моды в этом плане "хороши": могут использовать ASM (равно как и отражения) на любой чих.
     
  6. Автор темы
    fereter

    fereter Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fereter
    Выложишь шифровщик в открытый доступ, и читеры зашифруют свои классы. Не выложишь -- админы проектов не смогут зашифровать свои моды. Нужно как-то определять админов проектов и давать шифровальщик только им или что-то еще придумать.
     
  7. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    > гарантировать
    Знать бы, как это сделать... Боюсь, что гарантий никаких нет. Однако, я лишь поверхностно знаком с внутренним устройством джавы и по этому вопросу отвечу просто - не знаю.
    Не плоди сущности: в первую очередь, ты делаешь концепт в паблик. Кому надо - доработают его под себя, твоя же задача - показать самое важное - принцип, поэтому выкладывай всё как есть.
     
  8. zaxar163

    zaxar163 Активный участник Пользователь

    Баллы:
    66
    Есть в гравитЛаунчере у нас мини-фильтр, канал который доступен только владельцам проектов но:
    upload_2019-6-22_16-28-2.png
     
  9. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    А если то же самое, только понятным языком? Что именно "но" и кто это на скрине, и что это должно означать?
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    И майн с форжем можно выбрасывать, ибо asm либа отвалится. А нативные читы продолжат работать. К примеру подменим нативку из lwjgl. Через jni все прозрачно же будет.
     
    Последнее редактирование: 22 июн 2019
  11. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    А если перемешать расположение полей в JNIEnv и собрать все нативки с новыми хедерами? Тогда отвалятся и нативные читы на JNI.
     
  12. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Как вариант. Но придется вести поддержку новых версий. Да и в модах типо комп крафт бывают нативки, внезапно. Все это пересобирать тоже.
     
  13. HoShiMin

    HoShiMin Старожил Пользователь

    Баллы:
    173
    @fereter, раз уж занялся, поресёрчи всё это - и возможность пошифровать классы, и перемешивание полей в JNI
     
  14. Автор темы
    fereter

    fereter Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fereter
    Добавил проверку стека на предмет gl11 и JVM_MonitorNotify. Добавил в версию с черными/белыми списками проверку на последний frame стека по белым спискам.
    Было 13 секунд. Стало 13 секунд.
    Протестировал на GTNH 2.0.7.5.
    В ближайших планах вырезать jvmti и добавить демку на третьем сашке.
     
  15. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Форж отвалится.
     
  16. Автор темы
    fereter

    fereter Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fereter
    Почему? Если зашифрровать и его, то ничего не должно отвалиться.
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну попробуй. Посмотрим как asm себя поведет.
     
  18. Автор темы
    fereter

    fereter Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    Fereter
    При запуске vanilla 1.6.4 возникает ошибка парсинга одного из майновских классов. Я немного модифицировал логирование загрузки классов и добавил записи вида "[Loading %classname% GetFrameCount = %getframeCcount%]" для отладки. Выводятся они еше до проверки magic number. Лог падения прилагаю.
    Код:
    [Loading avi GetFrameCount = 15]
    [Loading avi:avi from file:/C:/Users/rect/AppData/Roaming/.technic/modpacks/vanilla/bin/minecraft.jar]
    [Loaded avi from file:/C:/Users/rect/AppData/Roaming/.technic/modpacks/vanilla/bin/minecraft.jar]
    [Loading aux GetFrameCount = 10]
    [Loading java.lang.ClassFormatError GetFrameCount = 10]
    [Loaded java.lang.ClassFormatError from D:\dev\minedev\TenonteamPrivate\RebVM\vmsrc\jdk8\build\windows-x86_64-normal-server-release\jdk\classes]
    Exception in thread "Minecraft main thread" java.lang.ClassFormatError: Truncated class file
            at java.lang.ClassLoader.findBootstrapClass(Native Method)
            at java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1015)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:413)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            at avv.d(SourceFile:43)
            at net.minecraft.client.Minecraft.c(SourceFile:190)
            at net.minecraft.client.Minecraft.run(SourceFile:510)
            at java.lang.Thread.run(Thread.java:748)
    С проверками не связано, компилировал без проверок и логирования -- все равно вылетало.

    Кто знает с чем связано и как можно фиксить?
     
  19. MaksGruw

    MaksGruw Старожил Пользователь

    Баллы:
    103
    А вы уверены, что само ядро не повреждено (точнее говоря, его классы)? https://bugs.mojang.com/browse/MC-20394
    "Удалить и перескачать" пробовали?
     
  20. Code

    Code Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    не дашь шифровальщик - напишут свой. главное знать ключ и алгоритм
    если расшифровывать прямо в jvm, то из нее же можно вытащить ключи и зашифровать самому. можно конечно вместо общих алгоритмов наговнокодить свои, но это лишь усложнит процесс вытаскивания алгоритма, но не предотвратит.
    можно вместо шифрования использовать подпись. тогда вместо ключа расшифровки в jvm будет только открытый ключ, а закрытый для ручной подписи будет только у админов сервера.
    но особо ушлые смогут тупо подменить этот ключ в jvm и переподписать все классы.
    если конечно как-то не защитить jvm от изменения
    короче с шифрованием все сложно)
     

Поделиться этой страницей