Пишем свою операционку для Arduino. Шаг 3 — переключаем контексты

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

context switch

Читать далее «Пишем свою операционку для Arduino. Шаг 3 — переключаем контексты»

Пишем свою операционку для Arduino. Шаг 2 — односвязный список

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

А сегодня мы будем писать на C++ односвязный список. Так как наша операционная система для AVR будет работать в крайне ограниченных по ресурсам условиях, мы будем стараться сэкономить как можно больше места и сделать код быстрее. Без какой-либо структуры данных для хранения списка запущенных (а позднее и приостановленных) задач не обойтись. Односвязный список займет мало программной памяти, потребует очень мало оперативной памяти и в целом хорошо подойдет для наших нужд. Он предельно прост, но при этом мы постараемся максимально его оптимизировать.

forward list

Читать далее «Пишем свою операционку для Arduino. Шаг 2 — односвязный список»

Пишем свою операционку для Arduino. Шаг 1 — настраиваем таймер

Люблю я на досуге поиграться с 8-битными AVR-микроконтроллерами. Почему? Потому что они просты в использовании и программировании, у них весьма очевидное внутреннее устройство, но при всем этом они позволяют быстро, дешево и без sms запиливать достаточно нетривиальные проекты. Arduino (и всевозможные дешевые китайские клоны, разумеется) - вообще достаточно популярная железка (и среда разработки) среди погромистов и инженеров. Имея на руках пару breadboard'ов и клубок проводов для них, с Arduino вы сможете без пайки собрать макет какого-нибудь проекта и закодить его, практически не напрягаясь.

Но я сюда пишу не для того, чтобы поднять продажи китайцам, а чтобы заняться настоящей хардкорной разработкой под AVR. Сегодня мы с вами начнем писать настоящую операционную систему с вытесняющей многозадачностью, которую потом запустим на обычных железяках Arduino! Но это еще не все, ведь мы будем писать эту ОСь на C C++14, сдабривая все это щедрым количеством ассемблерных вставок и макросов. Вот это будет пламенная смесь! А назовем мы нашу операционную систему пафосно - Atmos!

Перед тем, как начать, я должен сказать, что подобные ОС достаточно профессионального уровня и с длительной поддержкой уже существуют. Это, например, кросс-платформенная богатая на фичи и толстая FreeRTOS, или компактная (но не очень удобная) Femto OS. Вы, конечно, можете открыть их исходные коды и постараться разобраться, в чем я вам желаю удачи. Но я в этом цикле статей поясню базовые принципы, которые стоят за созданием такой операционки для AVR и буду писать ее по шагам, разжевывая подробно каждый этап. Если вы готовы вместе со мной окунуться в раскаленные пучины кода, то вперед!

Читать далее «Пишем свою операционку для Arduino. Шаг 1 — настраиваем таймер»

Пентест для начинающих: Разведка

Некоторое время назад, хорошенько поиграв во всевозможные CTF, я решил податься в пентест, а это значит то, что теперь я буду писать тематические статьи-заметки на избитые темы из этой области. И начну, пожалуй, с OSINT в применении к веб-ресурсам. А точнее, речь пойдет о том, как и откуда взять информацию, если в некотором bug bounty или заказе на тестирование цель описана как:

В принципе, эта информация в том или ином виде изложена в многочисленных методологиях, так что вы вряд ли узнаете что-то новое, если проводили пентесты сколько-нибудь продолжительное время.
Читать далее «Пентест для начинающих: Разведка»

Изучаем ETW и извлекаем профиты

Давненько у нас в бложеке не появлялось новых статей! Что ж, ETW, настало твое время!

Возможно, кто-то из вас и раньше сталкивался с этим сокращением - ETW. Что же это такое? Расшифровывается эта аббревиатура как Event Tracing for Windows. ETW - это системный компонент ОС Windows, который используется для диагностики, отладки и исследования производительности тех или иных частей ОС, а также приложений. Появился он где-то с Windows 2000, но полноценно его использовать стало возможным примерно с Windows Vista.

- А мне какое до этого дело? - спросите вы. А вот какое: в Windows несколько сотен (в Win10 - около тысячи) провайдеров событий, которые жаждут вам что-нибудь рассказать о своей работе, нужно лишь подписаться! Вот, например, как можно штатными средствами Windows посмотреть, что Internet Explorer отсылает по HTTP. А вот эти ребята сумели с помощью ETW поснифать, что пользователь набирает на своей USB-клавиатуре. И это все - безо всяких хуков, инжектов и драйверов! ETW просто пронизывает Windows, его использует и Event Viewer, и такие утилиты, как xPerf, и Visual Studio во время отладки приложения, чтобы отображать вам статистику потребляемой памяти и процессорного времени, и даже штатный Resource Monitor, который вы можете открыть из таскменеджера!

Уже интересно?

Читать далее «Изучаем ETW и извлекаем профиты»

Модифицируем стаб SFX WinRAR

winrar
Речь пойдет о тривиальной модификации стаба самораспаковывающегося архива WinRAR, которая состоит в следующем: сделать, чтобы SFX-архив при обычном запуске просто извлекал свое содержимое, а при попытке открытия с помощью WinRAR - запрашивал ввод пароля. Зачем это? Да так, увидел тему на форуме и решил попробовать.
Стаб SFX-архива - это обычный исполняемый файл, оверлей которого содержит полезную нагрузку, сформированную пользователем: файлы, которые необходимо распаковать, и настройки, задаваемые при создании архива. Эта основа находится в директории, куда был установлен WinRAR, и называется Default.SFX.
Читать далее «Модифицируем стаб SFX WinRAR»

Пишем простой скрипт на Python

Здарова, щеглы, сегодня мы своими руками будем писать скрипт на Python. Нам понадобятся: интерпретатор Python 3 под "какая-там-у-вас-ОС", текстовый редактор с подсветкой синтаксиса, например, Sublime Text, Google, упаковка прамирацетама, бутылка минеральной воды и 60 минут свободного времени.
Перед тем как писать скрипт, мы должны определиться, что он вообще будет делать. Делать он будет следующее: получив на вход домен и диапазон IP-адресов, многопоточно проходить список этих адресов, совершать HTTP-запрос к каждому, в попытках понять, на каком же из них размещен искомый домен. Зачем это нужно? Бывают ситуации, когда IP-адрес домена закрыт Cloudflare, или Stormwall, или Incapsula, или еще чем-нибудь, WHOIS история не выдает ничего интересного, в DNS-записях такая же канитель, а, внезапно, один из поддоменов ресолвится в адрес из некоторой подсети, которая не принадлежит сервису защиты. И в этот момент нам становится интересно, вдруг и основной домен размещен в той же самой подсети.
Читать далее «Пишем простой скрипт на Python»

Решаем простой CrackMe с помощью angr

Не так давно мне попался на глаза занимательный Python-фреймворк под названием angr. Он предназначен для анализа всевозможных исполняемых файлов под различные платформы. И, несмотря на незнание мной Python'а и нелюбовь к паскаледобному синтаксису, я все же решил потратить некоторое время на его изучение, так как на одном CTF'е увидел занятный вариант решения задания по реверс-инжинирингу с его использованием.
Перейду сразу к сути: с помощью него можно, например, закейгенить произвольный CrackMe почти не занимаясь разбором алгоритма проверки ключа (конечно, речь не идет о ситуациях, когда для генерации ключа используются лучшие практики ассиметричной криптографии и прочие штуки).
Читать далее «Решаем простой CrackMe с помощью angr»

Подделываем результаты конкурсов в ВКонтакте

dice

Во многих социальных сетях, в том числе в ВКонтакте, с некоторых пор стало проводиться множество конкурсов с ценными призами. Речь пойдет о подделке результатов с точки зрения организатора, а конкурсы - те, в которых победитель определяется случайным образом из списка участников.
Итак, существует множество сервисов, которые помогают в проведении сферического конкурса, а доказательством зачастую является записанное видео или прямой эфир, в процессе которого происходит выбор победителя. Давайте рассмотрим, как можно организовать тривиальную подмену результатов, ничем себя не выдав. В качестве примера я рассмотрю вариант с использованием random.org (тот случай, когда организатор генерирует последовательно несколько случайных чисел, чтобы определить страницу и порядковый номер участника на странице), а также вариант с использованием Random.app.
Читать далее «Подделываем результаты конкурсов в ВКонтакте»

Снимаем пароль с тестов MyTestXPro

Год назад в своей старой статье я рассматривал процесс открытия защищенных паролем тестов MyTestX, а также процесс получения .mtf-файлов из .exe-файлов автономных тестов.
Прогресс не стоит на месте, и в последнее время все чаще встречаются просьбы открытия запароленных .mtx-файлов и их извлечения. Для справки: .mtf-файлы создаются в программе MyTestX (последняя версия 10.2.0.3 от 31.08.2012), .mtx-файлы создаются в программе MyTestXPro (последняя версия 11.0.0.37 от 30.08.2015), то есть MyTestX давно не обновляется, а MyTestXPro является платной программой и имеет свой, отличный от бесплатной версии, формат файлов. Таким образом, процесс, который я описывал в своей старой статье, не подходит для MyTestXPro. Давайте разберемся, что с этим делать.
Читать далее «Снимаем пароль с тестов MyTestXPro»