Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Как обфусцировать плагин?

Тема в разделе "Разработка плагинов для новичков", создана пользователем CraftCoder, 30 авг 2014.

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

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Как обфусцировать плагин. Как я понял это способ защиты от декомпиляции, если нет поправьте меня.
     
  2. Хостинг MineCraft
    <
  3. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Волшебная ссылка
     
  4. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Ну ок, но я думаю у меня появятся вопрос :З
     
  5. ptnk

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

    Баллы:
    173
    Чего ты там собрался обфусцировать в своих самоделках?
    1) Если в плагине нет несколько тысяч строк кода - обфусцировать бессмыслено, так как восстановить подобную подделку не составит труда.
    2) Плагин имеет огромной количество внешних имортом, которые не шифруются, а это значит, что большая часть твоего функционала останется не обфусцирована и будет всем видна, в купе с первым пунктов - игра не стоит свечь.
    3) Выкладывать плагин на bukkit.org в обфусцированном виде нельзя, надеюсь, что и у нас на форуме релизить подобные плагины нельзя, т.к. есть вероятность того, что ооовместе с обфускацией подкинешь какашку. Хотя, если пункт 1, то окакашку очень глупо выкладывать.
     
  6. kapehh

    kapehh Ньюби Пользователь

    Баллы:
    1
    +1

    Не вижу смысла обфусцировать плагины. Это совсем не стоит того.
    Одно дело, когда пишется готовый проект с нуля, например, альтернатива CraftBukkit'у, а другое дело простой плагин. Что в нем такого важного?
     
  7. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Просто видел тему в оффтопике, о предоплате и т.к. я собираюсь начать "официально" писать плагины на заказ, хотел бы реализовать самоудаление плагина по сигналу, естественно не для обмана людей, а для защиты от мошенников.
     
  8. kapehh

    kapehh Ньюби Пользователь

    Баллы:
    1
    Делай видео о том, как работает плагин. Или на какой-нибудь VPS залей майнкрафт-сервер с твоим плагином. Пускай заказчик потестит. И оплатит 100%, после чего ты ему скинешь.
    Но это надо обговорить заранее, вдруг заказчик откажется платить сразу 100% после проверки на твоем сервере, тогда и смысл отпадает делать.
     
  9. DragoSFire

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

    Баллы:
    123
    Skype:
    dragosfire2012
    Имя в Minecraft:
    DragoSFire
  10. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Я имел в виду до оплаты кидать плагин с самоуничтожением, а после оплаты отправлять нормальный плагин, хотя действительно лучше просто продемонстрировать работу плагина, а не городить огород.
     
  11. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Тупо требуй предоплату. Всякие кидалы сразу отсеятся, а остальным хорошей репутации девелопера хватит. Без предоплаты можешь работать с теми кто себя хорошо зарекомендовал.

    - Утром деньги вечером стулья.
    - А можно наоборот?
    - Можно, но деньги вперед.
    © 12 Стульев
     
  12. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    :good:
     
  13. ptnk

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

    Баллы:
    173
    http://www.rubukkit.org/threads/fun-spaceball-game-1-4-5-r1-0-1-7-9-r0-2.70968/page-5#post-1004353
    вот целый плагин обфусцирован. основная логика спрятана от глаз, но я такому паблику бы не доверёл бы.

    + не стоит забывать, что хорошая обфускация достигается малой связностью с другими плагинами, + об рефлекции и аннотациях порой можно забыть, да и ещё о многих вещах.

    Ничего не мешаеть брать и показывать плагин на тестовом сервере.
     
    Последнее редактирование: 31 авг 2014
  14. MLP

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

    Баллы:
    36
    Хорошие коммерческие обфускаторы стоят дороже, чем ты сможешь заработать на плагине.
     
  15. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    После обработки плагинам им, плагин работает нормально? Слышал, что с ним какие-то проблемы.[DOUBLEPOST=1430850377,1430850229][/DOUBLEPOST]Хотя ладно, не буду обфусцировать. Может кто знает утилитку для "затемнения" кода?
     
  16. ql_Nik_lp

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

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Глупости. Ни один серьезный заказчик не станет с вами связываться если вы хоть даже заговорите об обфускации и каких-то самоудалениях.
    1. Предоплата
    2. Разработка
    3. Демонстрация на своем сервере
    4. Полная оплата
    5. Передача плагина
    6. Отладка и "убедится что все впорядке"
    Только так.
     
  17. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Всегда так делал, кто-то работает по другому? Но без предоплаты.
     
  18. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    Херня. Шифрует только строки (поэтому название такое), JVM от него вылетает, ну и снимается он очень легко (сам пробовал).
     
  19. Автор темы
    CraftCoder

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

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Затемнение:
    Было так:
    Код:
    private void loadPixie( URL url ) throws Exception {
    
    URLConnection connection = url.openConnection();
    
    connection.setUseCaches( true );
    
    in = new DataInputStream( connection.getInputStream() );
    
    // Verify file format via magic numbers and version number.
    
    if (in.readInt() != Constants.MAGIC)
    
    throw new Exception( "Bad Pixie header" );
    
    int v = in.readShort();
    
    if (v != FILE_VERSION)
    
    throw new Exception( "Bad Pixie version " + v );
    
    pixieWidth = readUnsignedVInt();
    
    pixieHeight = readUnsignedVInt();
    
    // Skip unused fields.
    
    readUnsignedVInt();
    
    readUnsignedVInt();
    
    readUnsignedVInt(); // Frame table size always 1.
    
    frame = readUnsignedVInt();
    
    readUnsignedVInt(); // Skip end of control commands.
    
    // Object table size always 0.
    
    readUnsignedVInt();
    
    // Skip unused fields.
    
    readUnsignedVInt();
    
    readUnsignedVInt();
    
    // Block-read the rest.
    
    int byteCount = readUnsignedVInt();
    
    pixieBody = new byte[ byteCount ];
    
    int maxBlockSize = byteCount/20+1;
    
    flushVInt();
    
    Graphics fg = getGraphics();
    
    int bytesDone = 0;
    
    while (bytesDone < byteCount) {
    
    int blockSize = byteCount-bytesDone;
    
    if (blockSize > maxBlockSize)
    
    blockSize = maxBlockSize;
    
    in.readFully( pixieBody, bytesDone, blockSize );
    
    bytesDone += blockSize;
    
    // Update progress monitor.
    
    if (fg != null) {
    
    progress = bytesDone / (float) byteCount;
    
    fg.setColor( getForeground() );
    
    fg.fillRect( 0, size().height-4,
    
    (int)(progress * size().width), 4 );
    
    }
    
    }
    
    if (fg != null)
    
    fg.dispose();
    
    in.close();
    
    setMessage(null );
    
    }
    
    Стало так:
    Код:
    private void _mth015E(void 867 % static 931)
    
    {
    
    void short + = 867 % static 931.openConnection();
    
    short +.setUseCaches(true);
    
    private01200126013D = new DataInputStream(short +.getInputStream());
    
    if(private01200126013D.readInt() != 0x5daa749)
    
    throw new Exception("Bad Pixie header");
    
    void do const throws = private01200126013D.readShort();
    
    if(do const throws != 300)
    
    throw new Exception("Bad Pixie version " + do const throws);
    
    _fld015E = _mth012B();
    
    for = _mth012B();
    
    _mth012B();
    
    _mth012B();
    
    _mth012B();
    
    short01200129 = _mth012B();
    
    _mth012B();
    
    _mth012B();
    
    _mth012B();
    
    _mth012B();
    
    void |= = _mth012B();
    
    _fld013D013D0120import = new byte[|=];
    
    void void = |= / 20 + 1;
    
    private = false;
    
    void = = getGraphics();
    
    for(void catch 11 final = 0; catch 11 final < |=;)
    
    {
    
    void while if = |= - catch 11 final;
    
    if(while if > void)
    
    while if = void;
    
    private01200126013D.readFully(_fld013D013D0120import, catch 11 final, while if);
    
    catch 11 final += while if;
    
    if(= != null)
    
    {
    
    const = (float)catch 11 final / (float)|=;
    
    =.setColor(getForeground());
    
    =.fillRect(0, size().height - 4, (int)(const * size().width), 4);
    
    }
    
    }
    
    }
    
     

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