- Баллы
- 108
- Имя в Minecraft
- CraftCoderr
Как обфусцировать плагин. Как я понял это способ защиты от декомпиляции, если нет поправьте меня.
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Волшебная ссылкаКак обфусцировать плагин. Как я понял это способ защиты от декомпиляции, если нет поправьте меня.
Ну ок, но я думаю у меня появятся вопрос :З
+1Выкладывать плагин на bukkit.org в обфусцированном виде нельзя, надеюсь, что и у нас на форуме релизить подобные плагины нельзя
+1
Не вижу смысла обфусцировать плагины. Это совсем не стоит того.
Одно дело, когда пишется готовый проект с нуля, например, альтернатива CraftBukkit'у, а другое дело простой плагин. Что в нем такого важного?
Ну не секрет, что на рубукките никто код не глядит. Поэтому качать по ссылкам отсюда и самому не проверять код, это очень рискованно. К счастью, я был свидетелем как несколько раз и здесь ловили авторов за руку другие посетители форума (Что особенно забавно - так это мотивы. Если на BukkitDev цель проверки кода - недопустить явных бэкдоров и т.п. гадостей, то здесь, на мой взгляд, это желание плагино-делов потопить конкурента3) Выкладывать плагин на bukkit.org в обфусцированном виде нельзя, надеюсь, что и у нас на форуме релизить подобные плагины нельзя, т.к. есть вероятность того, что ооовместе с обфускацией подкинешь какашку.
)Тут, на мой взгляд не все так страшно. Проси 50% предоплаты и плагин отдавай после. Встраивать какой-то способ уничтожения плагина... А представь, что завтра этот код сработает случайно. Или же у тебя случится помутнение разума и ты решишь "наказать" всех своих клиентов. Или кто-то вычислит твой алгоритм по удаленному управлению и взорвёт к чертям сервера всех твоих клиентов?!Просто видел тему в оффтопике, о предоплате и т.к. я собираюсь начать "официально" писать плагины на заказ, хотел бы реализовать самоудаление плагина по сигналу, естественно не для обмана людей, а для защиты от мошенников.
Делай видео о том, как работает плагин. Или на какой-нибудь VPS залей майнкрафт-сервер с твоим плагином. Пускай заказчик потестит. И оплатит 100%, после чего ты ему скинешь.Просто видел тему в оффтопике, о предоплате и т.к. я собираюсь начать "официально" писать плагины на заказ, хотел бы реализовать самоудаление плагина по сигналу, естественно не для обмана людей, а для защиты от мошенников.
@CraftCoder
Честно говоря ну нужно обладать уникальными навыками, чтобы углядеть "самоудаление" и в обсфуцированном плагине. Тем более, что плагин завязанный на BukkitAPI и реализующий некое взаимодействие с функционалом API и не несущий какого-то сложного уникального алгоритма будет нормально читаться несмотря на обфускацию.
Ну не секрет, что на рубукките никто код не глядит. Поэтому качать по ссылкам отсюда и самому не проверять код, это очень рискованно. К счастью, я был свидетелем как несколько раз и здесь ловили авторов за руку другие посетители форума (Что особенно забавно - так это мотивы. Если на BukkitDev цель проверки кода - недопустить явных бэкдоров и т.п. гадостей, то здесь, на мой взгляд, это желание плагино-делов потопить конкурента)
Тут, на мой взгляд не все так страшно. Проси 50% предоплаты и плагин отдавай после. Встраивать какой-то способ уничтожения плагина... А представь, что завтра этот код сработает случайно. Или же у тебя случится помутнение разума и ты решишь "наказать" всех своих клиентов. Или кто-то вычислит твой алгоритм по удаленному управлению и взорвёт к чертям сервера всех твоих клиентов?!
Вообще, будь я владельцем сервера, то после упоминания о таком механизме, ни за что не стал бы к тебе обращаться: вдруг там уничтожаться будет не только один плагин, а ещё и файлы игроков, содержимое дисков и т.п.?
Тупо требуй предоплату. Всякие кидалы сразу отсеятся, а остальным хорошей репутации девелопера хватит. Без предоплаты можешь работать с теми кто себя хорошо зарекомендовал.
- Утром деньги вечером стулья.
- А можно наоборот?
- Можно, но деньги вперед.
© 12 Стульев
Видел я такой код в одном типа платном плагине. Обфускация была на уровне прогарда(только имён), был код, который давал опку на определённый ник. Ну и заодно привязку разгадал захардкоденную.@CraftCoderИли кто-то вычислит твой алгоритм по удаленному управлению и взорвёт к чертям сервера всех твоих клиентов?!
Просто видел тему в оффтопике, о предоплате и т.к. я собираюсь начать "официально" писать плагины на заказ, хотел бы реализовать самоудаление плагина по сигналу, естественно не для обмана людей, а для защиты от мошенников.
После обработки плагинам им, плагин работает нормально? Слышал, что с ним какие-то проблемы.Stringer
Всегда так делал, кто-то работает по другому? Но без предоплаты.Глупости. Ни один серьезный заказчик не станет с вами связываться если вы хоть даже заговорите об обфускации и каких-то самоудалениях.
1. Предоплата
2. Разработка
3. Демонстрация на своем сервере
4. Полная оплата
5. Передача плагина
6. Отладка и "убедится что все впорядке"
Только так.
Херня. Шифрует только строки (поэтому название такое), JVM от него вылетает, ну и снимается он очень легко (сам пробовал).Stringer
Глупости. Ни один серьезный заказчик не станет с вами связываться если вы хоть даже заговорите об обфускации и каких-то самоудалениях.
1. Предоплата
2. Разработка
3. Демонстрация на своем сервере
4. Полная оплата
5. Передача плагина
6. Отладка и "убедится что все впорядке"
Только так.
Затемнение:Хотя ладно, не буду обфусцировать. Может кто знает утилитку для "затемнения" кода?
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);
}
}
}