Как стать автором
Поиск
Написать публикацию
Обновить
58.45

Assembler *

Язык программирования низкого уровня

Сначала показывать
Порог рейтинга
Уровень сложности

Решение задания с pwnable.kr 17 — memcpy. Выравнивание данных

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

В данной статье разберемся с выравнием данных, а также решим 17-е задание с сайта pwnable.kr.

Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Читать дальше →

Решение задания с pwnable.kr 16 — uaf. Уязвимость использование после освобождения (use after free)

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

В данной статье рассмотрим, что такое UAF, а также решим 16-е задание с сайта pwnable.kr.

Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Читать дальше →

Решение задания с pwnable.kr cmd1, cmd2, asm, blukat. Обходим фильтрацию в Linux. Пишем shellcode с помощью pwntools

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

В данной статье посмотрим как обойти легкий фильтр, разберемся как написать shell c помощью pwntools, а также решим несколько заданий с сайта pwnable.kr.

Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:
Читать дальше →

Видеокурс «Введение в реверсинг с нуля, с использованием IDA PRO. Глава 1»

Время на прочтение1 мин
Количество просмотров13K
Привет, Хабравчане!

Хочу сообщить Вам приятную новость. Уже доступна первая видео-глава из цикла статей — «Введение в реверсинг с нуля, с использованием IDA PRO». Сам видеоролик доступен здесь. Очень красивый PDF файл здесь.

Также здесь можно увидеть какие комплектующие я приобрел в своё время:


А здесь можно посмотреть на компьютер в сборке:


Также, в видеоролике я рассказываю про 99 год, Журнал Хакер, в общем про то, что было и уже не будет. И я очень рад, что я попал в это время, время 90-х и пережил всё это.

Недостатки RISC-V

Время на прочтение6 мин
Количество просмотров30K
Изначально я написала этот документ несколько лет назад, будучи инженером по проверке ядра исполнения команд (execution core verification engineer) в ARM. Конечно, на моё мнение повлияла углублённая работа с исполнительными ядрами разных процессоров. Так что делайте на это скидку, пожалуйста: может, я слишком категорична.

Однако я по-прежнему считаю, что создатели RISC-V могли справиться гораздо лучше. С другой стороны, если бы я сегодня проектировала 32-или 64-разрядный процессор, то, вероятно, реализовала бы именно такую архитектуру, чтобы воспользоваться существующим инструментарием.

Статья изначально описывала набор команд RISC-V 2.0. Для версии 2.2 в ней сделаны некоторые обновления.
Читать дальше →

Решение задания с pwnable.kr 08 — leg, и 10 — shellshock. ARM ассемблер. Уязвимость bash

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

В данной статье вспомним синтаксис ARM ассемблера, разберемся с уязвимостью shellshock, а также решим 8-е и 10-е задания с сайта pwnable.kr.

Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Читать дальше →

Эксперименты с небольшой многозадачностью в микроконтроллере

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

В одной из предыдущих заметок автор пытался рассуждать о том, что при программировании микроконтроллера простой переключатель задач будет полезен в ситуациях, когда использование операционной системы реального времени — это слишком много, а всеобъемлющая петля (super loop) для всех требуемых действий — это слишком мало (Сказал, прямо как граф де Ла Фер). Точнее говоря, не слишком мало, а слишком запутано.


В последующей заметке планировалось упорядочить доступ к общим для нескольких задач ресурсам с помощью очередей на основе кольцевых буферов (FIFO) и специально отведенной для этого отдельной задачи. Разбросав по разным задачам те действия, которые не связаны друг с другом, мы вправе ожидать более обозримый код. А если при этом мы получим некоторое удобство и простоту, то почему бы и не попробовать?


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

Читать дальше →

Рецепты для ELFов

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

image


На русском языке довольно мало информации про то, как работать с ELF-файлами (Executable and Linkable Format — основной формат исполняемых файлов Linux и многих Unix-систем). Не претендуем на полное покрытие всех возможных сценариев работы с эльфами, но надеемся, что информация будет полезна в виде справочника и сборника рецептов для программистов и реверс-инженеров.


Подразумевается, что читатель на базовом уровне знаком с форматом ELF (в противном случае рекомендуем цикл статей Executable and Linkable Format 101).


Под катом будут перечислены инструменты для работы, описаны приемы для чтения метаинформации, модификации, проверки и размножения создания эльфов, а также приведены ссылки на полезные материалы.

Поработаем с эльфами

Адаптация программ для ZX Spectrum к TR-DOS современными средствами. Часть 3

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

Как мы выяснили в предыдущей части, машинные коды игры загрузить с дискеты непосредственно по адресу назначения нельзя. Мы загрузим их в другое место, а после загрузки переместим куда нужно. Кроме этого, мы хотим сделать моноблочный загрузчик, когда и загрузчик и загружаемые данные находятся в одном бейсик-файле. Такой загрузчик можно написать только в машинных кодах. При этом, поскольку файл у нас моноблочный, загрузчик в машинных кодах нужно будет поместить в комментарии к загрузчику на бейсике.


Floppy 5.25"

Читать дальше →

Введение в реверсинг с нуля, с использованием IDA PRO

Время на прочтение5 мин
Количество просмотров26K
Привет, Хабравчане!

Для тех, кто не знает, в своё время я взял на себя ответственность перевести испанский курс Introduccion Al Reversing Con Ida Pro Desde Cero под авторством Ricardo Narvaja на русский язык. Прошло 2,5 года и теперь я могу смело сказать, что курс переведен на русский язык. На данный момент это 67 частей. Но это ещё не всё. В конце 67 части, мы можем увидеть, что нас ждёт продолжение. Сейчас же я бы хотел рассказать, про то как я переводил курс, с чем столкнулся при переводе, что узнал и как всё это было.
Читать дальше →

Чуть больше о многозадачности в микроконтроллерах

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

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


Был выбран микроконтроллер, с ядром из очень распространенного семейства ARM Cortex M. Из знакомых многим, а не только автору, вариантов с цифрами 0,3,4 и 7 был выбран M4, поскольку, оказался под рукой.


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

Читать дальше →

Часть 2: RocketChip: подключаем оперативную память

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

В предыдущей части мы собрали микроконтроллер вообще без оперативной памяти на базе ПЛИС Altera/Intel. Однако на плате есть разъём с установленным SO-DIMM DDR2 1Gb, который, очевидно, хочется использовать. Для этого нам потребуется обернуть DDR2-контроллер с интерфейсом ALTMEMPHY в модуль, понятный для протокола работы с памятью TileLink, используемого повсюду в RocketChip. Под катом — тактильная отладка, брутфорс программирование и ГРАБЛИ.


Как известно, в Computer Science есть две главные проблемы: инвалидация кешей и именование переменных. На КДПВ вы видите редкий момент — две главные проблемы CS встретили друг друга и что-то замышляют.

Читать дальше →

Часть 1: RISC-V / RocketChip в неестественной среде обитания

Время на прочтение15 мин
Количество просмотров10K
Конфигурирование RocketChip

Недавно на Хабре публиковалась статья о том, как поэкспериментировать с архитектурой RISC-V без затрат на «железо». А что, если сделать подобное на отладочной плате? Помните мемы про генератор игр: штук 20 галочек в стиле «Графика не хуже Кризиса», «Можно грабить корованы» и кнопка «Сгенерировать». Приблизительно так же устроен генератор SoC-ов RocketChip, только там не окно с галочками, а Scala-код и немного ассемблера и Make-файлов. В этой статье я покажу, как просто портировать этот RocketChip с родного для него Xilinx на Altera/Intel.

Читать дальше →

Ближайшие события

492-байтная демка на ATtiny5

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


Демки обычно отличаются более сложной графикой, чем игры того же объёма. Ведь не приходится тратить ресурсы на взаимодействие с пользователем и дополнительные расчёты. Предлагаемая программа работает на микроконтроллере ATtiny5 с 512 байтами ПЗУ, 32 байтами ОЗУ и 16 регистрами процессора. Rakettitiede — это по-фински «ракетная наука» (в т.ч. в том же значении, что и в английском фразеологизме), а также название компании, разрабатывающей ПО.
Читать дальше →

Трёхкомандное ДУ с программой из 290 16-битных слов

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


Устройство на ATtiny13, управляемое программой из 290 16-разрядных слов, написанной на ассемблере, запоминает коды шести кнопок пульта ДУ и включает/выключает три нагрузки.
Читать дальше →

Немного о многозадачности в микроконтроллерах

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

Немного о многозадачности


Каждый, кто день за днем или от случая к случаю, занимается программированием микроконтроллеров, рано или поздно столкнется с вопросом: а не использовать ли многозадачную операционную систему? Их в сети предлагается довольно много, при этом немало – бесплатных (или почти бесплатных). Только выбирай.


Подобные сомнения появляются, когда попадается проект, в котором микроконтроллер должен одновременно выполнять несколько различных действий. Некоторые из них не связаны с другими, а остальные, наоборот, не могут друг без друга. К тому же, и тех и других может оказаться слишком много. Что такое “слишком много” зависит от того, кто будет оценивать или от того, кто будет выполнять разработку. Хорошо, если это один и тот же человек.


Это, скорее, не вопрос количества, а вопрос качественного различия задач по отношению к скорости выполнения, или еще каким-то требованиям. Такие мысли могут возникнуть, например, когда в проекте требуется регулярно отслеживать напряжение питания (не пропало ли?), довольно часто считывать и сохранять значения входных величин (покоя не дают), изредка следить за температурой и управлять вентилятором (дышать нечем), сверять свои часы с тем, кому доверяешь (вам хорошо там командовать), поддерживать связь с оператором (стараться не нервировать его), проверять контрольную сумму постоянной памяти программ на предмет деменции (при включении, или раз в неделю, или с утра).

Читать дальше →

Аппаратный bit banding CortexM3/M4(ARM), архитектура ядра, ассемблер, С/C++14 и капля метапрограммирования

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

Введение


Внимание, это не очередная «Hello world»статья о том как помигать светодиодом или попасть в свое первое прерывание на STM32. Однако, я постарался дать исчерпывающие объяснения по всем затрагиваемым вопросам, поэтому статья будет полезна не только многим профессиональным и мечтающим стать таковыми разработчикам (как я надеюсь), но и начинающим программистам микроконтроллеров, так как тема эта почему-то обходится стороной на бесчисленных сайтах/блогах «учителей программирования МК».

image
Читать дальше →

RISC-V с нуля

Время на прочтение18 мин
Количество просмотров62K
В этой статье мы исследуем различные низкоуровневые концепции (компиляция и компоновка, примитивные среды выполнения, ассемблер и многое другое) через призму архитектуры RISC-V и её экосистемы. Я сам веб-разработчик, на работе ничем таким не занимаюсь, но мне это очень интересно, отсюда и родилась статья! Присоединяйтесь ко мне в этом беспорядочном путешествии в глубины низкоуровневого хаоса.

Сначала немного обсудим RISC-V и важность этой архитектуры, настроим цепочку инструментов RISC-V и запустим простую программу C на эмулированном оборудовании RISC-V.
Читать дальше →

Новая библиотека x86 SIMD интринсиков — immintrin debug

Время на прочтение3 мин
Количество просмотров7K
С каждым новым поколением процессоров Intel появляются новые и все более сложные векторные инструкции. Хотя длина вектора (512 бит) в ближайшее время расти не будет, появятся новые типы данных и виды инструкций. Например, кто сможет с первого взгляда понять, что делает такой интринсик (и соответствующая ему инструкция процессора)?

Bitwise ternary logic that provides the capability to implement any three-operand binary function; the specific binary function is specified by value in imm8.

__m512i _mm512_mask_ternarylogic_epi32 (__m512i src, __mmask8 k, __m512i a, __m512i b, int imm8)
FOR j := 0 to 15
    i := j*32
    IF k[j]
        FOR h := 0 to 31
            index[2:0] := (src[i+h] << 2) OR (a[i+h] << 1) OR b[i+h]
            dst[i+h]   := imm8[index[2:0]]
        ENDFOR
    ELSE
        dst[i+31:i] := src[i+31:i]
    FI
ENDFOR
dst[MAX:512] := 0

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

Часть 1. QInst: лучше день потерять, потом за пять минут долететь (пишем инструментацию тривиально)

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

В предыдущей части я приблизительно описал, как можно загрузить eBPF функции из ELF-файла. Теперь пришла пора перейти от фэнтези к советским мультикам, и следуя мудрому совету, потратив один раз некоторое количество усилий, сделать универсальный инструмент инструментации (или, сокращённо, УИИ!!!). При этом я воспользуюсь антипаттерном проектирования «Золотой молоток» и сооружу инструмент из относительно знакомого мне QEMU. Бонусом за это мы получим кросс-архитектурную инструментацию, а также инструментацию на уровне целого виртуального компьютера. Инструментация будет вида «небольшой нативный so-шничек + небольшой .o-файл с eBPF». При этом eBPF-функции будут подставляться перед соответствующими инструкциями внутреннего представления QEMU перед оптимизацией и кодогенерацией.


В итоге сама инструментация, добавляемая при кодогенерации (то есть, не считая пары килобайтов обычного сишного рантайма), выглядит вот так, и это не псевдокод:


#include <stdint.h>

extern uint8_t *__afl_area_ptr;
extern uint64_t prev;

void inst_qemu_brcond_i64(uint64_t tag, uint64_t x, uint64_t y, uint64_t z, uint64_t u)
{
    __afl_area_ptr[((prev >> 1) ^ tag) & 0xFFFF] += 1;
    prev = tag;
}

void inst_qemu_brcond_i32(uint64_t tag, uint64_t x, uint64_t y, uint64_t z, uint64_t u)
{
    __afl_area_ptr[((prev >> 1) ^ tag) & 0xFFFF] += 1;
    prev = tag;
}

Что же, пора загрузить нашего эльфа в Матрицу. Ну, как загрузить, скорее вмазать распылить.

Читать дальше →