щшпавпроилтджэдлорпа забаньте меня нахрен
Комментарии (24)
vilgeforce
16.07.2023 13:05+4Первое правило криптографии: никогда не пишите криптографию! Ваше шифрование - фактически XOR единственным байтом. Просто ради интереса посчитайте статистику встречаемости байтов в зашифрованных файлах и сравните самый частый символ с ключом шифрования. Думаю, с диграммами это будет еще лучше работать.
Даже если вы возьмете 16-32 байтные XOR-ключи, я думаю что их возможно восстановить имея только зашифрованный .class достаточного размера довольно быстро. Потому что у вас фактически будет Two-time pad, да еще и с частично известными исходными данными, плюс угадать часть исходных данных совсем несложно. Используйте лучше RC4 (нет).
breninsul
16.07.2023 13:05+4эм... если вы не хотите декомпиляции классов - не пишите на jvm языках...
Защита основана на потенциально. незнании как оно работает атакующим. Но то, как оно работает есть в открытом доступе. В общем, простите, это не защита....
cat_chi
16.07.2023 13:05Подведу итоги диалога с автором в отдельном сообщении:
Если у вас нет под рукой какого-либо платного энтерпрайзного решения для защиты кода, вроде VMProtect (хотя я бы предпочёл более функциональный DexProtector, но не суть важно), то предложенное автором решение толком ничего не защищает.
Если у вас уже есть надёжное платное энтерпрайзное решение для защиты кода, то совершенно непонятно, на кой чёрт эти танцы с бубном и XOR'ами нужны – тот же DexProtector содержит в себе кучу механизмов для защиты классов, причём куда более надёжных и универсальных.
Решение само по себе могло быть весьма интересным, если бы содержало реализацию каких-нибудь передовых практик, ну или хотя бы попытку реализации white box. Но, к сожалению, там тривиальный XOR с открытым хранением гаммы.
В итоге совершенно непонятно, зачем это всё было.
cat_chi
Думаю, что в статье очень много внимания уделено реализации тривиальных вещей вроде "собираем файлы .class и складываем их List".
Немного токсичности
И с кодом, извините, на уровне студенческой курсовой.
И очень мало внимания, собственно, теме статьи.
Немного нытья на тему винды
Довольно скудно описано, как это вообще работает. Может у меня голова с утра воскресенья просто плохо варит, но я действительно не вполне понимаю, какие действия должен выполнить пользователь, чтобы запустить у себя подобным образом защищённое приложение. То, что всё делается для крайне узкого сценария – строго для Windows, совсем не облегчает задачу. Java вроде как кроссплатформенный язык.
Ладно, давайте к конкретике. У нас есть некое решение, которое заявляется как "лучшее" для защиты Java-приложений. Лучшее по сравнению с чем? И по каким критериям проводилось сравнение? Этого нет, и из-за этого непонятна толком даже сама проблема, которая решалась. И какой фатальный недостаток есть у других решений.
Первый этап, шифруем классы с использованием XOR. Я мог бы докопаться и к реализации XOR, и поспрашивать про причины использования именно этого алгоритма, но это уже не так важно, т.к. есть более фундаментальная проблема. Даже если бы вы использовали AES, ничего бы не изменилось. Т.к. "белым ящиком" (гуглите white box cryptography), судя по всему, даже и не пахнет. А раз нет "белого ящика", то и решение неизбежно проигрывает любому другому, где он есть. А значит, оно никак не может считаться даже просто хорошим, не то чтобы лучшим.
Почему так? Судите сами. Для запуска приложения вам нужно его дешифровать, для чего используются ключи, заранее сохранённые где-либо. И если я правильно понял (а я очень хотел бы ошибиться...), то вы предлагаете:
Залить ключи для расшифровки куда-то на публично доступный ресурс?
Короче... Защита может и защищает, но только от тех, кто не планирует ничего взламывать. Фактически её просто нет
vilgeforce
Отличная защита, потому что лучшая: никому и в голову не придет использовать с лучшей защитой обфускаторы, поскольку они по определению хуже. Отреверсить единственный сишный файл с крайне скудным функционалом - эт легко и вот мы уже получаем чудесный читаемый JAVA-код ;-) И немного поковырявшись пишем статический unprotect
qmzip Автор
Токсичность
Почему на уровне студенческой курсовой? Просто собрал классы в List
По сравнению с обфускацией кода, в начале написал что весь инет засран обфускацией
Я показал пример шифрования, можно использовать любой другой метод, дело ваше
vilgeforce
И чем же шифрование с известным ключом лучше обфускации?
sshikov
Именно.
Нельзя использовать любой другой метод, пока вы не покажете, как в процессе не раскрыть ключи шифрования. То есть, все упирается в тот факт, что дешифровщик должен где-то взять ключ, а значит атакующий может потенциально взять его точно там же. Или вы думаете, ваш код на C никто не поймет? И не догадается, где лежат ключи (это я все автору, если что)?
qmzip Автор
Хорошо, почему вы проигнорировали итог? VMProtect ставите jvm.dll и вы байт 0xB в жизни не узнаете. Про XOR опять же, ставьте свой AES или Blowfish (Bcrypt) и не нойте
cat_chi
Вы уверены, что сами понимаете, как работает ваше собственное решение?
cat_chi
Я про код в целом. Напомнил мне времена юности, когда я ещё ни разу не имел дела с промышленным кодом и тоже писал капитанские комментарии к каждой строчке ????
Но это я так, докапываюсь к мелочам, можете не обращать внимания. Другие моменты важнее...
Так а почему он лучше обфускации? Аргументов в статье нет вообще. Предлагаете принять это как аксиому? Я не согласен. Так что можем подискутировать в комментариях.
Плохой пример. XOR одним байтом? Почти худший пример из возможных. Он нестойкий даже в ситуации, когда ключ надёжно скрыт от злоумышленника.
Если ваше решение претендует на статус "лучшего способа защиты" – пусть изволит соответствовать этому высокому званию, и предлагает лучшие практики для каждого компонента. Ну или хотя бы явно помечайте, что мол вот здесь у нас просто Proof of Concept, а детали не проработаны.
Proof of Concept, кстати, не пройден...
Нельзя. Точнее, в этом нет смысла. Ни один из методов симметричного шифрования не годится, если злоумышленник может получить ключ без малейших затруднений. Поэтому в данном случае нет большой разницы, что именно использовать – крутой и безопасный AES, слабенький XOR с однобайтовой гаммой или вообще base64 ????
Э, нет. Это как раз ваше дело. Я как раз не претендую на реализацию лучшего способа защиты Java-приложений. В отличие от.
qmzip Автор
Согласен, пример плохой
Поставьте VMP последней версии и вы ничего не сделаете, написал выше.
Да понимаю, уже сказал что VMP и вы ничего не сделаете
И ещё, вы считаете что копаться в dll'ке и exe файле покрытые протектом легче чем обфускация? странные вы люди
vilgeforce
В случае с XOR не поможет VMP. Даже накрытый им исполняемый файл не нужен
cat_chi
То есть чтобы "лучшее решение для защиты Java-приложений" тупо заработало, мне нужно заплатить больше полутора тысяч долларов за какое-то другое решение?..
Простите, а ваше решение в этой великолепной схеме вообще какую роль играет? :)
qmzip Автор
как сказали ниже то это действительно так "если вы не хотите декомпиляции классов - не пишите на jvm языках... ". Но если вы всё же решили на них писать придётся заплатить полтора тысяч долларов. Байт будет запутан в разных местах из-за мутации и виртуализации
cat_chi
Ну, положим, для действительно качественной энтерпрайзной защиты мне всё же понадобится приобрести какое-нибудь решение.
Но давайте вернёмся на шаг назад и всё-таки уточним, а ваше-то решение тогда мне на кой чёрт сдалось? :)
И почему оно лучшее, если без VMProtect не работает?
qmzip Автор
А что оно худшее? ZKM стоит половину VMP а почти ничего не делает. Обфускация снимается максимум за дня 2 если это ZKM, а VMP ты за год не снимешь полностью
vilgeforce
Ваш единственный байт снимается за минуту, по сравнению с 2 днями - прогресс, мне кажется ;-)
qmzip Автор
так, а теперь добавь туда BCrypt и уже пососи
cat_chi
Для полного профана в области криптографии вы какой-то слишком борзый
cat_chi
Так мы VMP обсуждаем, или всё-таки ваше решение? :)
В третий раз спрошу – на кой чёрт мне ваше решение, если у меня уже есть VMP?
qmzip Автор
а что вы собираетесь покрывать своим VMP? для этого я здесь
Чтобы высрать этот бред лучше был привёл аргумент чем тебя не утроил BCrypt. Вот у тебя WhiteBox, а у меня Bcrypt, сори
cat_chi
У вас, конечно же, есть доказательство, что это сложнее? ????
Полагаю, вы проводили такое сравнение. Какой инструмент использовали для анализа, Иду? Гидру? Или хотя бы просто радар?
qmzip Автор
то есть копаться в запакнутой дллке, с кучей мутации и виртуализации легче чем открыть JbyteEdit и заменить if на ifne и радоваться жизни? даже если защита сложнее чем if (ну логично что сложнее) то проигрыш VMP идёт в любом случае