Pull to refresh
48
0
Artemiy R @Flaker

User

Send message

«Правило ноля»

Reading time5 min
Views47K
Применительно к с++03 существует “правило трех”, с появлением с++11 оно трансформировалось в “правило 5ти”. И хотя эти правила по сути являются не более чем неформальными рекомендациями к проектированию собственных типов данных, но тем не менее часто бывают полезны. “Правило ноля” продолжает ряд этих рекомендаций. В этом посте я напомню о чем, собственно, первые 2 правила, а также попробую объяснить идею, стоящую за “правилом ноля”.
Читать дальше →
Total votes 73: ↑66 and ↓7+59
Comments24

Тренировочный раунд RCC 2014 Warmup

Reading time4 min
Views3.3K


Очередной сезон крупнейшей российской олимпиады для программистов Russian Code Cup стартовал в субботу, 19 апреля 2014 года. Впереди новые интересные и нетривиальные задания, бескомпромиссная борьба и отличные призы.

Жюри Russian Code Cup подготовило всем участникам один сюрприз: 17 апреля у каждого из них была возможность оценить свои силы. В 19:30 по московскому времени на площадке http://codeforces.ru состоялся тренировочный раунд олимпиады со свежей порцией задач от создателей RCC.

RCC 2014 Warmup — это тест, который дал возможность попробовать свои силы и понять, к чему готовиться в раундах чемпионата. А для «бывалых» участников он оказался идеальной возможностью потренироваться и разогреться перед первыми сражениями RCC 2014.

Причем если на Russian Code Cup задачи для участников предлагаются только на русском языке, то на Warmup Round задачи были как на русском, так и на английском языке, что существенно расширило географию проведения. Всего на раунд зарегистрировалось 3265 участников.

Условия задач были самыми разными: нужно было помочь с отбором участников на финал Russian Code Cup 2214 года, восстановить данные тестирующей системы после падения, провести футбольный турнир среди участников Russian Code Cup, помочь хитрому мальчику Гене получить футболку, решить интересное задание мальчика Миши во время путешествия на кораблике после финала Russian Code Cup, организовать финал Russian Code Cup 2214 года в большом числе гостиниц и добыть пароль для доступа к задачам во время их разработки (последнее так никому и не удалось).
Читать дальше →
Total votes 38: ↑29 and ↓9+20
Comments0

Чат-бот приложения через skype, jabber и whatsapp

Reading time15 min
Views93K
Привет!
Хотелось бы рассказать вам историю создания одного незамысловатого развлекательного сервиса чат ботов.

Вступление

О себе: Хабр читаю давно (лет этак 5), а вот зарегистрировался месяц назад, так как очень хотелось поделиться. Работаю в IT компании инженером по тестированию. Но меня всегда тянуло к разработке. И лет 7 назад занялся freelance параллельно основной работе. Начинал, как и все с малого, разбирался при помощи google. Писал всякие web непотребства. Все это ради достижения неких финансовых целей. Да и вообще вся жизнь состояла из цикла: поиск цели – достижение любыми средствами – удовлетворение – поиск новой цели. Так было и с freelance.

Переломный момент

Шла зима 2012/2013 года. Работал я на freelance над проектом онлайн-консультанта, и мне надо было сделать интеграцию с jabber и skype, то есть чтобы операторы могли работать с клиентом печатая в свой im клиент, а пользователь сайта получал это все на web. После поиска в google, оказалось, что с jabber все просто, любой xmpp сервер на выбор (я выбрал ejabbered) и библиотечка для работы с ним JAXL (взял на github), тогда еще версии 2.х. А вот со Skype были проблемы: на сайте в разделе Developers предлагался какой-то kit за деньги (и лицензия, запрещающая серверное использование), с ненужными мне активациями и с упоминанием про какой-то api. А хотелось чего-то более простого. И тут я наткнулся на этот api в «Доступ к Skype API используя PHP на *nix системах», сейчас на сайте skype упоминания о работе с api отсутствуют уже, хотя тогда было, и скачал pdf по работе с ним через dbus. Там было все то, что я искал.
Подробности
Total votes 27: ↑24 and ↓3+21
Comments8

Кодирование бинарных данных в строку с алфавитом произвольной длины (BaseN)

Reading time5 min
Views19K
Всем хорошо известен алгоритм преобразования массива байт в строку base64. Существует большое количество разновидностей данного алгоритма с различными алфавитами, с хвостовыми символами и без. Есть модификации алгоритма, в котором длина алфавита равна другим степеням двойки, например 32, 16. Однако существуют и более интересные модификации, в которых длина алфавита не кратна степени двойки, такими являются алгоритмы base85, base91. Однако мне не попадался алгоритм, в котором алфавит мог бы быть произвольным, в том числе большей длины, чем 256. Задача показалась мне интересной, и я решил ее реализовать.

Сразу выкладываю ссылку на исходники и демо на js. Хотя и разработанный алгоритм имеет скорее теоретическое значение, я посчитал нужным описать детали его реализации. Практически его можно использовать, например, для случаев, когда меньшая длина строки актуальней, чем ее размер в байтах (например, в квайнах).
Детали реализации
Total votes 30: ↑23 and ↓7+16
Comments18

Семь самых интересных задач RCC за все годы по мнению Андрея Станкевича

Reading time14 min
Views12K
В преддверии первого квалификационного раунда Russian Code Cup, который состоится 19 апреля, мы решили рассказать вам о семи самых интересных задач RCC за всю историю чемпионата по мнению Андрея Станкевича — доцента кафедры компьютерных технологий ИТМО, лауреата Премии Президента Российской Федерации в области образования, лауреата премии ACM-ICPC Founder’s Award, лауреата специальной премии корпорации IBM за успехи в тренерской работе.

Напоминаем, для того чтобы принять участие в Russian Code Cup, нужно зарегистрироваться на сайте http://russiancodecup.ru/ (регистрация будет открыта до начала третьего квалификационного раунда).


Читать дальше →
Total votes 55: ↑50 and ↓5+45
Comments1

Скелетная анимация в первый раз

Reading time5 min
Views28K

Введение


Доброго времени суток. Я пишу статью тут впервые, и цель моя очень проста, я хочу поделиться своим видением скелетной анимации и имею огромное желание получить критику и помошь. Все создание этой системы было путём проб и ошибок, я не нашёл никаких книг о том как это делать, что это вообще из себя представляет и как пользоваться. Но сейчас я зашёл в тупик, выход из которого хотелось бы найти именно тут.
Читать дальше →
Total votes 22: ↑16 and ↓6+10
Comments9

Обзор специализированных способов обхода блокировок в интернете

Reading time4 min
Views918K
Представляю вашему вниманию обзор и мои субъективные оценки некоторых специализированных способов обхода блокировок со стороны провайдеров или сетевых администраторов.

1. Аддоны для браузеров


ZenMate (Chromium-based, Firefox, Android, iOS)

  • Удобство использования: 5/5
  • Скорость: 5/5
  • Шифрование трафика: Да (TLS)
  • Анонимность: Да
  • Проксирование всего трафика: Да
  • Выборочное проксирование: Да

    Описание:
        Хороший, быстрый аддон.
        На момент тестирования было доступно 5 прокси в разных странах.

    Плюсы:
        Высокая скорость работы аддона
        Быстрые прокси

    Минусы:
        Требуется регистрация в сервисе
Читать дальше →
Total votes 123: ↑106 and ↓17+89
Comments115

Обнаружена уязвимость функционала «remember me» в Laravel

Reading time2 min
Views17K

Некоторое время назад был опубликован пост с подробным описанием уязвимости функционала «remember me» в фреймворке Laravel. Она позволяла имперсонировать любого пользователя путем создания поддельного кука логина. Разработчики тогда сказали что дыру закрыли. Но более подробный взгляд показывает что гидре отрубали лишь одну голову. Даже если вы не используете данный фреймворк вам все равно будет полезно узнать как не надо имплементировать такой функционал у себя на сайте.

Читать дальше →
Total votes 57: ↑53 and ↓4+49
Comments20

Аппроксимация кривой в траекторию стрелы для игры St.Val

Reading time6 min
Views14K
В этом посте я расскажу, как создать в мобильном приложении управление c помощью рисования траектории. Такое управление используется в Harbor Master и FlightControl: игрок пальцем рисует линию, по которой движутся корабли и самолеты. Для моей игры St.Val потребовалась аналогичная механика. Как я её делал и с чем пришлось столкнуться — читайте ниже.



Пара слов об игре. В St.Val основная цель соединять сердца по цвету с помощью стрел. Задача игрока: построить траекторию полета стрелы так, чтобы она соединяла сердца в полете. Игра создавалась на базе Cocos2D 2.1 под iOS, ниже видео игровой механики.



Основные задачи


Для создания управления нужно решить три задачи:
  1. Считать координаты
  2. Сгладить и аппроксимировать их
  3. Запустить по ним стрелу


Плюс отдельно я опишу алгоритм обнаружения петель в траекториях, который мне понадобился для расширения механики игры.

Под катом решение этих задач и ссылка на демонстрационный проект.

Читать дальше →
Total votes 26: ↑21 and ↓5+16
Comments3

Анализ приложения защищенного виртуальной машиной

Reading time52 min
Views44K
В данной статье будет рассмотрено построение защиты приложения с использованием различных программных «трюков» таких как: сброс точки входа в ноль, шифрование тела файла и декриптор накрытый мусорным полиморфом, сокрытие логики исполнения алгоритма приложения в теле виртуальной машины.

К сожалению, статья будет достаточно тяжелая для обычного прикладного программиста, не интересующегося тематикой защиты ПО, но тут уж ничего не поделать.

Для более или менее адекватного восприятия статьи потребуется минимальные знания ассемблера (его будет много) а так-же навыков работы с отладчиком.

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

Основные цели, которые я ставил перед собой, это дать общее понятие как вообще работает такая защита ПО, но самое главное — как к этому будет подходить человек, который будет снимать вашу защиту, ибо есть старое правило — нельзя реализовать грамотный алгоритм ядра защиты, не представляя себе методы его анализа и взлома.

В качестве реципиента, по совету одного достаточно компетентного товарища, я выбрал немножко старый (но не потерявший актуальности, в силу качества исполнения) keygenme от небезызвестного Ms-Rem.

Вот первоначальная ссылка, где он появился: http://exelab.ru/f/index.php?action=vthread&forum=1&topic=4732
А потом он попал вот сюда: http://www.crackmes.de/users/ms_rem/keygenme_by_ms_rem/
Где данному keygenme был выставлена сложность 8 из 10 (*VERY VERY* hard).
Хотя, если честно, это слегка завышенная оценка — я бы поставил в районе 5-6 баллов.

Пожалуй, начнем.
Читать дальше →
Total votes 154: ↑151 and ↓3+148
Comments75

Вирус Sality модифицирует DNS-сервис роутеров

Reading time10 min
Views35K
Семейство файловых инфекторов Win32/Sality известно уже давно и использует ботнет на основе P2P еще с 2003 г. Sality может выступать как в роли вируса, так и даунлоадера других вредоносных программ, которые используются для рассылки спама, организации DDoS, генерации рекламного трафика или взлома VoIP аккаунтов. Команды и файлы, передаваемые через сеть Sality, зашифрованы с использованием RSA (т. н. цифровая подпись). Модульная архитектура вредоносной программы, а также долговечность ботнета показывает насколько хорошо злоумышленники подошли к созданию этого вредоносного кода.



Мы отслеживали ботнет Win32/Sality в течение долгого времени и наблюдали более 115 000 доступных IP-адресов, которые инструктировались «супер-узлами» (super peers) для поддержки ботнета в рабочем состоянии и их координации. Мы видели схожие компоненты Sality, которые он загружал на зараженные компьютеры. Некоторые из них были похожи и различались только поведением. Однако, в последнее время, мы обнаружили новый компонент с ранее незамеченными свойствами. В отличие от уже известных компонентов Sality, которые используются для кражи паролей от FTP-аккаунтов и рассылки спама, он имеет возможность подменять адрес основного DNS-сервера роутера (DNS hijacking). Согласно нашим данным телеметрии, этот компонент появился в конце октября 2013 г. Он получил название Win32/Rbrute.

Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments7

Расследование об информационной безопасности в Яндексе. Rdomn – скрытая угроза

Reading time5 min
Views42K
В этом посте мы хотим рассказать об одном из сложных случаев заражения пользователей, который нам довелось расследовать и в котором были использованы многие из популярных техник.

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



В наши дни чаще всего заражению подвергается веб-сервер: устанавливаются вредоносные модули, внедряются вредоносные shared objects, либо же исполняемый файл перекомпилируется с вредоносной функциональностью. Для внедрения вредоносного JavaScript активно используется, например, Flash.
Читать дальше →
Total votes 109: ↑108 and ↓1+107
Comments33

Динамические деревья

Reading time8 min
Views36K
Перед прочтением статьи рекомендую посмотреть посты про splay-деревья (1) и деревья по неявному ключу (2, 3, 4)

Динамические деревья (link/cut trees) мало освещены в русскоязычном интернете. Я нашел только краткое описание на алголисте. Тем не менее эта структура данных очень интересна. Она находится на стыке двух областей: потоки и динамические графы.

В первом случае динамические деревья позволяют построить эффективные алгоритмы для задачи о поиске максимального потока. Улучшенные алгоритмы Диница и проталкивания предпотока работают за и соответственно. Если вы не знаете, что такое поток, и на лекциях у вас такого не было, спешите пополнить свои знания в Кормене.

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

Перед тем, как нырнуть под кат, попробуйте решить следующую задачу. Дан взвешенный граф в виде последовательности ребер. По последовательности можно пройти только один раз. Требуется посчитать минимальное покрывающее дерево, используя памяти и времени. По прочтении статьи вы поймете, как легко и просто можно решить эту задачу, используя динамические деревья.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments5

Поднимаем VPN-туннель из мира домой в обход NAT

Reading time2 min
Views141K
.

Хочу рассказать вам про то как имея в интернете свой VPS-сервер можно поднять туннель в домашнюю сеть. И не платить при этом за статический IP провайдеру, и даже находясь за NAT, все равно сделать доступными в интернете свои домашние сервисы.
Читать дальше →
Total votes 44: ↑31 and ↓13+18
Comments27

Поиск часто встречающихся элементов в массиве

Reading time5 min
Views119K
Задача: в массиве длиной N найти элемент, который повторяется больше N/2 раз.

Казалось бы, чего тут думать? Возьмём Dictionary<значение элемента, число появлений>, за один проход по массиву сосчитаем появления каждого элемента, потом выберем из словаря искомый элемент. Решение за O(N), куда может быть ещё быстрее?

Есть один нюанс: для словаря нам потребуется O(N) дополнительной памяти — в несколько раз больше размера исходного массива, и это при реализации словаря хоть хэш-таблицей, хоть деревом. Что будем делать, если наша цель — обработка сигнала неким устройством с маленькой памятью? Массив — замеры уровня сигнала, из которых один — «настоящий» передаваемый уровень, а остальные — шум и помехи. Неужели придётся для определения «настоящего» уровня возиться с хэш-таблицами и деревьями?

К счастью, нет: достаточно O(1) дополнительной памяти, и по-прежнему одного прохода по массиву.
Читать дальше →
Total votes 105: ↑98 and ↓7+91
Comments38

Паттерны для новичков: MVC vs MVP vs MVVM

Reading time6 min
Views792K
Добрый день, уважаемые коллеги. В этой статье я бы хотел рассказать о своем аналитическом понимании различий паттернов MVC, MVP и MVVM. Написать эту статью меня побудило желание разобраться в современных подходах при разработке крупного программного обеспечения и соответствующих архитектурных особенностях. На текущем этапе своей карьерной лестницы я не являюсь непосредственным разработчиком, поэтому статья может содержать ошибки, неточности и недопонимание. Заинтригованы, как аналитики видят, что делают программисты и архитекторы? Тогда добро пожаловать под кат.
Читать дальше →
Total votes 45: ↑40 and ↓5+35
Comments36

Продвинутые методы неявного вызова php кода, использующиеся во вредоносных скриптах

Reading time4 min
Views22K
Логичным продолжением заметки про неявные вызовы php кода во вредоносных скриптах будет ее вторая часть, в которой я рассмотрю более сложные и менее очевидные варианты использования различных обработчиков и загрузчиков php, а в конце статьи приведу несколько примеров, как еще хакеры неявно вызывают вредоносный код и php скрипты на сайте.

В качестве примера вредоносного кода снова будем использовать вызов

echo 'Test'


Поскольку цель статьи показать различные подходы и механизмы скрытого выполнения кода, то для простоты функция, которая выполняет наш «вредоносный код» будет объявлена рядом с вызываемым ее неявно кодом. В реальной жизни вредоносный код и его вызов находятся далеко друг от друга, как минимум в разных php скриптах, но чаще код подгружается из базы данных, мета-данных изображений, с другого сервера, после чего выполняется функцией eval, assert, preg_replace и им подобными.

Читать дальше →
Total votes 59: ↑50 and ↓9+41
Comments11

Мониторинг событий информационной безопасности с помощью ZABBIX

Reading time9 min
Views170K
image

Некоторое время поработав с Zabbix, я подумал, почему бы не попробовать использовать его в качестве решения для мониторинга событий информационной безопасности. Как известно, в ИТ инфраструктуре предприятия множество самых разных систем, генерирующих такой поток событий информационной безопасности, что просмотреть их все просто невозможно. Сейчас в нашей корпоративной системе мониторинга сотни сервисов, которые мы наблюдаем с большой степенью детализации. В данной статье, я рассматриваю особенности использования Zabbix в качестве решения по мониторингу событий ИБ.
Читать дальше →
Total votes 47: ↑40 and ↓7+33
Comments29

Сломай меня полностью (ZeroNightsCrackme, Часть 2)

Reading time11 min
Views14K
И снова всем привет! В прошлый раз я раскрыл решение ZeroNightsCrackMe. Все кто успел его вовремя решить, мог получить приглашение на экскурсию в один из офисов Лаборатории Касперского, а так же подарок, в виде лицензионного ключа на три устройства. Но, помимо всего прочего, в Касперском сообщили, что крякми был облегченным, т.е. существует более сложная его версия и она будет разослана тем, кто пожелает её посмотреть (но без подарков, в своё удовольствие, так сказать). Конечно же я не мог отказать себе в том, чтобы не покрутить эту версию, поэтому подтвердил свое желание на участие.

17 февраля пришло письмо с новым крякми. Именно о его решении (и не только) я и поведаю в этой статье.
Читать дальше →
Total votes 49: ↑46 and ↓3+43
Comments2

Шаблоны проектирования PHP. Часть 1. Порождающие

Reading time13 min
Views233K
Тема заезженная до дыр, не спорю… Вероятно, для опытных разработчиков моя статья будет мало, чем полезна. Я бы рекомендовал её к прочтению тем, кто только начал осознавать, что его коду чего-то не хватает, и что он созрел для вникания в это далёкое понятие – «паттерны». По себе помню, что довольно долгое время я путался в шаблонах, иногда даже не понимая, чем один отличается от другого. Именно этот факт стал основой для моей статьи. Примеры в ней не будут реальными. Они будут абстрактными и максимально простыми. Однако я постараюсь все примеры держать в едином контексте, чтобы можно было наглядно видеть отличия их использования в одной и той же ситуации. Я не буду нагружать классы лишним функционалом, чтобы можно было понять, какая именно часть кода имеет непосредственное отношение к шаблону. Главными героями примеров станут Factory (фабрика) и Product (продукт, производимый этой фабрикой). Возьмём это отношение за отправную точку. Возможно, в некоторых примерах это будет не очень уместно, но зато очень наглядно…

Статья будет разбита на несколько частей. В каждой я буду рассказывать о новом типе шаблонов проектирования. Всем, кого эта тема может заинтересовать, прошу под кат.
Меня заинтересовала...
Total votes 61: ↑43 and ↓18+25
Comments83

Information

Rating
Does not participate
Works in
Date of birth
Registered
Activity