щшпавпроилтджэдлорпа забаньте меня нахрен

Комментарии (24)


  1. cat_chi
    16.07.2023 13:05
    +4

    Что думаете?

    Думаю, что в статье очень много внимания уделено реализации тривиальных вещей вроде "собираем файлы .class и складываем их List".

    Немного токсичности

    И с кодом, извините, на уровне студенческой курсовой.

    И очень мало внимания, собственно, теме статьи.

    Немного нытья на тему винды

    Довольно скудно описано, как это вообще работает. Может у меня голова с утра воскресенья просто плохо варит, но я действительно не вполне понимаю, какие действия должен выполнить пользователь, чтобы запустить у себя подобным образом защищённое приложение. То, что всё делается для крайне узкого сценария – строго для Windows, совсем не облегчает задачу. Java вроде как кроссплатформенный язык.

    Ладно, давайте к конкретике. У нас есть некое решение, которое заявляется как "лучшее" для защиты Java-приложений. Лучшее по сравнению с чем? И по каким критериям проводилось сравнение? Этого нет, и из-за этого непонятна толком даже сама проблема, которая решалась. И какой фатальный недостаток есть у других решений.

    Первый этап, шифруем классы с использованием XOR. Я мог бы докопаться и к реализации XOR, и поспрашивать про причины использования именно этого алгоритма, но это уже не так важно, т.к. есть более фундаментальная проблема. Даже если бы вы использовали AES, ничего бы не изменилось. Т.к. "белым ящиком" (гуглите white box cryptography), судя по всему, даже и не пахнет. А раз нет "белого ящика", то и решение неизбежно проигрывает любому другому, где он есть. А значит, оно никак не может считаться даже просто хорошим, не то чтобы лучшим.

    Почему так? Судите сами. Для запуска приложения вам нужно его дешифровать, для чего используются ключи, заранее сохранённые где-либо. И если я правильно понял (а я очень хотел бы ошибиться...), то вы предлагаете:

    data.txt и классы залить на сайт и получать в лоадере

    Залить ключи для расшифровки куда-то на публично доступный ресурс?

    Короче... Защита может и защищает, но только от тех, кто не планирует ничего взламывать. Фактически её просто нет


    1. vilgeforce
      16.07.2023 13:05
      +2

      Отличная защита, потому что лучшая: никому и в голову не придет использовать с лучшей защитой обфускаторы, поскольку они по определению хуже. Отреверсить единственный сишный файл с крайне скудным функционалом - эт легко и вот мы уже получаем чудесный читаемый JAVA-код ;-) И немного поковырявшись пишем статический unprotect


    1. qmzip Автор
      16.07.2023 13:05
      -2

      Токсичность

      Почему на уровне студенческой курсовой? Просто собрал классы в List

      Лучшее по сравнению с чем?

      По сравнению с обфускацией кода, в начале написал что весь инет засран обфускацией

      Я мог бы докопаться и к реализации XOR, и поспрашивать про причины использования именно этого алгоритма

      Я показал пример шифрования, можно использовать любой другой метод, дело ваше


      1. vilgeforce
        16.07.2023 13:05
        +3

        И чем же шифрование с известным ключом лучше обфускации?


        1. sshikov
          16.07.2023 13:05
          +3

          Именно.


          Я показал пример шифрования, можно использовать любой другой метод, дело ваше

          Нельзя использовать любой другой метод, пока вы не покажете, как в процессе не раскрыть ключи шифрования. То есть, все упирается в тот факт, что дешифровщик должен где-то взять ключ, а значит атакующий может потенциально взять его точно там же. Или вы думаете, ваш код на C никто не поймет? И не догадается, где лежат ключи (это я все автору, если что)?


          1. qmzip Автор
            16.07.2023 13:05
            -2

            Хорошо, почему вы проигнорировали итог? VMProtect ставите jvm.dll и вы байт 0xB в жизни не узнаете. Про XOR опять же, ставьте свой AES или Blowfish (Bcrypt) и не нойте


            1. cat_chi
              16.07.2023 13:05
              +1

              Вы уверены, что сами понимаете, как работает ваше собственное решение?


      1. cat_chi
        16.07.2023 13:05
        +1

        Почему на уровне студенческой курсовой? Просто собрал классы в List

        Я про код в целом. Напомнил мне времена юности, когда я ещё ни разу не имел дела с промышленным кодом и тоже писал капитанские комментарии к каждой строчке ????
        Но это я так, докапываюсь к мелочам, можете не обращать внимания. Другие моменты важнее...

        По сравнению с обфускацией кода, в начале написал что весь инет засран обфускацией

        Так а почему он лучше обфускации? Аргументов в статье нет вообще. Предлагаете принять это как аксиому? Я не согласен. Так что можем подискутировать в комментариях.

        Я показал пример шифрования

        Плохой пример. XOR одним байтом? Почти худший пример из возможных. Он нестойкий даже в ситуации, когда ключ надёжно скрыт от злоумышленника.

        Если ваше решение претендует на статус "лучшего способа защиты" – пусть изволит соответствовать этому высокому званию, и предлагает лучшие практики для каждого компонента. Ну или хотя бы явно помечайте, что мол вот здесь у нас просто Proof of Concept, а детали не проработаны.

        Proof of Concept, кстати, не пройден...

        можно использовать любой другой метод

        Нельзя. Точнее, в этом нет смысла. Ни один из методов симметричного шифрования не годится, если злоумышленник может получить ключ без малейших затруднений. Поэтому в данном случае нет большой разницы, что именно использовать – крутой и безопасный AES, слабенький XOR с однобайтовой гаммой или вообще base64 ????

        дело ваше

        Э, нет. Это как раз ваше дело. Я как раз не претендую на реализацию лучшего способа защиты Java-приложений. В отличие от.


        1. qmzip Автор
          16.07.2023 13:05

          Плохой пример. XOR одним байтом? Почти худший пример из возможных

          Согласен, пример плохой

          если злоумышленник может получить ключ без малейших затруднений

          Поставьте VMP последней версии и вы ничего не сделаете, написал выше.

          Вы уверены, что сами понимаете, как работает ваше собственное решение?

          Да понимаю, уже сказал что VMP и вы ничего не сделаете

          И ещё, вы считаете что копаться в dll'ке и exe файле покрытые протектом легче чем обфускация? странные вы люди


          1. vilgeforce
            16.07.2023 13:05

            В случае с XOR не поможет VMP. Даже накрытый им исполняемый файл не нужен


          1. cat_chi
            16.07.2023 13:05

            Поставьте VMP последней версии и вы ничего не сделаете, написал выше

            То есть чтобы "лучшее решение для защиты Java-приложений" тупо заработало, мне нужно заплатить больше полутора тысяч долларов за какое-то другое решение?..

            Простите, а ваше решение в этой великолепной схеме вообще какую роль играет? :)


            1. qmzip Автор
              16.07.2023 13:05

              как сказали ниже то это действительно так "если вы не хотите декомпиляции классов - не пишите на jvm языках... ". Но если вы всё же решили на них писать придётся заплатить полтора тысяч долларов. Байт будет запутан в разных местах из-за мутации и виртуализации


              1. cat_chi
                16.07.2023 13:05

                Но если вы всё же решили на них писать придётся заплатить полтора тысяч долларов

                Ну, положим, для действительно качественной энтерпрайзной защиты мне всё же понадобится приобрести какое-нибудь решение.

                Но давайте вернёмся на шаг назад и всё-таки уточним, а ваше-то решение тогда мне на кой чёрт сдалось? :)

                И почему оно лучшее, если без VMProtect не работает?


                1. qmzip Автор
                  16.07.2023 13:05

                  А что оно худшее? ZKM стоит половину VMP а почти ничего не делает. Обфускация снимается максимум за дня 2 если это ZKM, а VMP ты за год не снимешь полностью


                  1. vilgeforce
                    16.07.2023 13:05

                    Ваш единственный байт снимается за минуту, по сравнению с 2 днями - прогресс, мне кажется ;-)


                    1. qmzip Автор
                      16.07.2023 13:05
                      -1

                      так, а теперь добавь туда BCrypt и уже пососи


                      1. cat_chi
                        16.07.2023 13:05
                        +1

                        Для полного профана в области криптографии вы какой-то слишком борзый


                  1. cat_chi
                    16.07.2023 13:05

                    Так мы VMP обсуждаем, или всё-таки ваше решение? :)

                    В третий раз спрошу – на кой чёрт мне ваше решение, если у меня уже есть VMP?


                    1. qmzip Автор
                      16.07.2023 13:05

                      а что вы собираетесь покрывать своим VMP? для этого я здесь

                      Для полного профана в области криптографии вы какой-то слишком борзый

                      Чтобы высрать этот бред лучше был привёл аргумент чем тебя не утроил BCrypt. Вот у тебя WhiteBox, а у меня Bcrypt, сори


          1. cat_chi
            16.07.2023 13:05

            И ещё, вы считаете что копаться в dll'ке и exe файле покрытые протектом легче чем обфускация? странные вы люди

            У вас, конечно же, есть доказательство, что это сложнее? ????

            Полагаю, вы проводили такое сравнение. Какой инструмент использовали для анализа, Иду? Гидру? Или хотя бы просто радар?


            1. qmzip Автор
              16.07.2023 13:05

              то есть копаться в запакнутой дллке, с кучей мутации и виртуализации легче чем открыть JbyteEdit и заменить if на ifne и радоваться жизни? даже если защита сложнее чем if (ну логично что сложнее) то проигрыш VMP идёт в любом случае


  1. vilgeforce
    16.07.2023 13:05
    +4

    Первое правило криптографии: никогда не пишите криптографию! Ваше шифрование - фактически XOR единственным байтом. Просто ради интереса посчитайте статистику встречаемости байтов в зашифрованных файлах и сравните самый частый символ с ключом шифрования. Думаю, с диграммами это будет еще лучше работать.

    Даже если вы возьмете 16-32 байтные XOR-ключи, я думаю что их возможно восстановить имея только зашифрованный .class достаточного размера довольно быстро. Потому что у вас фактически будет Two-time pad, да еще и с частично известными исходными данными, плюс угадать часть исходных данных совсем несложно. Используйте лучше RC4 (нет).


  1. breninsul
    16.07.2023 13:05
    +4

    эм... если вы не хотите декомпиляции классов - не пишите на jvm языках...

    Защита основана на потенциально. незнании как оно работает атакующим. Но то, как оно работает есть в открытом доступе. В общем, простите, это не защита....


  1. cat_chi
    16.07.2023 13:05

    Подведу итоги диалога с автором в отдельном сообщении:

    1. Если у вас нет под рукой какого-либо платного энтерпрайзного решения для защиты кода, вроде VMProtect (хотя я бы предпочёл более функциональный DexProtector, но не суть важно), то предложенное автором решение толком ничего не защищает.

    2. Если у вас уже есть надёжное платное энтерпрайзное решение для защиты кода, то совершенно непонятно, на кой чёрт эти танцы с бубном и XOR'ами нужны – тот же DexProtector содержит в себе кучу механизмов для защиты классов, причём куда более надёжных и универсальных.

    3. Решение само по себе могло быть весьма интересным, если бы содержало реализацию каких-нибудь передовых практик, ну или хотя бы попытку реализации white box. Но, к сожалению, там тривиальный XOR с открытым хранением гаммы.

    В итоге совершенно непонятно, зачем это всё было.