А как делают бабло создатели опенсорсного ClamAV? Как я понимаю, скорее всего — за деньги добавляют вирусы в список исключений никак :)
По поводу второго пункта — есть множество вариантов. Например, при инфицировании выводить дружелюбное, хорошо видимое сообщение с описанием уязвимости, через которую робингуд проник на машину, возможной ссылкой на сайт проекта, и кнопкой «I don't care, opt out» для тех, кому это всё не нужно и кому плевать, что несмотря на все меры защиты, если пролез робингуд, то пролезет и что-то похуже.
Я протестую! Написание вирусов — это этап, через который проходит любой нормальный программист на ассемблере, потому что именно написание вирусов позволяет наглядно ознакомиться со всеми тонкостями внутренней организации исполняемых файлов, с тем, как работает динамический линковщик, понять, какие есть допуски у не совсем правильных заголовков и т.д. и т.п.
Делать вирусы — хорошо и правильно. Плохо делать вирусы, которые вредят окружающим.
P.S. вспомнил, что во времена серии уязвимостей в DCOM RPC были вирусы, которые патчили эту уязвимость при заражении компьютера, чтобы вирусы конкурентов не пролезли. Почему никто не сделает антивирус, распространяющийся вирусным путем? :)
Я, скорее, к тому — как вообще в OS X посмотреть содержимое архива, не извлекая его? Насколько мне известно, стандартный Archiver.app умеет только извлекать, а смотреть внутрь архивов — нет. QuickLook-плагинов для просмотра содержимого архивов тоже нет в стандартной поставке, нужно ставить что-то типа BetterZIP. Keka тоже распаковывает без предварительного просмотра.
Есть варианты с вызовом консольных архиваторов, но это врядли вектор атаки на обычного пользователя, т.к. я сильно сомневаюсь, что процедура «посмотреть содержимое архива в консоли, затем распаковать стандартным разархиватором» — это общепринятый воркфлоу.
А почему вы не хотите привести пару-тройку из кучи фактов здесь, а не в личке? Ведь все, что нужно — это сказать, где есть несоответствие эксперимента и нынешних зашоренных теорий, и, по желанию, сделать верифицируемое предсказание в рамках другой теории. И все, больше ведь от вас никто не требует пока что совсем ничего.
Кстати, раз уж пошли делать такие предложения — кто-то уже предлагал возможность использовать любую бинарную функцию как инфиксный оператор? Т.е. чтобы x foo y было равноценно foo(x, y). Можно было бы писать всякие if (foo hasEffectOn bar) { ... }.
А там уже и до автоматического каррирования и вызова функций без скобок недалеко, надеюсь :)
Приведение переменной к числу при помощи +"123" лучше, чем используя parseFloat/parseInt тем, что parse* для строки "123foobar" вернут 123, тогда как +"123foobar" вернет NaN.
Почему минусуют человека? Все правильно сказано же — дереференс необъявленной переменной, в коде типа age !== undefined, выбьет ReferenceError: age is not defined же. typeof age !== "undefined" лишен этого недостатка.
При проверке же свойств имеет смысл проверять напрямую — foo.bar != null, потому что свойства ReferenceError не выбрасывают.
за деньги добавляют вирусы в список исключенийникак :)По поводу второго пункта — есть множество вариантов. Например, при инфицировании выводить дружелюбное, хорошо видимое сообщение с описанием уязвимости, через которую робингуд проник на машину, возможной ссылкой на сайт проекта, и кнопкой «I don't care, opt out» для тех, кому это всё не нужно и кому плевать, что несмотря на все меры защиты, если пролез робингуд, то пролезет и что-то похуже.
Делать вирусы — хорошо и правильно. Плохо делать вирусы, которые вредят окружающим.
P.S. вспомнил, что во времена серии уязвимостей в DCOM RPC были вирусы, которые патчили эту уязвимость при заражении компьютера, чтобы вирусы конкурентов не пролезли. Почему никто не сделает антивирус, распространяющийся вирусным путем? :)
Есть варианты с вызовом консольных архиваторов, но это врядли вектор атаки на обычного пользователя, т.к. я сильно сомневаюсь, что процедура «посмотреть содержимое архива в консоли, затем распаковать стандартным разархиватором» — это общепринятый воркфлоу.
Тут-то compile error и брякнется.
Ну или более ранний, но не такой распространенный (из мультика Octocat Adventures):
x foo yбыло равноценноfoo(x, y). Можно было бы писать всякиеif (foo hasEffectOn bar) { ... }.А там уже и до автоматического каррирования и вызова функций без скобок недалеко, надеюсь :)
hasOwnProperty.a >>> 0работает, как приведение числа кuint32_t:Работает лучше, чемa & 0xFFFFFFFF, из-за явной беззнаковости.+"123"лучше, чем используяparseFloat/parseIntтем, чтоparse*для строки"123foobar"вернут123, тогда как+"123foobar"вернетNaN.age !== undefined, выбьетReferenceError: age is not definedже.typeof age !== "undefined"лишен этого недостатка.При проверке же свойств имеет смысл проверять напрямую —
foo.bar != null, потому что свойстваReferenceErrorне выбрасывают.