Уже второе соревнование подряд вместо чужого кода при попытке взлома показывает что-то такое:
Невозможно увидеть ни 1го символа. В других браузерах (Опера, ИЕ) всё работает нормально. Кто сталкивался с таким багом? Как бороться?
Версия Chrome 25.0.1364.97 m Версия Shockwave Flash 11.2 r202
PS. Т.к. взломы возможны только на реал-тайм контестах, проверить, работает или нет то или иное решение бага, будет затруднительно.
UPD. Похоже проблема решается просто установкой новой версии Flash, на взломах проверю на следующих контестах.
То что показывается после контеста видно нормально, во время тоже самое что у автора.
В версии 24.0.1312.57 m вроде как всё отображается хорошо.
Нормально взламывал с хрома 25.0.1364.97 (но не с винды, btw)
А здесь написано, что последняя версия Flash для Chrome на Windows — 11.6.602.171.
Кстати, их страничка Version Information показывается с тем же багом.
Может, http://forums.adobe.com/thread/891337 поможет?
Ну галочка, которую они предлагают снять не снимается из-за того же лага.
Да, но, это, кстати, неплохой метод проверки. Проблема всё-таки решилась новой версией flash-плеера, аппаратное ускорение сейчас отключено. В 11.2 отключение аппаратного ускорения не помогало.
UPD. Аппаратное ускорение не влияет вовсе, проблема решилась просто новой версией flash. На взломах пока не проверено, но на Find Flash Player Version page стало работать.
В очередной раз озвучу фичреквест разработчикам codeforces: сделайте пожалуйста взломы на javascript; держать на компе эту ересь (флеш) приходится только ради контестов codeforces. Давно хочется снести это бажное решето.
В догонку, сделайте, пожалуйста подсветку синтаксиса при взломах.
А как на javascript надежно сделать защиту от копирования текста? Не уверен, что это возможно. Подгружать картиночки не предлагать — это существенный трафик или низкое качество.
Можно наложить поверх текста прозрачное что-то. Тогда, возможно, в каких-то браузерах нельзя будет выделить.
Ну уберу я в firebug-е твое прозрачное. Это не поможет.
Можно рендерить на canvas, тогда защита будет не менее надёжная чем сейчас.
Строчка будет доступна в JS'е?
Да, plaintext будет доступен в момент вывода на canvas, видимо довольно просто его куда-нибудь перенаправить.
А в текущей версии можно воспользоваться FineReader'ом. Или WireShark'ом (наверное). Первое вполне сопоставимо по сложности с "вычленить значение переменной в момент вывода на canvas", если не проще.
Часто код не помещается в окно, поэтому просто так распознать FineReader-ом не получится. WireShark не поможет, исходный код plaintext-ом не передается.
В случае с javascript порог вхождения для чита поменьше, чем когда в браузере запускается actionscript bytecode. Вариант с javascript будет значительно упрощать лазейку для FineReader (например, можно расширить окно на весь экран и уже потом кэпчирить картинку).
Вариант с FineReader и сейчас не проблема. Если кому-то так сильно хочется считерить, что не лень геморроиться с FineReader'ом, то он без проблем справится со скроллингом текста (ну или поreverse-engineer'ит формат, в котором текст по сети передаётся).
Имхо, защиты от простой копипасты достаточно (тем более, что сейчас по сути только она и есть).
А сейчас как будто строчка недоступна? Она точно так же передаётся текстом по сети. То, что исходники флешового просмотрщика недоступны (и из-за этого не сразу понятно, как строка закодирована), — это типичный случай security through obscurity (если очень хочется — можно javascript через обфускатор прогнать, будет тот же эффект).
А что если кодировать двухцветную картинку с помощью RLE? Качество будет нормальное, а весить она будет совсем мало.
UPD. Да, я понимаю, OCR в таком случае разруливает.
Не знаю как RLE, но скриншоты переведенные в чб и сохраненные как gif/png/jpg весят довольно много. И распознать значительно проще получается.
Можно разбить текст на маленькие кусочки. Кусочки перемешать. Позиционировать как надо в JavaScript через CSS-свойства.
Да, можно. Плюс к этому можно использовать кастомный 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.
Уже пару раз были случаи, когда устаревшая версия Flash мешает участнику делать взломы. Понятно, конечно, что виноват не Codeforces. Но, может, было бы неплохо ненавязчиво предупреждать таких участников о том, что надо бы обновить Flash?
Вроде, все проблемы были не из-за устаревших версий Flash-а. Для просмотра взлома достаточно очень древнего плеера, образца двух-трех (а может и больше) летней давности.
А обязательно ли использовать Flash, не может ли ту же работу проделать Java-апплет? Ведь у пользователя JDK какой-нибудь да стоит.
Java-декомпиляторы делают свое дело. Учитывая мизерный размер апплета, никакой обфускатор тут не поможет.
Не надо Java-апплет, это почти такой же адец, как и флеш. Есть же стек технологий для разработки веб-приложений, зачем использовать всякие дырявые костыли.
(я посмотрю на любителей держать в браузере включенные флеш/джаву/сильверлайт/акробат ридер/другие плагины, после того, как они разок сходят на сайт с exploit-pack'ом и пополнят дружную армию node'ов очередного ботнета)
Если этот exploit, конечно, сможет запуститься, учитывая различия наборов библиотек различных дистрибутивов Linux-а :)
Но всё таки среди современных технологий мало тех, которые обеспечивают относительно ограниченный доступ пользователю к своему устройству и одновременно расширенный доступ разработчику.
На вражеских сайтах сейчас всегда exploit-pack'и — огромные коллекции эксплоитов на все случаи жизни, они автоматически подбирают правльный эксплоит и ставят правильную заразу на компьютер пользователя. И линукс им не помеха.
Javascript + HTML5 позволяют разработчику делать что угодно (кроме гадостей), спросите ivan.popelyshev, он в этом деле специалист.
Помеха заключается не в Linux-е, а в правах и совместимости.
HTML5, конечно, штука классная, чего только canvas стоит, но проблема в том, что пользователь так же может получить доступ к данным, которыми оперирует Javascript.
Пользователь может получить доступ к данным, которыми оперирует любая программа, отличие только в обфусцированности. А javascript тоже можно обфусцировать.
Да, согласен, но, по-моему мнению, получить доступ к данным обфусцированного кода Javascript будет несколько проще, чем, например, обычного бинарника.
Не всегда он интегрирован с браузером, чтобы запускать апплеты (например, у меня — нет). По статистике Flash стоит значительно чаще. Да и с JDK вы маху дали, речь о JRE.
JDK — это первое, что пришло в голову. По-честному, единственное для чего пригодилась Java-среда на ноуте — это TopCoder-ский клиент)