Блог пользователя luckman

Автор luckman, 12 лет назад, По-русски

Уже второе соревнование подряд вместо чужого кода при попытке взлома показывает что-то такое:

Картинка

Невозможно увидеть ни 1го символа. В других браузерах (Опера, ИЕ) всё работает нормально. Кто сталкивался с таким багом? Как бороться?

Версия Chrome 25.0.1364.97 m Версия Shockwave Flash 11.2 r202

PS. Т.к. взломы возможны только на реал-тайм контестах, проверить, работает или нет то или иное решение бага, будет затруднительно.

UPD. Похоже проблема решается просто установкой новой версии Flash, на взломах проверю на следующих контестах.

  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

То что показывается после контеста видно нормально, во время тоже самое что у автора.

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

В версии 24.0.1312.57 m вроде как всё отображается хорошо.

»
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Нормально взламывал с хрома 25.0.1364.97 (но не с винды, btw)

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Версия Shockwave Flash 11.2 r202

А здесь написано, что последняя версия Flash для Chrome на Windows — 11.6.602.171.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится

    Кстати, их страничка Version Information показывается с тем же багом.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +3 Проголосовать: не нравится

      Может, http://forums.adobe.com/thread/891337 поможет?

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +3 Проголосовать: не нравится

        Ну галочка, которую они предлагают снять не снимается из-за того же лага.

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
          Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

          Да, но, это, кстати, неплохой метод проверки. Проблема всё-таки решилась новой версией flash-плеера, аппаратное ускорение сейчас отключено. В 11.2 отключение аппаратного ускорения не помогало.

          UPD. Аппаратное ускорение не влияет вовсе, проблема решилась просто новой версией flash. На взломах пока не проверено, но на Find Flash Player Version page стало работать.

»
12 лет назад, # |
  Проголосовать: нравится -8 Проголосовать: не нравится

В очередной раз озвучу фичреквест разработчикам codeforces: сделайте пожалуйста взломы на javascript; держать на компе эту ересь (флеш) приходится только ради контестов codeforces. Давно хочется снести это бажное решето.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +10 Проголосовать: не нравится

    В догонку, сделайте, пожалуйста подсветку синтаксиса при взломах.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    А как на javascript надежно сделать защиту от копирования текста? Не уверен, что это возможно. Подгружать картиночки не предлагать — это существенный трафик или низкое качество.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +5 Проголосовать: не нравится

      Можно наложить поверх текста прозрачное что-то. Тогда, возможно, в каких-то браузерах нельзя будет выделить.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится -17 Проголосовать: не нравится

      Можно рендерить на canvas, тогда защита будет не менее надёжная чем сейчас.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится +12 Проголосовать: не нравится

        Строчка будет доступна в JS'е?

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Да, plaintext будет доступен в момент вывода на canvas, видимо довольно просто его куда-нибудь перенаправить.

          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            А в текущей версии можно воспользоваться FineReader'ом. Или WireShark'ом (наверное). Первое вполне сопоставимо по сложности с "вычленить значение переменной в момент вывода на canvas", если не проще.

            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Часто код не помещается в окно, поэтому просто так распознать FineReader-ом не получится. WireShark не поможет, исходный код plaintext-ом не передается.

              В случае с javascript порог вхождения для чита поменьше, чем когда в браузере запускается actionscript bytecode. Вариант с javascript будет значительно упрощать лазейку для FineReader (например, можно расширить окно на весь экран и уже потом кэпчирить картинку).

              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, # ^ |
                  Проголосовать: нравится -17 Проголосовать: не нравится

                Вариант с FineReader и сейчас не проблема. Если кому-то так сильно хочется считерить, что не лень геморроиться с FineReader'ом, то он без проблем справится со скроллингом текста (ну или поreverse-engineer'ит формат, в котором текст по сети передаётся).

                Имхо, защиты от простой копипасты достаточно (тем более, что сейчас по сути только она и есть).

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          А сейчас как будто строчка недоступна? Она точно так же передаётся текстом по сети. То, что исходники флешового просмотрщика недоступны (и из-за этого не сразу понятно, как строка закодирована), — это типичный случай security through obscurity (если очень хочется — можно javascript через обфускатор прогнать, будет тот же эффект).

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      А что если кодировать двухцветную картинку с помощью RLE? Качество будет нормальное, а весить она будет совсем мало.

      UPD. Да, я понимаю, OCR в таком случае разруливает.

      • »
        »
        »
        »
        12 лет назад, # ^ |
        Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

        Не знаю как RLE, но скриншоты переведенные в чб и сохраненные как gif/png/jpg весят довольно много. И распознать значительно проще получается.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Можно разбить текст на маленькие кусочки. Кусочки перемешать. Позиционировать как надо в JavaScript через CSS-свойства.

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        Да, можно. Плюс к этому можно использовать кастомный web-font, который генерируется на лету и имеет множественные способы отображения одних и тех же символов. А еще некоторые части можно передавать картинками, некоторые рисовать на канвасе, а некоторые позиционировать через CSS. Можно еще прикрутить куда-нибудь SVG. Зачем?

        Любое из решений, в том числе ваше требует серьезных усилий, уменьшает защиту от OCR, оставляет простор для злоумышленников.

        Текущее решение надежно, работает под (по данным Wikipedia) Windows, Mac OS X, Linux, Solaris, Tablet OS, Android (только player). Из коробки работает почти у всех пользователей.

        Конечно, это текущее решение не вечно. Да, со временем доля Flash будет уменьшаться и текущее решение придется заменить (да, на нативные для браузера технологии). А сейчас я захожу на youtube и мне подсовывают Flash-плеер для просмотра видео. Как я понимаю большинство браузерных игр на Flash-е. Я писал плеер танчиков на HTML5 для Russian AI Cup и не был в восторге от перформанса решения на canvas и dom.

»
12 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Уже пару раз были случаи, когда устаревшая версия Flash мешает участнику делать взломы. Понятно, конечно, что виноват не Codeforces. Но, может, было бы неплохо ненавязчиво предупреждать таких участников о том, что надо бы обновить Flash?

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Вроде, все проблемы были не из-за устаревших версий Flash-а. Для просмотра взлома достаточно очень древнего плеера, образца двух-трех (а может и больше) летней давности.

»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

А обязательно ли использовать Flash, не может ли ту же работу проделать Java-апплет? Ведь у пользователя JDK какой-нибудь да стоит.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Java-декомпиляторы делают свое дело. Учитывая мизерный размер апплета, никакой обфускатор тут не поможет.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Не надо Java-апплет, это почти такой же адец, как и флеш. Есть же стек технологий для разработки веб-приложений, зачем использовать всякие дырявые костыли.

    (я посмотрю на любителей держать в браузере включенные флеш/джаву/сильверлайт/акробат ридер/другие плагины, после того, как они разок сходят на сайт с exploit-pack'ом и пополнят дружную армию node'ов очередного ботнета)

    • »
      »
      »
      12 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

      Если этот exploit, конечно, сможет запуститься, учитывая различия наборов библиотек различных дистрибутивов Linux-а :)

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

      • »
        »
        »
        »
        12 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится

        На вражеских сайтах сейчас всегда exploit-pack'и — огромные коллекции эксплоитов на все случаи жизни, они автоматически подбирают правльный эксплоит и ставят правильную заразу на компьютер пользователя. И линукс им не помеха.

        Javascript + HTML5 позволяют разработчику делать что угодно (кроме гадостей), спросите ivan.popelyshev, он в этом деле специалист.

        • »
          »
          »
          »
          »
          12 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится

          Помеха заключается не в Linux-е, а в правах и совместимости.

          HTML5, конечно, штука классная, чего только canvas стоит, но проблема в том, что пользователь так же может получить доступ к данным, которыми оперирует Javascript.

          • »
            »
            »
            »
            »
            »
            12 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится

            Пользователь может получить доступ к данным, которыми оперирует любая программа, отличие только в обфусцированности. А javascript тоже можно обфусцировать.

            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, # ^ |
                Проголосовать: нравится 0 Проголосовать: не нравится

              Да, согласен, но, по-моему мнению, получить доступ к данным обфусцированного кода Javascript будет несколько проще, чем, например, обычного бинарника.

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Не всегда он интегрирован с браузером, чтобы запускать апплеты (например, у меня — нет). По статистике Flash стоит значительно чаще. Да и с JDK вы маху дали, речь о JRE.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      JDK — это первое, что пришло в голову. По-честному, единственное для чего пригодилась Java-среда на ноуте — это TopCoder-ский клиент)