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

Сегодня мы продолжаем делать нащу операционку для AVR и, в частности, Arduino. В предыдущих частях мы уже реализовали полноценное переключение контекстов процессов и добились многозадачного выполнения нескольких процессов. Теперь пора добавить поддержку таких системных вызовов, как sleep и yield. Первый будет предоставлять процессу возможность приостановить выполнение на конкретный промежуток времени, не занимая при этом процессорные ресурсы, а второй - просто передавать выполнение следующему по очереди процессу. Кроме того, мы внесем некоторые усовершенствования в само ядро нашей операционной системы atmos.

atmos sleep

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

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

Сегодня настанет момент истины: мы напишем первое ядро нашей операционной системы atmos и запустим на нем простую многозадачную программу на Arduino!

coding in cpp

Вот это будет простыня, ребята...

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

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

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

context switch

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

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

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

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

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

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

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

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

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

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

Снимаем пароль с тестов 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»

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

Время от времени сталкиваюсь с просьбами, касающимися программ для проведения компьютерного тестирования (MyTestX и easyQuizzy), которые заключаются либо в извлечении файла теста из .exe-файла (в случае с MyTestX), либо в открытии защищенного паролем теста.
Набросал "деревянный" последовательный мануал для тех, кому необходимо самостоятельно извлечь тест или сделать, чтобы редактор позволял открыть тест при вводе любого пароля.

Нам понадобится отладчик, например, OllyDbg и программа для упрощенной работы со структурой PE-файла, например, CFF Explorer, также нам понадобится редактор тестов (элементарно ищется в Google), который мы будем "исправлять", и файл, содержащий тест, который необходимо открыть.
Читать далее «Снимаем пароль с тестов MyTestX и easyQuizzy»

Пишем тривиальный стилер биткоинов

bitcoin
Давным-давно для WebMoney (и не только) был популярен крайне простой способ получить чужие финансы: подменить содержимое буфера обмена Windows, если в нём находится номер кошелька на свой номер. С введением множества степеней защит данный метод перестали использовать, да и эффективность была под вопросом, не говоря уже о необходимости заставить пользователя запустить стороннее ПО, которое будет осуществлять подмену.
Случай с Bitcoin отличается: подтверждения, по сути, отсутствуют, номера кошельков ещё более длинные, на конкретного пользователя не пожалуешься...
В общем, давайте реализуем простой софт, который будет анализировать содержимое буфера обмена и подменять его, если обнаружит там корректный адрес Bitcoin кошелька. Писать будем на MASM, чтобы было веселее.
Читать далее «Пишем тривиальный стилер биткоинов»

Flash Info Changer

Небольшая утилита, позволяющая менять некоторые данные, выдаваемые Flash-плагином под Windows.

flash_info_changer

Позволяет менять версию ОС, язык, разрешение, версию Flash.
Например, так:

info_example

Подгружает DLL в указанный процесс, ищет функции (ищутся по сигнатурам, поэтому должна быть некая совместимость с последующими версиями флеша), которые Flash использует для выдачи вышеперечисленных параметров, и перехватывает их.

Проверялось в Mozilla Firefox на Windows XP x86/Windows 7 x64.
Google Chrome не поддерживает, так как процесс, содержащий Pepper Flash, защищен от инжекта (можно убедиться, посмотрев вкладку Security в свойствах процесса с помощью утилиты Process Explorer).

Для работы необходим .NET Framework 2.0.

Скачать: flash-info-changer
Исходный код: flash-info-src
GitHub: flash-info-changer