Временная скидка 60% на годовую подписку!
Главная assembler

assembler

Xakep #295

Шелл-код для ARM. Пишем на ассемблере свой реверс-шелл для устройств на ARM

Многие знают, как создать шелл‑код для обычных машин с архитектурой x86. Про это написана куча мануалов, статей и книг, но многие современные девайсы, включая смартфоны и роутеры, используют процессоры ARM. Я собрал всю необходимую информацию для подготовки стенда, написания и инъекции шелл‑кода для устройств на ARM.

Xakep #292

Фундаментальные основы хакерства. Ищем структуры языков высокого уровня в программах для x86-64

Исследование программ, написанных на языках высокого уровня, традиционно начинается с реконструкции ключевых структур исходного языка — функций, локальных и глобальных переменных, ветвлений, циклов и так далее. Это делает дизассемблированный листинг более наглядным и значительно упрощает его анализ.

Xakep #289
ВзломДля начинающих

Фундаментальные основы хакерства. Находим реальные адреса инструкций в исполняемых файлах x86-64

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

Xakep #288
ВзломДля начинающих

Фундаментальные основы хакерства. Используем отладчик для анализа 64-разрядных программ в Windows

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

Xakep #282
ВзломХардкор

Фундаментальные основы хакерства. Боремся с дизассемблерами и затрудняем реверс программ

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

Xakep #281
ВзломХардкор

Фундаментальные основы хакерства. Затрудняем анализ программ

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

Xakep #280

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

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

Xakep #280

Фундаментальные основы хакерства. Практикуемся в поиске циклов при реверсе

Сегодня мы с тобой научимся находить любые типы циклов в коде реальных программ на языках высокого уровня — построенных с оптимизацией и без нее. Это один из шагов, с которым ты столкнешься при обратной разработке чужих приложений.

Xakep #279

Фундаментальные основы хакерства. Определяем циклы в двоичном коде программы

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

Xakep #279

Фундаментальные основы хакерства. Разбираем самодеятельность компиляторов при трансляции оператора выбора

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

Xakep #278

Фундаментальные основы хакерства. Изучаем условные переходы в обработке современными компиляторами

Сегодня тебя ждет масса практических примеров — дизассемблированных листингов, на которых мы будем изучать представление условных переходов различными компиляторами. Таким образом, ты узнаешь, как ветвление используется в современных программах и как за ним следить при обратной разработке.

Xakep #277

Фундаментальные основы хакерства. Ищем тестовые строки в чужой программе

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

Xakep #277

Фундаментальные основы хакерства. Ищем операнды при взломе программ

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

Xakep #276

Фундаментальные основы хакерства. Ищем переменные разных типов в чужих программах

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

Xakep #276
ВзломХардкор

HTB Hancliffe. Разбираем технику Socket Reuse

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

Xakep #276

Фундаментальные основы хакерства. Идентифицируем возвращаемое функцией значение

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

Xakep #274
КодингДля начинающих

Заплатка на асме. Создаем панель инструментов для Windows на Flat Assembler

В этой статье я расскажу о том, как создать простое приложение — заготовку панели инструментов для рабочего стола Windows. По ходу дела мы вспомним Win32 API, разберемся, как его использовать на языке ассемблера, и познакомимся с Flat Assembler, который станет для нас основным инструментом разработки.

Xakep #274

Фундаментальные основы хакерства. Соглашение о быстрых вызовах — fastcall

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

Xakep #002

«Введение в Assembler» — подборка статей для начинающих изучать низкоуровневый кодинг

Представляем новую подборку статей: «Введение в Assembler». Те, кто уже подписан на «Хакер», могут читать эти материалы бесплатно, а остальные имеют возможность разово приобрести доступ к ним. Подборка состоит из 14 статей: первая половина познакомит тебя с основами асма, во второй разобрано несколько интересных проектов: игра, интерпретатор бейсика, вирус, примитивное ядро ОС и шеллкод.

Xakep #268

Фундаментальные основы хакерства. Определяем «почерк» компилятора по вызовам функций

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

Xakep #266

Фундаментальные основы хакерства. Учимся идентифицировать аргументы функций

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

Xakep #262

Триальный конь. Как сломать trial, защищенный Enigma Protector

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

Xakep #261

Больше не энигма. Ломаем защиту приложений Enigma x64 актуальных версий

Многие программы используют различные механизмы антиотладки, из-за которых подступиться к ним становится непросто. Сегодня мы поговорим о том, как вскрыть популярную у разработчиков защиту Enigma версии 5 и выше, использующую продвинутые инструменты противодействия анализу и взлому.

Xakep #261

Фундаментальные основы хакерства. Идентификация библиотечных функций

Библиотечный код может составлять львиную долю программы. Ясное дело, незачем тратить на него наше драгоценное время. Однако как быть, если дизассемблер неправильно распознал имена функций? Изучать многотонный листинг самостоятельно? У хакеров есть проверенные методы решения подобных проблем — о них мы сегодня и поговорим.

Xakep #259

Фундаментальные основы хакерства. Распределение динамической памяти и указатели

Как работает выделение и освобождение памяти? Как распознать операторы работы с памятью, используя дизассемблер? Чтобы во всем этом разобраться, нам предстоит разобрать механизмы распределения памяти двух самых популярных компиляторов и выявить различия в их работе. Внимание: в статье тебя ждет множество дизассемблерных листингов и кода на C++.

Xakep #259

Качественная склейка. Пишем джоинер исполняемых файлов для Win64

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

Xakep #259
КодингДля начинающих

Погружение в ассемблер. Зачем учить ассемблер в 2020 году

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

Xakep #259
КодингДля начинающих

Погружение в ассемблер. Сокращаем размер программы

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

Xakep #258

Фундаментальные основы хакерства. Как идентифицировать структуры и объекты в чужой программе

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

Xakep #258
КодингДля начинающих

Погружение в ассемблер. Работаем с большими числами и делаем сложные математические вычисления

Как ты знаешь, регистры процессора 8088 — 16-битные. Однако при необходимости ты можешь работать через эти регистры не только с 16-битными числами, но и с числами большей разрядности: и с 32-битными, и даже более крупными. В этой статье я сначала расскажу как, а затем мы нарисуем знаменитый фрактал — множество Мандельброта.

Xakep #258
КодингДля начинающих

Погружение в ассемблер. Учимся работать с памятью

В этой статье я познакомлю тебя с сегментной адресацией и сегментными регистрами, расскажу, как распределяется первый мегабайт оперативной памяти, и покажу получение прямого доступа к видеопамяти в текстовом режиме. Но главное — мы поностальгируем по фильму «Хакер» и напишем психоделическую программу, которой позавидовали бы его герои!

Xakep #257
КодингДля начинающих

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

На ассемблере ты можешь хранить переменные двумя способами: в регистрах и в памяти. С регистрами все понятно, а вот с памятью могут возникнуть проблемы. Также ты узнаешь два способа размещения переменных, которыми пользоваться нельзя, и три — которыми можно, какие бывают режимы адресации и как это знание поможет тебе кодить на ассемблере более эффективно.

Xakep #256

Фундаментальные основы хакерства. Учимся идентифицировать конструкторы и деструкторы

В этой статье речь пойдет об известных каждому программисту функциях работы с объектами класса — конструкторах и деструкторах, а также о том, как обнаружить их в коде исследуемой программы.

Xakep #256
КодингДля начинающих

Погружение в ассемблер. Осваиваем арифметические инструкции

Прочитав эту статью, ты научишься пользоваться арифметическими и логическими инструкциями, а также инструкциями сдвига. Попутно узнаешь, как создавать подпрограммы. А в конце напишешь простенькую игрушку «Угадай число».

Xakep #255
КодингДля начинающих

Погружение в ассемблер. Делаем первые шаги в освоении асма

Ты решил освоить ассемблер, но не знаешь, с чего начать и какие инструменты для этого нужны? Сейчас расскажу и покажу — на примере программы «Hello, world!». А попутно объясню, что процессор твоего компьютера делает после того, как ты запускаешь программу.

Xakep #255

Фундаментальные основы хакерства. Какие бывают виртуальные функции и как их искать

Если функция объявляется в базовом, а реализуется в производном классе, она называется чисто виртуальной функцией, а класс, содержащий хотя бы одну такую функцию, — абстрактным классом. Язык C++ запрещает создание экземпляров абстрактного класса, да и как они могут создаваться, если по крайней мере одна из функций класса не определена?

Xakep #253

МикроБ. Пишем бейсик на ассемблере и умещаем в 512 байт

Хочешь попрактиковаться в кодинге на ассемблере? Давай создадим интерпретатор бейсика и запустим его прямо из загрузочного сектора твоего компьютера, уместив его в 512 байт. Скорее всего, это будет самая сложная программа в твоей жизни, и когда ты создашь ее своими руками, сможешь без зазрения совести называть себя хакером!

Xakep #253

Фундаментальные основы хакерства. Идентификация стартового кода и виртуальных функций приложений под Win64

С какой функции начинается выполнение Windows-программы? Нет, не WinMain! На самом деле первым управление получает стартовый код, скрыто вставляемый компилятором. Выполнив инициализационные процедуры, он вызывает WinMain, а после ее завершения вновь получает управление. И это кое-что значит для хакера.

Xakep #252

Floppy Bird. Пишем на ассемблере клон игры Flappy Bird, который уместится в бутсектор

Хочешь попрактиковаться в кодинге на ассемблере? Давай вместе шаг за шагом создадим игру и запустим ее прямо из загрузочного сектора твоего компьютера. Если ты думаешь, что 512 байт маловато для полноценной игры, не спеши с выводами. К концу статьи ты сможешь сделать ее своими руками!

Xakep #246
ВзломДля начинающих

В королевстве PWN. Препарируем классику переполнения буфера в современных условиях

Сколько раз и в каких только контекстах не писали об уязвимости переполнения буфера! Однако в этой статье я постараюсь предоставить универсальное практическое «вступление» для энтузиастов: от существующих на данный момент механизмов безопасности компилятора GCC до точечных особенностей разработки бинарных эксплоитов для срыва стека.

Страница 1 из 212

25 лет «Хакеру»!

Еженедельный дайджест

Спасибо за подписку! Мы будем присылать важные новости ИБ в еженедельном дайджесте
Ошибка при подписке Случилась ошибка при создании подписки на наш дайджест. Пожалуйста, попробуйте позднее
Важные события и скидка на подписку:
«ХАКЕР» ДОСТУПЕН ТОЛЬКО В ЭЛЕКТРОННОЙ ВЕРСИИ
Оформи подписку — получи:
  • доступ к платным материалам сайта
  • доступ ко всем номерам PDF
4000 р.
на год
920 р.
на месяц

«Хакер» в соцсетях

Материалы для подписчиков