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

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

Discussion in 'Разработка плагинов для новичков' started by CraftCoder, Aug 30, 2014.

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

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

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

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

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

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

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
  5. ptnk

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

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

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

    Trophy Points:
    1
    +1

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

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

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

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

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

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

    Trophy Points:
    123
    Skype:
    dragosfire2012
    Имя в Minecraft:
    DragoSFire
    Stringer
     
  10. Автор темы
    CraftCoder

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

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

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

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

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

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

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    :good:
     
  13. ptnk

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    108
    Имя в Minecraft:
    CraftCoderr
    Затемнение:
    Было так:
    Code:
    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 );
    
    }
    
    Стало так:
    Code:
    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);
    
    }
    
    }
    
    }
    
     

Share This Page