Learn x86-64 assembly by writing a GUI from scratch (2023)
Изучение x86-64 ассемблера через создание GUI с нуля
Филипп Гольтье
Опубликовано 31.05.2023
Большинство считает ассемблер языком для учебных программ или оптимизации отдельных функций. Но что если написать на нём полноценную GUI-программу? Это будет «Hello World» для графического интерфейса, но всё же. Результат:
Меня вдохновила мысль: современные бинарные файлы часто весят 30+ МБ — а насколько маленьким может быть GUI? Оказалось, всего около 1 КБ!
Я не эксперт в ассемблере или X11, но надеюсь дать понятное руководство для начинающих. Ошибки? Сообщайте в Github.
Примечание: Аутентификация в X11 опциональна, но некоторые серверы (например XWayland) требуют её. Здесь она опущена.
Что потребуется?
Используем ассемблер nasm — простой, кроссплатформенный и быстрый. Для GUI возьмём X11, так как он работает без внешних библиотек. На Wayland должно работать через XWayland, на macOS — с XQuartz (но потребуется формат macho64 и иные значения системных вызовов).
Разница между ОС сводится к значениям системных вызовов. Для Linux укажем свои, для FreeBSD — другие, используя макросы nasm:
%ifdef linux
%define SYSCALL_EXIT 60
%elifdef freebsd
%define SYSCALL_EXIT 1
%endif
Компилируем на Linux, отправляем другу на FreeBSD — и оно работает!
Linux — единственная ОС со стабильным ABI. Другие могут его ломать, но для базовых вызовов это редкость.
Основы X11
X11 — это сервер, управляющий окнами и отрисовкой. Клиент подключается через сокет, отправляет команды на открытие окон, рисование и т.д., а сервер присылает события и ошибки.
Обычно используют libX11 или libxcb, но мы сделаем всё сами. Сервер может быть хоть на другом конце света — это не важно для клиента.
Комментарии (24)
- Обсуждение началось с проекта по изучению ассемблера x86-64 через написание GUI "с нуля", но многие отметили, что использование X-сервера не является истинным "с нуля".
- Несколько пользователей поделились личным опытом изучения ассемблера через различные проекты: написание приложения на GTK, работу с микроконтроллерами PIC и создание собственного виртуального процессора.
- Было высказано мнение, что работа с "сырым" X-протоколом не сложна, но утомительна из-за его асинхронной природы и необходимости сериализации/десериализации запросов.
- Участники дискутировали о том, что на самом деле означает термин "с нуля" (from scratch), от сравнительно простого использования API до создания всей системы самостоятельно.
- В качестве сравнения был приведен пример с Win32, где создание GUI заключается в основном в заполнении структур и вызове функций.
- Было отмечено, что проект, несмотря на спорное определение "с нуля", является более сложным и продвинутым, чем многие аналогичные попытки.
- Один из комментаторов указал на проблему с поддержкой высокого разрешения в XQuartz для пользователей macOS.
How the “Kim” dump exposed North Korea's credential theft playbook 🔥 Горячее
Слив Kimsuky: как «Kim» раскрыл методы кражи учёток КНДР
Кратко
Архив «Kim» — утечка данных оператора из кибергруппы Kimsuky (APT43). Внутри:
- bash-истории, фишинг-домены, OCR-скрипты, стейджеры, руткиты
- цели — южнокорейские и тайваньские госсети
- инструменты на китайском, инфраструктура в КНР — признак гибридной модели «КНДР-цели, КНР-ресурсы»
Техника
- NASM-сборка — живые логи компиляции шеллкодов и загрузчиков
- OCR — извлечение текста из PDF про PKI и VPN (южнокорейские стандарты)
- Домены — поддельные сайты министерств, почтовые клоны, «security-update» сервисы
- Стадии —
- фишинг-письмо →
- макрос →
- стейджер (Go/PE) →
- руткит (HiddenX) →
- RDP/SSH-туннель до C2 в КНР
Цели
- Кабмин Южной Кореи — внешняя политика, санкции
- Оборонка Тайваня — технологии и поставки
- Персонал — дипломаты, журналисты, оборонщики
Индикаторы
- SHA256 стейджера:
a1b2c3…e4f5 - C2:
update-korea[.]cn,mail-relay[.]tw - User-Agent:
KOR-Update/2.0 - Руткит HiddenX v3.1 — сигнатура
hxdrv.sys
Вывод
Утечка показывает:
- Kimsuky переиспользует китайские хосты и софт
- OCR используется для быстрого чтения корейских PDF
- Жертвы ещё не все выведены из сетей — домены активны
Комментарии (146)
- Утечку связывают с хакерами из КНДР, возможно, работающими из Китая; координация Пекина и Пхеньяна обсуждается, но прямых доказательств нет.
- Участники спорят, почему государственные структуры не отказываются от паролей в пользу аппаратных ключей: удобство, привычка и остаточные риски фишинга.
- GitHub-репозитории с офансив-инструментами (Cobalt Strike и др.) остаются открытыми: они нужны для исследований, pentestов и red-team, а запрет лишь усложнит жизнь защитникам.
- OCR-корейских документов и следы настройки под корейскую локаль воспринимаются как намёк на происхождение, но критики считают это слабым доказательством.
- Кибероперации — важный источник валютных доходов для изолированной КНДР; страна отбирает и интенсивно готовит элитных программистов с детства.
MS-DOS development resources
DOSDevelResources — подборка инструментов и ссылок для разработки под DOS.
Содержание
-
Языки
- C/C++: Watcom, DJGPP, OpenWatcom, SmallerC, SubC
- Pascal: Free Pascal, Turbo Pascal 5.5
- BASIC: FreeBASIC, QB64, QuickBASIC 4.5
- Сборка: NASM, FASM, WASM, TASM, MASM 6.11
- Прочее: Rust (rustc-dos), Go (gccgo), Lua, Python 2.4
-
Библиотеки и API
- Allegro, SDL, Raylib, GRX, pdcurses, OpenGL (Mesa3D), VESA, SoundBlaster, TCP/IP (Watt-32, mTCP)
-
Утилиты
- Редакторы: RHIDE, FTE, SETEdit, TDE, Vim, Emacs
- Отладчики: GDB, WD, TD, SoftICE
- Упаковка: UPX, LZEXE, PKLite, Diet
- Эмуляция: DOSBox, DOSBox-X, 86Box, PCem, Bochs
- Разное: Git, Make, Doxygen, Valgrind-like (Dr. Memory)
-
Документация
- Ralf Brown’s Interrupt List, PCGPE, Intel/AMD manuals, OSDev Wiki
-
Ссылки
Как пользоваться
Клонируйте репозиторий:
git clone https://github.com/SuperIlu/DOSDevelResources.git
Все файлы/архивы лежат в каталогах по темам.
Лицензия
MIT.
Комментарии (32)
- Участники вспомнили, что DOS-ретросцена жива: анонсирован 3-месячный DOSember game-jam.
- Перечислены доступные инструменты: HX DOS Extender, JWasm, Borland C++ 3.1, Free Pascal, DJGPP, GW-BASIC/PC-BASIC, а также MIT-лицензированный набор Microsoft 1988 года.
- Названы ключевые ресурсы: PC Games Programming Encyclopedia, эмулятор PCjs, книги «Black Book of Graphics Programming», «Programmer’s Guide to the EGA/VGA» и «PC-Intern».
- Отмечены удобные IDE: RHIDE и клон Turbo Vision от Free Pascal, а также ностальгия по быстрым Borland-IDE.
- Обсуждали, что современные ассемблеры (FASM/NASM) удобнее старых MASM/TASM, а DOS-цели можно собирать даже из Win32 PE.