Тег

assembler

52 материала · RSS

Привет из прошлого. Реверсим винтажный Wise Installer и обходим его проверки

Сегодня мы разберемся, как устроены дистрибутивы на базе Wise Installer — того самого винтажного инсталлятора родом из 90-х. Мы возьмем старую утилиту, которая отказывается устанавливаться без «главной программы», и шаг за шагом исследуем скрипты и функции иснсталлятора с использованием…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как работает выделение и освобождение памяти? Как распознать операторы работы с памятью, используя дизассемблер? Чтобы во всем этом разобраться, нам предстоит разобрать механизмы распределения памяти двух самых популярных компиляторов и…

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

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

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

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

Ты решил освоить ассемблер, но перед этим хочешь понять, что тебе это даст как программисту? Стоит ли входить в мир программирования через ассемблер, или лучше начать с какого-нибудь языка высокого…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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