Даже в 2025 году, когда вокруг нейросети, автогенерация кода и IDE с предиктивным интеллектом, работа с редкими микроконтроллерами всё ещё может обернуться настоящим хардкором. Особенно, если речь идёт о «слепой» отладке без отладчика, когда в арсенале только прошивка, HEX-файл и пара байтов на выводе. В этой статье — личный опыт, много хардкора, дизассемблирование вручную и поиск глюка в 2 КБ бинаря.
Рубрика «дизассемблер»
Программисты 21 века. Линус Торвальдс
2025-03-03 в 9:01, admin, рубрики: Aion FX, Commodore VIC-20, GPL, lego, linux, MicroEMACS, minix, pesconvert, Q-DOS, ruvds_статьи, test-tlb, uemacs, UNIX, гитарная педаль, дизассемблер, Линус Торвальдс
Линус Торвальдс — финн шведского происхождения, в детстве говорил по-шведски и ходил в шведскую школу. Родился 28 декабря 1969 года в семье журналистов и деда-математика.Читать полностью »
Как оценить реальную производительность своего кода
2022-11-21 в 9:00, admin, рубрики: C, c++, Compiler Explorer, gcc, godbolt, il, Intermediate Language, LLVM, objdump, ruvds_статьи, Sharplab, uiCA, анализатор кода, ассемблер, бенчмарк кода, Блог компании RUVDS.com, декомпиляция, дизассемблер, Компиляторы, межпроцедурная оптимизация, оптимизация кода, Программирование, промежуточный язык
Код, который мы пишем, и который будет исполнен процессором, — две разные вещи. На уровне ассемблера существует миллион вариантов, в каком виде интерпретировать и запустить высокоуровневые команды. Более того, современные компиляторы сильно оптимизируют код, а результат этой оптимизации похож на магию.
Читать полностью »
Пишем дизассемблер виртуальной машины из игры Clock Tower (PS1-PC) для IDA Pro
2021-08-20 в 5:27, admin, рубрики: C, c++, disassembler, ida pro, дизассемблер, Программирование, разработка игр, реверс-инжиниринг, хоррорыВсем привет. Тут такое дело: ещё одна моя реверсерская мечта сбылась - я написал процессорный модуль для IDA Pro с нуля, за два дня! Если вы когда-то тоже хотели написать свой модуль, но боялись начать - думаю, моя статья сможет помочь.
В качестве кода, который требуется дизасемблировать, будет выступать код виртуальной машины из очень крутого хоррора, который выходил сначала на SNES, потом на PS1, PC и Wonderswan - "Clock Tower - The First Fear". В игре имеется 9 концовок (sic!), атмосфера гнетущая, а в качестве главного злодея выступает "Scissorman" (человек с руками-ножницами). Заинтересовал? Тогда добро пожаловать...Читать полностью »
Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 2)
2019-01-02 в 20:05, admin, рубрики: reverse engineering, sega genesis, sega mega drive, ассемблер, дизассемблер, Игры и игровые приставки, ненормальное программирование, отладка, Программирование, реверс-инжиниринг
Привет всем,
В предыдущей статье мы успешно модифицировали ядро эмулятора игр на Sega Mega Drive / Genesis, добавив в него возможность отладки. Теперь пришёл черёд написания собственно плагина-отладчика для IDA Pro, версия 7.0. Приступим.Читать полностью »
Модернизация IDA Pro. Отладчик для Sega Mega Drive (часть 1)
2019-01-02 в 20:05, admin, рубрики: reverse engineering, sega genesis, sega mega drive, ассемблер, дизассемблер, Игры и игровые приставки, ненормальное программирование, отладка, Программирование, реверс-инжиниринг
Приветствую!
Товарищи реверсеры, ромхакеры: в основном эта статья будет посвящена вам. В ней я расскажу вам, как написать свой плагин-отладчик для IDA Pro. Да, уже была первая попытка начать рассказ, но, с тех пор много воды утекло, многие принципы пересмотрены. В общем, погнали!Читать полностью »
Пишем x86-64 JIT-комплятор с нуля в стоковом Python
2017-11-15 в 5:29, admin, рубрики: Brainfuck, C, cpython, ctypes, forth, jit, PeachPy, python, x86, дизассемблер, компилятор, Компиляторы, машинный код, оптимизация кодаВ этой статье я покажу, как написать рудиментарный, нативный 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-компиляции.
Читать полностью »
Ломаем хаКс полностью. Читаем машинные коды как открытую книгу
2017-08-20 в 5:56, admin, рубрики: c++, haxe, ida, OpenFL, дизассемблер, разработка игр, реверс-инжиниринг
Если haXe оттранслирован в C++, а из него — в машинные коды, это может показаться безнадёжным, тем более, на первый взгляд этот код пестрит вызовами виртуальных методов, которые, не запуская отладчик, трудно соотнести с адресами тел методов.
Но всё не так уж плохо. Даже при отключенной поддержке сценариев (HXCPP_SCRIPTABLE) в файле можно обнаружить строки с названиями методов и полей. Разбираем, как можно размотать этот клубок, сопоставить имена методов с их адресами и смещениями в таблице виртуальных методов.
Читать полностью »
Как мы (почти) победили DirCrypt
2014-09-03 в 11:56, admin, рубрики: dircrypt, Malware, дизассемблер, информационная безопасность, криптография, реверс-инжиниринг 
Перевод статьи от компании Check Point’s Malware Research Team.
DirCrypt — один из самых злостных видов вымогающей деньги малвари. Она не просто зашифровывает все найденные пользовательские файлы, требуя выкуп за их расшифровку, но и остается в системе, подхватывая и зашифровывая сохраняемые пользователем файлы на лету. После ее появления рабоат на компьютере превращается в мучение.
Жертвам подобных вредоносных программ обычно рекомендуют восстановить файлы из раннего бэкапа. Но если такого бэкапа нет, перед нами остается трудный выбор — смириться с потерей данных или заплатить злоумышленнику. Однако, нам (Check Point’s Malware Research Team) удалось найти способ в случае DirCrypt восстановить почти все данные, воспользовавшись его слабыми сторонами в реализации шифрования.
Как справиться с IA-32 кодом или особенности декодера Simics
2014-03-18 в 5:25, admin, рубрики: x86, Блог компании Intel, виртуализация, дизассемблер, Процессоры, метки: x86, дизассемблер Привет, %username%!
Декодирование IA-32 кода — задача архисложная. Чтобы в этом убедиться, можете обратиться к Intel Software Development Manual или к статьям, ранее написанным на хабре: Префиксы в системе команд IA-32, Правильно ли работает ваш дизассемблер?. Давайте посмотрим, как с этой задачей борется функционально точный полноплатформенный симулятор Wind River Simics, позволяющий создать высокопроизводительное виртуальное окружение, в котором любая электронная система, начиная с одной платы и заканчивая целыми многопроцессорными, многоядерными и даже многомашинными системами, может быть определена, разработана и запущена.
Большинство библиотек для декодирования IA-32 инструкций генерируют или используют таблицы соответствия между кодами операций и инструкциями. Пример использования данного подхода описан в статье Дизассемблер своими руками. Однако декодирование префиксов и аргументов обычно написано руками: libopcodes, metasm, beaengine, distorm. Данный подход обладает существенным недостатком — добавление поддержки новых наборов команд потребует большого количества ручной работы.
Существуют и другие способы создания декодеров, например с помощью языка GDSL. Данный подход является универсальным и позволяет создавать декодеры для любых архитектур.
Simics же использует совершенно другой не менее универсальный подход для работы с IA-32 инструкциями, названный раздельным декодированием. Также Simics имеет возможность использования внешних декодеров, но об этом немного позже.
Читать полностью »
