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

Деобфускация и последующая декомпиляция модов

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем Sirse, 22 сен 2013.

  1. Автор темы
    Sirse

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

    Баллы:
    173
    Имя в Minecraft:
    Sirse
    На форуме часто спрашивают, как же декомпилировать мод с наибольшей точностью, чем деобфусцировать/декомпилировать, а после компилировать/обфусцировать.
    Инструкция не претендует на абсолютную истину, я делаю это так, как удобно мне.

    Для работы нам потребуются:
    1. MCP под нужную вам версию MineCraft
    2. Forge SRC, опять же под нужную версию MineCraft
    3. Bearded Octo Nemesis (BON) (Версия, работающая с ForgeGradle (MC 1.7.x))
    4. Декомпилятор. Я предпочитаю использовать FernFlower с патчиком от agaricusb, но можно использовать и JD-GUI. Учтите, что у FF есть проблемы с обработкой компараторов!

    1. Ставим MCP, ставим на него Forge. Если у вас возникли проблемы на этом этапе, то подумайте, стоит ли вообще читать мануал дальше.
    2. Запускаем BON, он потребуется для деобфускации мода. Он имеет консольный режим, однако я предпочитаю пользоваться GUI.
    В поле Input File указываем путь до zip c нашим модом.
    В поле Output File указываем путь и название файла, в который BON сохранит деобфусцированный мод.
    В поле MCP Folder указываем путь к каталогу с MCP
    Остальные поля трогать не нужно. Запускаем процесс кнопкой "GO".
    3. Файл, полученный в процессе шага 2 открываем любым архиватором, и извлекаем содержимое в отдельный каталог. Теперь дело за малым - декомпиляцией.
    Запускаем fernflower.jar со следующими параметрами - путь_к_каталогу_с_деобфусцированными_.class путь_к_каталогу,_куда_FF_должен_сложить_исходники
    Например, в терминале, это будет выглядеть так
    java -jar fernflower.jar /home/user/classes/ /home/user/sources/Если всё было сделано правильно, то на выходе вы получите исходники, с которыми вы можете делать всё что угодно.
    Архив, с компонентами, при помощи которых я работаю под Windows, можно скачать в здесь.

    Так же рекомендую попробовать автоматический скрипт для деобфускации/декомпиляции от @gamerforEA
     
    Последнее редактирование: 7 июн 2014
    Meowt, TicTacKitKat, scrik78 и 23 другим нравится это.
  2. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ещё добавь гайд по добавлению буккит эвентов для модов:D
     
    Larin, QuadX, saharin94 и 2 другим нравится это.
  3. AlexMerser

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

    Баллы:
    173
    Это уже умение, к каждому багу свой подход:)
     
  4. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Спасибо, теперь буду получать меньше пустых исходников :)
     
  5. QuadX

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

    Баллы:
    103
    Skype:
    happyminers
    Спасибо за информацию!
     
    Сникерсни нравится это.
  6. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    А как обратно компилировать и обфусцировать исходник?
     
  7. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    В eclipse/mcp потом в Bon reobfuscate
     
  8. BleaZzZ

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

    Баллы:
    153
    Ну зачем?:) теперь увеличится количество школо-недокодеров.
     
    andrew_houp нравится это.
  9. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    Не переживай, кодировка мне не интересна, просто нужно Rei's minimap перевести.:)
     
  10. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    А с каких пор для перевода нужна деобфускация/обфускация и декомпиляция/компиляция? Юзай InClassTranslator и не мучайся.
     
  11. BleaZzZ

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

    Баллы:
    153
    Не всегда можно через него. Бывают случаи, когда он не поможет, да и сам код удобнее править.
     
  12. alexandrage

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

    Баллы:
    173
    Ты про
    byte[] byte = new byte[]
    {

    }
    :D
    Тогда реджава.
     
    Последнее редактирование: 21 янв 2014
  13. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    Как с помощью mcp компилировать исходник?
     
  14. alexandrage

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

    Баллы:
    173
    Ручками.
     
  15. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    А можно по подробнее? Что нажимать и где при этом должен находится исходник?
     
  16. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Кидаешь исходники мода в MCP/src/minecraft, проверяешь всё это дело через Eclipse (можно использовать и что-нибудь другое) на наличие ошибок, запускаешь файл recompile.bat (.sh), если надо реобфусцировать, то после рекомпиляции запускаешь файл reobfuscate.bat (.sh).
     
  17. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    Как все это дело проверить?
    Кидаю исходник KeyInput в MCP/src/minecraft
    [​IMG]
    Запускаю рекомпиляцию и получаю
    [​IMG]
    Код:
      symbol:  class EnumRarity
      location: class ItemEnchantedBook
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockAnvil.java:7:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockAnvil.java:67:
    error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockAnvil
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBasePressurePl
    ate.java:7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBasePressurePl
    ate.java:271: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockBasePressurePlate
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBed.java:8: er
    ror: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBed.java:157:
    error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockBed
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBrewingStand.j
    ava:8: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockBrewingStand.j
    ava:209: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockBrewingStand
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockButton.java:8:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockButton.java:41
    3: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister) {}
                                ^
    
      symbol:  class IconRegister
      location: class BlockButton
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCactus.java:7:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCactus.java:16
    6: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockCactus
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCake.java:7: e
    rror: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCake.java:90:
    error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockCake
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCarpet.java:7:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCarpet.java:14
    6: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister) {}
                                ^
    
      symbol:  class IconRegister
      location: class BlockCarpet
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCarrot.java:5:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCrops.java:6:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCarrot.java:54
    : error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockCarrot
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCrops.java:215
    : error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockCrops
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCocoa.java:7:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockCocoa.java:228
    : error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockCocoa
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockColored.java:7
    : error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockColored.java:6
    4: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockColored
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDetectorRail.j
    ava:7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDetectorRail.j
    ava:174: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockDetectorRail
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDispenser.java
    :7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDispenser.java
    :110: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockDispenser
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDoor.java:7: e
    rror: package net.minecraft.client.renderer does not exist
    import net.minecraft.client.renderer.IconFlipped;
                                        ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDoor.java:8: e
    rror: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDoor.java:103:
    error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockDoor
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDropper.java:5
    : error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockDropper.java:2
    7: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockDropper
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEnchantmentTab
    le.java:7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEnchantmentTab
    le.java:127: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockEnchantmentTable
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEnderChest.jav
    a:7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEnderChest.jav
    a:171: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockEnderChest
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEndPortal.java
    :8: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEndPortal.java
    :135: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockEndPortal
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEndPortalFrame
    .java:8: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockEndPortalFrame
    .java:36: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockEndPortalFrame
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFarmland.java:
    7: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFarmland.java:
    176: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockFarmland
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFence.java:7:
    error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFence.java:187
    : error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister)
                                ^
    
      symbol:  class IconRegister
      location: class BlockFence
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFenceGate.java
    :6: error: package net.minecraft.client.renderer.texture does not exist
    import net.minecraft.client.renderer.texture.IconRegister;
                                                ^
    
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\block\BlockFenceGate.java
    :175: error: cannot find symbol
        public void func_94332_a(IconRegister par1IconRegister) {}
                                ^
    
      symbol:  class IconRegister
      location: class BlockFenceGate
    C:\mcp164\forge\mcp\src\minecraft_server\net\minecraft\util\ChatMessageComponent
    .java:270: warning: non-varargs call of varargs method with inexact argument typ
    e for last parameter;
                    var7.append(StatCollector.translateToLocalFormatted(this.transla
    tionKey, var13));
    
            ^
    
      cast to Object for a varargs call
      cast to Object[] for a non-varargs call and to suppress this warning
    100 errors
    1 warning
    ==================
    
    Для продолжения нажмите любую клавишу . . .
     
  18. gamerforEA

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

    Баллы:
    143
    Skype:
    sk2000sk1
    Имя в Minecraft:
    gamerforEA_MCPC
    Eclipse сам находит и подсвечивает ошибки.
     
  19. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Собирать клиент надо, а не сервер. И должна соблюдаться структура мода
     
    BleaZzZ нравится это.
  20. H2SO4

    H2SO4 Участник Пользователь

    Баллы:
    33
    Имя в Minecraft:
    BLABLA
    MCP не хочет у меня не как компилировать(и не надо намеков по поводу произрастания моих рук:)). Скажите как в Eclipse скомпилировать исходник .java в .class. Желательно подробную инструкцию что бы не запутаться. Буду благодарен.;)
     

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