ayoree
Открыт к предложениям · удалённо или релокация

Danil Aptin

Software Engineer

Разработчик с 7+ годами опыта за плечами. Сейчас моё основное направление - это C/C++, именно на нём я нашёл своё место в коммерческих проектах, но сейчас расширяю свой кругозор в сторону Rust и Go. Люблю докапываться до сути задач, до ответа на вопрос "Почему тут сделано именно так?". С детства люблю копаться во внутренностях различных устройств, а теперь это переросло в моё хобби - Reverse Engineering.

Опыт
7+ лет
Сейчас
C/C++ разработчик игр в Be Nice Games
Где
Новосибирск · работаю удалённо
Языки
английский C1 · русский родной

Опыт

мой stack trace
  1. Разработчик игр (C/C++)

    Be Nice Games Херцег-Нови, Черногория

    - сейчас

    Веб-игры на W4 - собственном движке компании. У W4 нет редактора: ни сцены, ни инспектора, ни drag-and-drop. Геймплей, шейдеры и тулинг пишутся кодом и собираются в браузер через Emscripten. Это ограничение научило меня большему в C++, чем любая работа с GUI.

    • 50+ механик в проде
    • 100+ легаси-багов закрыто
    • 20+ проектов выпущено

    стек C · C++ · Emscripten · GLSL · Dear ImGui · CMake · JavaScript · REST

  2. C/C++ разработчик

    WizardSoft Санкт-Петербург

    -

    Десктопное приложение для смет - примерно Excel, Access и Word в одной программе. Писал логику документов: создание смет, связи между ними, автоматический пересчёт формул и разрешение зависимостей. Делал UI-компоненты на MFC/COM и портировал часть из них на Linux.

    стек C · C++ · MFC · COM · Visual Studio · порт на Linux

  3. Веб-разработчик

    Пятое Измерение Россия

    -

    Производственная практика во время учёбы. Сайт плюс админка на Laravel и схема MySQL под ними. Здесь я впервые писал SQL-запросы, над которыми пришлось всерьёз подумать, и впервые столкнулся с шифрованием данных.

    стек PHP · Laravel · MySQL · JavaScript · HTML/CSS

  4. C/C++ разработчик, реверс-инжиниринг - фриланс

    Частные заказы Россия · удалённо

    -

    Там, где и остался: C и C++. Трейнеры для игр на заказ - найти значение в памяти, захукать код, который его меняет, держать оффсеты живыми после патчей. Реверс форматов сейвов и ассетов, бинарные патчи и DLL-моды для игр, где моддинг не был предусмотрен. Здесь хобби-реверс превратился в оплачиваемую работу - подробнее ниже на странице.

    стек C · C++ · x86 Assembly · WinAPI · Reverse Engineering · IDA Pro · x64dbg · DLL

  5. Python / веб-разработчик - фриланс

    Частные заказы Россия · удалённо

    -

    Заказы параллельно с учёбой, ещё до того, как ИИ дорос до коммерческих масштабов. Начал с Python: парсеры сайтов, Telegram-боты (и другие чат-боты), скрипты автоматизации, сбор и обработка больших массивов данных. Дальше веб - сайты и админки на JavaScript и PHP, со схемами баз данных MySQL под ними.

    стек Python · JavaScript · PHP · MySQL · REST · HTML/CSS

  6. Учёба (не входит в общий опыт)

    РЭУ им. Г. В. Плеханова Россия · среднее профессиональное

    -

    Честно - это четыре года, которые я лучше бы потратил на работу. Диплом ни разу не ответил мне ни на один сложный вопрос и не помог в поиске работы (пока что). Всю нужную информацию всё равно находил и изучал сам, потому что было интересно.

Стек

то, что уже не убрать из моей памяти

Языки

  • C
  • C++ 11 → 23
  • Java
  • Python
  • TypeScript
  • JavaScript
  • PHP
  • GLSL
  • SQL
  • Bash
  • x86/x64 Assembly

C и C++ - два разных языка, и мне комфортно в обоих.

Библиотеки

  • STL
  • Boost
  • Asio
  • Crow
  • Dear ImGui
  • ICU
  • PortMidi
  • MidiFile
  • GLFW

Сборка и отладка

  • CMake
  • Make
  • Ninja
  • Gradle
  • GCC
  • Clang
  • GDB
  • Valgrind
  • x64dbg
  • IDA Pro
  • Cheat Engine
  • Wireshark
  • Git
  • Bruno

Домены

  • Системное программирование
  • Многопоточность
  • Параллелизм
  • Low-latency сервисы
  • TCP/UDP
  • REST-клиенты и серверы
  • WebAssembly
  • Кроссплатформенность
  • Десктопные GUI и CLI
  • Реалтайм-графика

Инфраструктура

  • Linux
  • Docker
  • Nginx
  • systemd
  • iptables
  • WireGuard
  • MySQL
  • Prometheus
  • Grafana
  • GitHub Actions
  • CI/CD

Проекты

штуки, которые я написал, потому что хотел, чтобы они существовали

BadwordDetector

Асинхронный REST-сервис на C++23 · многоязычная фильтрация мата

Crow поверх standalone Asio; слой запросов жёстко отделён от ядра детекции - каждое входящее поле проверяется на наличие и тип до того, как его увидит что-то дальше. Фильтры - битовая маска в uint64_t, а генератор регулярок собирается из словаря плюс таблицы похожих символов, так что leetspeak и омоглифы кириллицы и латиницы не проскакивают. Секреты берутся из переменных окружения, а не из исходников.

  • C++23
  • Crow
  • Asio
  • ICU
  • MySQL X DevAPI
  • -Wall -Werror
  • AGPL-3.0

Midi2Qwerty-plus

Настоящее пианино → клавиатура, в реальном времени

Подключаешь MIDI-пианино к машине - и оно печатает. Все 88 клавиш, с учётом силы нажатия, плюс проигрывание MIDI-файлов отдельным путём от живого опроса устройства - потому что пропущенная нота - это баг задержки, который слышно. Весь GUI - Dear ImGui, включая собственную рамку окна вместо системной, отрисованную клавиатуру и свой логгер.

  • C++
  • Dear ImGui
  • PortMidi
  • GLFW
  • async polling
  • AGPL-3.0

ChatImprover

Minecraft-мод, который на деле - платформа для аддонов. Аддоны реализуют один интерфейс, помечают его @AutoService - и ServiceLoader находит их сам, без единой строчки регистрации с моей стороны. Чтобы дотянуться до приватных внутренностей чата, понадобились Fabric-миксины. Публикуется как настоящий Maven-пакет через GitHub Packages.

  • Java
  • Fabric mixins
  • Gradle
  • CI

пример аддона · шаблон для старта

Серверные плагины

Написаны для моего же Minecraft-сервера - потому что каждый готовый вариант делал что-то одно не так, как мне нужно. Правила PVP, размеры моделей игроков, дальность прорисовки на игрока.

  • Java
  • Gradle

SimplePVP · SimplePlayerScale · SimpleViewDistance

Остальное - на GitHub

Куда расту

зарезервировано на линковке, обнулено, заполняется в рантайме

.bss - сегмент, который линкер выделяет под то, что будет существовать, но ещё пустое. Показывает мой настоящий интерес, в котором пока ноль коммерческого опыта. Лучше честно назвать пробел пробелом, чем приукрасить.

Rust

uninitialized

Учу прямо сейчас. После стольких лет ручного управления временем жизни объектов - и одного комментария в моём собственном коде, напоминающего, что r_string обязан пережить JSON, который его держит, - компилятор, задающий эти вопросы заранее, хочется освоить всерьёз, а не по верхам.

Go

uninitialized

Я писал асинхронные сервисы на C++, где половина работы - обвязка. Хочу посмотреть, как та же задача выглядит в языке, где эта обвязка и есть язык, и что за это приходится платить.

CUDA и GPU-вычисления

uninitialized

Направление, которого я хочу больше всего. Я писал GLSL-шейдеры под настоящий движок, так что GPU для меня не абстракция - но красить пиксели и планировать вычисления - разные профессии. Warps, coalescing, occupancy - то, в чём я хочу стать по-настоящему сильным.

Чего я ищу: системный / low-latency C++ поближе к железу - или GPU-команду, готовую взять человека, который читает дизассемблер ради удовольствия, но с CUDA в проде пока не работал.

Свой сервер

сопровождается мной, в рантайме, в свободное время

Одна Ubuntu-машина, которую я держу живой, потому что старый ноутбук простаивал без дела. Эта страница отдаётся с неё. На ней крутятся Nextcloud, игровые серверы, SFTP, MySQL и phpMyAdmin, за всем смотрят Grafana с Prometheus, и всё это за реверс-прокси Nginx. VPN-эндпоинты, правила фаервола, сертификаты и домены я настраивал сам.

Сразу про масштаб: это инфраструктура личного проекта, а не энтерпрайз. Один хост, мой трафик, мои ошибки. Зато я знаю, что реверс-прокси делает, а не просто какие строчки в него вставить.

edgeNginx · Let's Encrypt / CertBot · свои домены
netWireGuard · Amnezia · Hysteria · iptables
svcNextcloud · игровые серверы · SFTP · MySQL · phpMyAdmin
obsPrometheus · Grafana
ciDocker · systemd · GitHub Actions

Реверс

хобби, которое мне нравится

Я разбираю программы, чтобы узнать, как они устроены изнутри. Подключиться, найти структуру, посмотреть, как она меняется, отмотать назад до кода, который её изменил. Практически весь мой опыт в реверсе - это игры.

Начинал с модификации игрового кода: искал оффсеты и правил инструкции напрямую в ассемблере через Cheat Engine. Первой была Worms 3D, одна из последних - Dota 2; изредка реверсил и GUI-приложения. Затем писал собственные трейнеры для одиночных игр, находящие нужные адреса двумя способами - сигнатурным сканом и вычислением по оффсетам от базового адреса модуля, чтобы адреса оставались валидными между запусками и обновлениями игры. Со временем добавились деобфускация кода и анализ сетевого трафика - хорошо знаю сетевые взаимодействия клиентов с серверами.

Из опыта: memory-трейнер для Dota 2, который форсил криты, перехватывая значение типа удара на лету и переписывая его. Вот он никогда не продавался - он существовал, чтобы ответить на вопрос «где именно игра это решает, и смогу ли я использовать это?».

Иллюстрация, не рабочий патч. Самое интересное никогда не было в одном байте.

  • Статический анализ x64dbg, IDA Pro; чтение и правка x86/x64-ассемблера.
  • Динамический анализ Cheat Engine.
  • Поиск данных нахожу нужный участок кода по инструкциям, которые изменяют или читают адрес, а также поиском строк.
  • Работа с памятью процессов поиск адресов и структур сигнатурным сканом и по оффсетам от базы модуля; трейнеры, устойчивые к перезапуску и патчам.
  • Деобфускация Java - меняю поведение напрямую в байткоде; разбор обфусцированного JavaScript при анализе клиент-серверного обмена с шифрованными запросами и ответами.
  • Анализ сетевого трафика Wireshark, HTTP Debugger, NetLimiter, Chrome DevTools; разбор игрового трафика - какие данные и в каком виде идут по сети.

инструменты C · C++ · x86 Assembly · WinAPI · IDA Pro · x64dbg · Cheat Engine · Wireshark · HTTP Debugger · NetLimiter · Chrome DevTools

Мини-Игра

небольшой кликер - выделяй память пока она не закончится. (память не настоящая!)

Тут живёт маленькая интерактивная игра: кликер-аллокатор, с несколькими мини играми внутри. Ей нужен JavaScript.

Конец карты памяти

ниже только контакты и музыка
  • Alan Walker - Faded
  • TheFatRat - Fly Away
  • TheFatRat - Unity