Рубрика «дизассемблер»

Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 2) - 1

Привет всем,

В предыдущей статье мы успешно модифицировали ядро эмулятора игр на Sega Mega Drive / Genesis, добавив в него возможность отладки. Теперь пришёл черёд написания собственно плагина-отладчика для IDA Pro, версия 7.0. Приступим.Читать полностью »

Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 1) - 1

Приветствую!

Товарищи реверсеры, ромхакеры: в основном эта статья будет посвящена вам. В ней я расскажу вам, как написать свой плагин-отладчик для IDA Pro. Да, уже была первая попытка начать рассказ, но, с тех пор много воды утекло, многие принципы пересмотрены. В общем, погнали!Читать полностью »

В этой статье я покажу, как написать рудиментарный, нативный x86-64 just-in-time компилятор (JIT) на CPython, используя только встроенные модули.

Код предназначен для UNIX-систем, таких как macOS и Linux, но его должно быть легко транслировать на другие системы, типа Windows. Весь код опубликован на github.com/cslarsen/minijit.

Цель — сгенерировать в рантайме новые версии нижеприведённого ассемблерного кода и выполнить их.

48 b8 ed ef be ad de  movabs $0xdeadbeefed, %rax
00 00 00
48 0f af c7           imul   %rdi,%rax
c3                    retq

В основном, мы будем иметь дело с левой частью кода — байтовой последовательностью 48 b8 ed ... и так далее. Эти 15 байтов в машинном коде составляют функцию x86-64, которая умножает свой аргумент на константу 0xdeadbeefed. На этапе JIT будут созданы функции с разными такими константами. Такая надуманная форма специализации должна продемонстрировать базовую механику JIT-компиляции.
Читать полностью »

Ломаем хаКс полностью. Читаем машинные коды как открытую книгу - 1Если haXe оттранслирован в C++, а из него — в машинные коды, это может показаться безнадёжным, тем более, на первый взгляд этот код пестрит вызовами виртуальных методов, которые, не запуская отладчик, трудно соотнести с адресами тел методов.

Но всё не так уж плохо. Даже при отключенной поддержке сценариев (HXCPP_SCRIPTABLE) в файле можно обнаружить строки с названиями методов и полей. Разбираем, как можно размотать этот клубок, сопоставить имена методов с их адресами и смещениями в таблице виртуальных методов.
Читать полностью »

Как мы (почти) победили DirCrypt

Перевод статьи от компании Check Point’s Malware Research Team.

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

Жертвам подобных вредоносных программ обычно рекомендуют восстановить файлы из раннего бэкапа. Но если такого бэкапа нет, перед нами остается трудный выбор — смириться с потерей данных или заплатить злоумышленнику. Однако, нам (Check Point’s Malware Research Team) удалось найти способ в случае DirCrypt восстановить почти все данные, воспользовавшись его слабыми сторонами в реализации шифрования.

Читать полностью »

Привет, %username%!
Декодирование IA-32 кода — задача архисложная. Чтобы в этом убедиться, можете обратиться к Intel Software Development Manual или к статьям, ранее написанным на хабре: Префиксы в системе команд IA-32, Правильно ли работает ваш дизассемблер?. Давайте посмотрим, как с этой задачей борется функционально точный полноплатформенный симулятор Wind River Simics, позволяющий создать высокопроизводительное виртуальное окружение, в котором любая электронная система, начиная с одной платы и заканчивая целыми многопроцессорными, многоядерными и даже многомашинными системами, может быть определена, разработана и запущена.
Как справиться с IA 32 кодом или особенности декодера SimicsБольшинство библиотек для декодирования IA-32 инструкций генерируют или используют таблицы соответствия между кодами операций и инструкциями. Пример использования данного подхода описан в статье Дизассемблер своими руками. Однако декодирование префиксов и аргументов обычно написано руками: libopcodes, metasm, beaengine, distorm. Данный подход обладает существенным недостатком — добавление поддержки новых наборов команд потребует большого количества ручной работы.
Существуют и другие способы создания декодеров, например с помощью языка GDSL. Данный подход является универсальным и позволяет создавать декодеры для любых архитектур.
Simics же использует совершенно другой не менее универсальный подход для работы с IA-32 инструкциями, названный раздельным декодированием. Также Simics имеет возможность использования внешних декодеров, но об этом немного позже.
Читать полностью »

Навеяно древними воспоминаниями… Проходят года и десятилетия, сменяют друг друга названия операционных систем, но кое-что всё же остаётся неизменным. Среди всего многообразия околохакерского ПО меня всегда удивлял HIEW; непостижимым образом этой консольной программе удаётся бороться со временем и быть популярной даже сегодня. HIEW занял свою нишу и стал основным инструментом промышленного вирусного аналитика. Вам может показаться это странным и неудобным, но использовать HIEW для вирусного анализа — очень эффективно.
Читать полностью »

Сегодня я хочу рассказать об одной интересной сложности декодирования/дизассемблирования IA-32 инструкций.

Перед прочтением этой статьи рекомендую обратиться в статье «Префиксы в системе команд IA-32», описывающей общую структуру IA-32 команды и существующие префиксы. В этой статье я подробнее расскажу про обязательные префиксы (англ. mandatory prefixes) и некоторые нюансы, связанные с ними.
Читать полностью »

На сегодняшний день мы не испытываем недостатка в прекрасных вещах, которые написаны на JavaScript. Да и реализации JVM в JavaScript мы уже видели. Теме не менее, Doppio представляет собой наиболее полную и активно развивающуюся JVM.

Doppio — JVM, Компилятор и дизассемблер в JavaScript
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js