Как стать автором
Обновить
3
0

Пользователь

Отправить сообщение

IDA Pro и техники реверс-инжиниринга

Время на прочтение 27 мин
Количество просмотров 86K

0x00 start


; {EN} entry point, do nothing, just run _main {EN}


Статья для начинающих “воинов тьмы”, тех, кто хочет погрузиться в темную сторону силы: реверс-инжиниринг. На нашем “операционном столе” будет небольшой кустарный сервер, который работает по протоколу TCP/IP. Для анализа протокола обмена данными нам поможет стандарт де-факто в области реверса — IDA Pro.


Статей по реверс-инжинирингу и по IDA Pro уже написано немало (хотя и не столько, как по PHP), но поскольку процесс реверса — исследовательский, то мысли, как с "другого боку" подойти к задаче обратной разработки, полезны новичкам. По крайней мере, как автор, я руководствовался тем, чтобы изложить основные практики и техники, о которых говорю в первые дни всем стажерам и на первых парах курса по реверс-инжинирингу в университете.


Чего не будет в статье?

Поиска уязвимостей и разработки эксплоитов для Google Chrome или Apple iPhone… Поэтому если вы исследователь со стажем и с большим количеством CVE на счету, маловероятно, что вы найдете для себя что-то новое.



"Once you start down the dark path, forever will it dominate your destiny".

Читать дальше →
Всего голосов 28: ↑27 и ↓1 +26
Комментарии 32

Zip-файлы: история, объяснение и реализация

Время на прочтение 76 мин
Количество просмотров 91K


Мне давно было интересно, как сжимаются данные, в том числе в Zip-файлах. Однажды я решил удовлетворить своё любопытство: узнать, как работает сжатие, и написать собственную Zip-программу. Реализация превратилась в захватывающее упражнение в программировании. Получаешь огромное удовольствие от создания отлаженной машины, которая берёт данные, перекладывает их биты в более эффективное представление, а затем собирает обратно. Надеюсь, вам тоже будет интересно об этом читать.

В статье очень подробно объясняется, как работают Zip-файлы и схема сжатия: LZ77-сжатие, алгоритм Хаффмана, алгоритм Deflate и прочее. Вы узнаете историю развития технологии и посмотрите довольно эффективные примеры реализации, написанные с нуля на С. Исходный код лежит тут: hwzip-1.0.zip.
Читать дальше →
Всего голосов 176: ↑175 и ↓1 +174
Комментарии 45

Ray Casting Visual Search (RCVS). Простой и быстрый алгоритм поиска схожих по геометрии 3D моделей

Время на прочтение 8 мин
Количество просмотров 4.9K


Для меня эти две модели очень похожи, однако у них нет очевидных характеристик, по которым можно было бы измерить их сходство. У этих моделей разное количество вершин, рёбер и полигонов, они разного размера, к тому же по-разному повёрнуты в пространстве, и у обеих одинаковые трансформации (Положение = [0,0,0], Вращение в радианах = [0,0,0], Масштаб = [1,1,1]). Как определить их подобие?
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 13

День смерти стандартной библиотеки

Время на прочтение 12 мин
Количество просмотров 23K
На днях в Праге комитет по стандартизации С++ провел ряд опросов по вопросу изменения ABI, и в конечном счете было решено ничего в нем не менять. Аплодисментов в зале слышно не было.
Я думаю, мы не осознавали полностью те последствия, которое повлечет за собой данное решение, и я не верю, что оно в принципе может положительно сказаться на развитии языка.


Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Комментарии 92

Программисты, давайте изучать исходники классических программ

Время на прочтение 2 мин
Количество просмотров 54K
Современные программисты — счастливчики: мы живём в мире, в котором исторические и оказавшие существенное влияние программы имеют открытый код, доступный для изучения. Однако, многие программисты только учатся, и изучают те программы, над которыми работают сами. У нас редко находится время для изучения исторических работ, и курсы программирования редко тратят время на такие вещи.

Мы полагаем, что разработчикам следует изучать исходники программ, оказавших большое влияние, подобно тому, как архитекторы изучают здания, оказавшие влияние на архитектуру (и критикуют их). Чем повторять те же ошибки снова и снова, мы должны изучить большую работу, проделанную до нас, и вынести из неё уроки.
Читать дальше →
Всего голосов 74: ↑69 и ↓5 +64
Комментарии 68

Как сократить накладные расходы при обработке исключений в С++

Время на прочтение 8 мин
Количество просмотров 5.9K


Обработка ошибок времени выполнения (runtime error) очень важна во многих ситуациях, с которыми мы сталкиваемся при разработке софта — от некорректного пользовательского ввода, до поврежденных сетевых пакетов. Приложение не должно падать, если пользователь вдруг загрузил PNG вместо PDF, или отключил сетевой кабель при обновлении ПО. Пользователь рассчитывает, что программа будет работать, чтобы ни случилось и, либо обрабатывать внештатные ситуации в фоновом режиме, либо предлагать ему выбрать вариант решения проблемы посредством сообщения, отправленного через дружественный интерфейс.

Обработка исключений может оказаться запутанной, сложной задачей, и, что принципиально важно для многих разработчиков С++, она может сильно замедлить работу приложения. Но, как и во многих других случаях, есть несколько способов решения этой проблемы. Далее мы углубимся в процесс обработки исключений на C++, разберемся с его подводными камнями и увидим, как это может повлиять на скорость работы вашего приложения. Кроме того, мы рассмотрим альтернативы, которые можно использовать, чтобы сократить накладные расходы.

В этой статье я не буду призывать вас отказаться от использования исключений полностью. Они должны применяться, но применяться именно тогда, когда этого избежать невозможно: например, как сообщить об ошибке, которая произошла внутри конструктора? Мы в основном будем рассматривать использование исключений для обработки ошибок времени выполнения. Использование тех альтернатив, о которых мы будем говорить, позволит вам разрабатывать более надежные и легко сопровождаемые приложения.
Читать дальше →
Всего голосов 19: ↑11 и ↓8 +3
Комментарии 18

Сверхсовременные иммутабельные структуры данных

Время на прочтение 22 мин
Количество просмотров 30K
Годами эксперты в С++ рассуждают о семантике значений, иммутабельности и разделении ресурсов за счет коммуникации. О новом мире без мьютексов и гонок, без паттернов Command и Observer. На деле все не так просто. Главная проблема по-прежнему в наших структурах данных.



Иммутабельные структуры данных не меняют своих значений. Чтобы что-то с ними сделать, нужно создавать новые значения. Старые же значения остаются на прежнем месте, поэтому их можно без проблем и блокировок читать из разных потоков. В итоге ресурсы можно совместно использовать более рационально и упорядоченно, ведь старые и новые значения могут использовать общие данные. Благодаря этому их куда быстрей сравнить между собой и компактно хранить историю операций с возможностью отмены. Все это отлично ложится на многопоточные и интерактивные системы: такие структуры данных упрощают архитектуру десктопных приложений и позволяют сервисам лучше масштабироваться. Иммутабельные структуры — секрет успеха Clojure и Scala, и даже сообщество JavaScript теперь пользуется их преимуществами, ведь у них есть библиотека Immutable.js, написанная в недрах компании Facebook.

Под катом — видео и перевод доклада Juan Puente с конференции C++ Russia 2019 Moscow. Хуан рассказывает про Immer — библиотеку иммутабельных структур для C++. В посте:

  • архитектурные преимущества иммутабельности;
  • создание эффективного персистентного векторного типа на основе RRB-деревьев;
  • разбор архитектуры на примере простого текстового редактора.

Всего голосов 84: ↑84 и ↓0 +84
Комментарии 57

РИТ, Максим Лапшин (Erlyvideo): как программисту вырастить компанию

Время на прочтение 22 мин
Количество просмотров 17K
РИТ++ 2017, Whale Rider. Зал «Конгресс-холл. 6 июня, 13:00. Тезисы.



В докладе я хочу рассказать о собственном опыте органического развития компании, продающей b2b серверный софт без инвестиций. Я начинал с ковыряния just for fun в том, что мне было интересно, потом был готов всё бросить (особенно после общения с несколькими менторами и бизнес-консультантами).



Максим Лапшин (далее – МЛ): – Здравствуйте, коллеги! Меня зовут Максим Лапшин. Я – владелец компании Erlyvideo. Я ею занимаюсь почти всё своё время, все 35 часов в день посвящаю своей работе.
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 17

Занимательная мнемотехника: собираем слуховую память из зрительной

Время на прочтение 11 мин
Количество просмотров 11K


Довольно часто можно слышать, как кто-нибудь говорит про себя: «У меня плохая память». И если мы немного представляем, как работает память, то на этом месте мы должны задать вопрос: «А какая именно?» Дело в том, что существует много видов памяти, и они могут работать (а также ломаться) независимо друг от друга.
Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 6

Эксперименты с нейронными сетями на данных сейсморазведки

Время на прочтение 14 мин
Количество просмотров 16K
Сложность интерпретации данных сейсмической разведки связана с тем, что к каждой задаче необходимо искать индивидуальный подход, поскольку каждый набор таких данных уникален. Ручная обработка требует значительных трудозатрат, а результат часто содержит ошибки, связанные с человеческим фактором. Использование нейронных сетей для интерпретации может существенно сократить ручной труд, но уникальность данных накладывает ограничения на автоматизацию этой работы.

Данная статья описывает эксперимент по анализу применимости нейронных сетей для автоматизации выделения геологических слоев на 2D-изображениях на примере полностью размеченных данных из акватории Северного моря.

Проведение акваториальной сейсморазведки
Рисунок 1. Проведение акваториальной сейсморазведки (источник)
Читать дальше →
Всего голосов 40: ↑40 и ↓0 +40
Комментарии 14

ChaiScript — скриптовый язык для C++

Время на прочтение 21 мин
Количество просмотров 14K
Когда возникает потребность внедрить скриптовый язык в проект на C++, первым делом большинство людей вспоминает Lua. В этой статье его не будет, я расскажу о другом, не менее удобном и легком в освоении языке под названием ChaiScript.

image
Читать дальше →
Всего голосов 29: ↑29 и ↓0 +29
Комментарии 33

Реверс-инжиниринг популярного античита BattlEye

Время на прочтение 24 мин
Количество просмотров 41K

BattlEye — это преимущетвенно немецкий сторонний античит, в основном разрабатываемый 32-летним Бастианом Хейко Сутером. Он предоставляет (или пытается предоставить) издателям игр простую в применении систему античита, использующую механизмы общей защиты, а также обнаружение читов для конкретных игр для оптимизации безопасности. Как сказано на веб-сайте продукта, он всегда остаётся на вершине современных технологий и использует инновационные методики защиты и обнаружения; очевидно, это следствие национальности разработчика: QUALITY MADE IN GERMANY. BattlEye состоит из множества элементов, совместно работающих над поиском читеров в играх, оплативших использование продукта. Четырьмя основными элементами являются:

  • BEService
    • Системная служба Windows, обменивающаяся данными с сервером BattlEye BEServer, который обеспечивает возможности клиент-серверной связи с BEDaisy и BEClient.
  • BEDaisy
    • Драйвер ядра Windows, регистрирующий превентивные механизмы обработки событий и мини-фильтры, чтобы препятствовать читерам в незаконном изменении игры
  • BEClient
    • Динамически подключаемая библиотека Windows, отвечающая за большинство векторов обнаружения, в том числе за описанные в данной статье. После инициализации она привязывается к процессу игры.
  • BEServer
    • Проприетарный бэкенд-сервер, отвечающий за сбор информации и принятие конкретных мер против читеров.

Шелл-код


Недавно в Интернете всплыл дамп шелл-кода BattlEye, и мы решили написать о том, что же конкретно ищет текущая версия BattlEye. Мы не анализировали BattlEye целых шесть месяцев, поэтому наш последний дамп шелл-кода скорее всего уже устарел. Различные части кода восстанавливали только по памяти из этого последнего дампа, предположив, что в BattlEye дополняется только шелл-код и не удаляются предыдущие процедуры обнаружения.
Читать дальше →
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 60

Полётный контроллер «Аполлона»: подробное описание всех консолей

Время на прочтение 13 мин
Количество просмотров 13K

Удобная справка по всем рабочим станциям центра управления космической программой «Аполлон»




Редакции журнала Ars Technica удалось провести довольно много времени в восстановленной комнате управления полётами миссии «Аполлон» в Космическом центре имени Линдона Джонсона в Хьюстоне, Техас. Мы побеседовали с Саем Либерготом, полётным диспетчером НАСА в отставке, принимавшим участие в нескольких из наиболее известных пилотируемых миссий, включая «Аполлон-11» и «Аполлон-13». Но в статью, где мы приводим эту беседу и другие подробности тура, просто не удалось вместить все детали и диаграммы всех различных полётных консолей.

Однако наши читатели обожают космос, и мы не могли не выпустить эту информацию. Поэтому перед вами – подробный тур от одной консоли к другой, по 2-й комнате исторического центра управления полётами Historical Mission Operations Control Room 2, или MOCR 2. MOCR 2 использовали почти для всех миссий «Джемини» и «Аполлон», а в конце 1990-х её восстановили до первоначального состояния. Её можно посетить, приехав в Хьюстон, но дальше стеклянной витрины в гостевой галерее вы всё равно не попадёте, а этого недостаточно. Поэтому пристегнитесь и приготовьтесь к подробному изучению консолей MOCR 2.
Читать дальше →
Всего голосов 28: ↑26 и ↓2 +24
Комментарии 17

Типобезопасная работа с регистрами без оверхеда на С++17: value-based метапрограммирование

Время на прочтение 10 мин
Количество просмотров 7.5K

С++, благодаря своей строгой типизации, может помочь программисту на этапе компиляции. На хабре уже довольно много статьей, описывающих как, используя типы, добиться этого, и это прекрасно. Но во всех, что я читал, есть один изъян. Сравним с++ подход и си подход с использованием CMSIS, привычный в мире программирования микроконтроллеров:


some_stream.set (Direction::to_periph)    SOME_STREAM->CR |= DMA_SxCR_DIR_0
   .inc_memory()                                          |  DMA_SxCR_MINC_Msk
   .size_memory (DataSize::word16)                        |  DMA_SxCR_MSIZE_0
   .size_periph (DataSize::word16)                        |  DMA_SxCR_PSIZE_0
   .enable_transfer_complete_interrupt();                 |  DMA_SxCR_TCIE_Msk;

Сразу видно, что с++ подход более читаем, и, поскольку каждая функция принимает конкретный тип, нельзя ошибиться. Си подход не проверяет валидность данных, это ложится на плечи программиста. Как правило, об ошибке узнают только при отладке. Но с++ подход не бесплатен. Фактически, каждая функция имеет своё обращение к регистру, в то время как на си сначала собирается маска из всех параметров на этапе компиляции, так как это всё константы, и записывается в регистр разом. Далее я расскажу, как попытался совместить типобезопасность с++ с минимизацией обращений к регистру. Вы увидите, это значительно проще, чем кажется.

Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 40

Linux Kernel Library: ядро Linux в форм-факторе so или dll

Время на прочтение 13 мин
Количество просмотров 14K

Когда-то читал статью о выборе файловых систем «чтоб везде-везде работало». В ней в очередной раз увидел жалобы, что Ext4 замечательная файловая система, но на Windows есть только кривые неточные проприетарные драйверы. Но отмотаем ленту ещё на пару лет назад: тогда на Хабре (а в те времена — Гиктаймсе) пролетала новость про LibOS — попытку превратить Linux kernel в обычную библиотеку пользовательского режима. Упор там делался на вынос сетевого стека в user space. Как-то раз я решил поглядеть, а жив ли вообще проект, и в их блоге увидел ссылку на своего рода конкурента — проект Linux Kernel Library (LKL). По сути, это порт ядра, так сказать, на аппаратную архитектуру «библиотека пользовательского режима POSIX / Win32».


Чем интересна LKL? Во-первых тем, что она живёт и здравствует, пусть и не в основной кодовой базе ядра. Во-вторых, это более-менее честная поддержка «архитектуры», автоматически делающая доступной бОльшую часть ядра. Более того, прямо в комплекте идут утилиты-примеры: cptofs/cpfromfs, fs2tar, lklfuse. В этой статье мы протестируем LKL на хостовом Linux, заглянем в файл с образом Ext4 (Btrfs, XFS...) без рута и виртуалок и коротко обсудим, как её можно попробовать на Windows.

Читать дальше →
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 5

Расширяем возможности UObject в Unreal Engine 4

Время на прочтение 15 мин
Количество просмотров 28K

Всем привет! Меня зовут Александр, я уже более 5 лет работаю с Unreal Engine, и почти все это время — с сетевыми проектами.

Поскольку сетевые проекты отличаются своими требованиями к разработке и производительности, нередко необходимо работать с более простыми объектами, такими как классы UObject, но их функциональность изначально урезана, что может создать сильные рамки. В этой статье я расскажу о том, как активировать различные функции в базовом классе UObject в Unreal Engine 4.



На самом деле, статью я написал скорее как справочник. Большую часть информации крайне сложно найти в документации или сообществе, а тут можно быстро открыть ссылку и скопировать нужный код. Решил заодно поделиться и с вами! Статья ориентирована на тех, кто уже немного знаком с UE4. Будет рассмотрен С++ код, хотя знать его не обязательно. Можете просто следовать инструкциям, если вам нужно то, о чем пойдет речь. Более того, не обязательно копировать все, вы можете вставить код из раздела с нужными свойствами и он должен работать.

Читать дальше →
Всего голосов 38: ↑36 и ↓2 +34
Комментарии 7

Домен-фронтинг на базе TLS 1.3

Время на прочтение 7 мин
Количество просмотров 18K

Введение



Современные корпоративные системы фильтрации контента, от таких именитых производителей как Cisco, BlueCoat, FireEye имеют довольно много общего с более мощными их собратьями — DPI системами, которые усиленно внедряются на национальном уровне. Суть работы и тех и других в том, чтобы производить досмотр входящего и исходящего интернет трафика и, на основании черных/белых списков, принимать решение о запрете интернет-соединения. А так как и те, и другие в основах своей работы полагаются на схожие принципы, то и способы их обхода также будут иметь много общего.

Одной из технологий, позволяющей достаточно эффективно обходить как DPI, так и корпоративные системы, является технология домен-фронтинга. Ее суть состоит в том, что мы идем на заблокированный ресурс, прикрываясь другим, публичным доменом, с хорошей репутацией, который заведомо не будет блокирован ни одной системой, например google.com.

О данной технологии было написано уже достаточно много статей и приведено много примеров. Однако популярные и обсуждаемые в последнее время технологии DNS-over-HTTPS и encrypted-SNI, а также новая версия протокола TLS 1.3 дают возможность рассмотреть еще один вариант домен-фронтинга.
Читать дальше →
Всего голосов 46: ↑44 и ↓2 +42
Комментарии 36

7 бесплатных курсов для разработчиков от Microsoft

Время на прочтение 5 мин
Количество просмотров 82K
Привет, Хабр! Сегодня мы начинаем серию статей, в которую войдет 5 подборок бесплатных обучающих курсов от компании Microsoft. В этой статье у нас самые крутые курсы для разработчиков, которые сильнее всего нравятся программистам.

Кстати!

  • Все курсы бесплатные (вы даже сможете попробовать платные продукты бесплатно);
  • 6/7 на русском языке;
  • Начать обучение можно мгновенно;
  • По окончании вы получите бейдж об успешном прохождении обучения.

Присоединяйтесь, подробности под катом!

Новая серия статей


Следующая серия статей, начало 2020 года


Эта серия статей, 2019 год


Читать дальше →
Всего голосов 35: ↑31 и ↓4 +27
Комментарии 18

MIRO — открытая платформа indoor-робота

Время на прочтение 10 мин
Количество просмотров 14K
Хочу рассказать о своей работе и нашем коллективном pet-проекте – мобильном indoor роботе на базе связки микропроцессорной платы ARDUINO (ATMEGA328 – кому как понятней), ESP8266 и Raspberry Pi. Мы с товарищами назвали его MIRO — от «Mobile Intelligent RObot».

image
Читать дальше →
Всего голосов 58: ↑57 и ↓1 +56
Комментарии 52

Ломаем Micosoft Lunix на HackQuest 2019

Время на прочтение 7 мин
Количество просмотров 16K

Привет, Хабр!

На HackQuest перед конференцией ZeroNight 2019 было одно занимательное задание. Я не сдал решение вовремя, но свою порцию острых ощущений получил. Я считаю, вам будет интересно узнать, что приготовили организаторы и команда r0.Crew для участников.

Задание: добыть код активации для секретной операционной системы Micosoft 1998.

В этой статье я расскажу, как это сделать.
Читать дальше →
Всего голосов 50: ↑50 и ↓0 +50
Комментарии 14

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность