Разработчик с 7+ годами опыта за плечами. Сейчас моё основное направление - это C/C++,
именно на нём я нашёл своё место в коммерческих проектах, но сейчас расширяю свой кругозор в сторону Rust и Go.
Люблю докапываться до сути задач, до ответа на вопрос "Почему тут сделано именно так?".
С детства люблю копаться во внутренностях различных устройств, а теперь это переросло в моё хобби - Reverse Engineering.
Веб-игры на W4 - собственном движке компании. У W4 нет редактора: ни сцены, ни
инспектора, ни drag-and-drop. Геймплей, шейдеры и тулинг пишутся кодом и собираются
в браузер через Emscripten. Это ограничение научило меня большему в C++, чем любая
работа с GUI.
50+ механик в проде
100+ легаси-багов закрыто
20+ проектов выпущено
стек C · C++ · Emscripten · GLSL · Dear ImGui · CMake · JavaScript · REST
Десктопное приложение для смет - примерно Excel, Access и Word в одной программе.
Писал логику документов: создание смет, связи между ними, автоматический пересчёт
формул и разрешение зависимостей. Делал UI-компоненты на MFC/COM и портировал часть
из них на Linux.
стек C · C++ · MFC · COM · Visual Studio · порт на Linux
Производственная практика во время учёбы. Сайт плюс админка на Laravel и схема MySQL
под ними. Здесь я впервые писал SQL-запросы, над которыми пришлось всерьёз подумать,
и впервые столкнулся с шифрованием данных.
стек PHP · Laravel · MySQL · JavaScript · HTML/CSS
#3
C/C++ разработчик, реверс-инжиниринг - фриланс
Частные заказы
Россия · удалённо
-
Там, где и остался: C и C++. Трейнеры для игр на заказ - найти значение в памяти,
захукать код, который его меняет, держать оффсеты живыми после патчей. Реверс форматов
сейвов и ассетов, бинарные патчи и DLL-моды для игр, где моддинг не был предусмотрен.
Здесь хобби-реверс превратился в оплачиваемую работу - подробнее ниже на странице.
стек C · C++ · x86 Assembly · WinAPI · Reverse Engineering · IDA Pro · x64dbg · DLL
#4
Python / веб-разработчик - фриланс
Частные заказы
Россия · удалённо
-
Заказы параллельно с учёбой, ещё до того, как ИИ дорос до коммерческих масштабов.
Начал с Python: парсеры сайтов, Telegram-боты (и другие чат-боты), скрипты автоматизации,
сбор и обработка больших массивов данных. Дальше веб - сайты и админки на JavaScript и
PHP, со схемами баз данных MySQL под ними.
Честно - это четыре года, которые я лучше бы потратил на работу. Диплом ни разу не ответил
мне ни на один сложный вопрос и не помог в поиске работы (пока что).
Всю нужную информацию всё равно находил и изучал сам, потому что было интересно.
.rodata
Стек
то, что уже не убрать из моей памяти
Языки
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
modules
Проекты
штуки, которые я написал, потому что хотел, чтобы они существовали
Асинхронный REST-сервис на C++23 · многоязычная фильтрация мата
Crow поверх standalone Asio; слой запросов жёстко отделён от ядра детекции - каждое
входящее поле проверяется на наличие и тип до того, как его увидит что-то дальше.
Фильтры - битовая маска в uint64_t, а генератор регулярок собирается из
словаря плюс таблицы похожих символов, так что leetspeak и омоглифы кириллицы
и латиницы не проскакивают. Секреты берутся из переменных окружения, а не из исходников.
Настоящее пианино → клавиатура, в реальном времени
Подключаешь MIDI-пианино к машине - и оно печатает. Все 88 клавиш, с учётом силы
нажатия, плюс проигрывание MIDI-файлов отдельным путём от живого опроса устройства -
потому что пропущенная нота - это баг задержки, который слышно. Весь GUI - Dear ImGui,
включая собственную рамку окна вместо системной, отрисованную клавиатуру и свой логгер.
Minecraft-мод, который на деле - платформа для аддонов. Аддоны реализуют один интерфейс,
помечают его @AutoService - и ServiceLoader находит их сам, без единой
строчки регистрации с моей стороны. Чтобы дотянуться до приватных внутренностей чата,
понадобились Fabric-миксины. Публикуется как настоящий Maven-пакет через GitHub Packages.
Написаны для моего же Minecraft-сервера - потому что каждый готовый вариант делал
что-то одно не так, как мне нужно. Правила PVP, размеры моделей игроков, дальность прорисовки
на игрока.
зарезервировано на линковке, обнулено, заполняется в рантайме
.bss - сегмент, который линкер выделяет под то, что будет существовать, но
ещё пустое. Показывает мой настоящий интерес, в котором пока ноль коммерческого опыта.
Лучше честно назвать пробел пробелом, чем приукрасить.
Rust
uninitialized
Учу прямо сейчас. После стольких лет ручного управления временем жизни объектов - и
одного комментария в моём собственном коде, напоминающего, что r_string
обязан пережить JSON, который его держит, - компилятор, задающий эти вопросы заранее,
хочется освоить всерьёз, а не по верхам.
00 00 00 00 00 00 00 00
Go
uninitialized
Я писал асинхронные сервисы на C++, где половина работы - обвязка. Хочу посмотреть,
как та же задача выглядит в языке, где эта обвязка и есть язык, и что за это приходится
платить.
00 00 00 00 00 00 00 00
CUDA и GPU-вычисления
uninitialized
Направление, которого я хочу больше всего. Я писал GLSL-шейдеры под настоящий движок,
так что GPU для меня не абстракция - но красить пиксели и планировать вычисления - разные
профессии. Warps, coalescing, occupancy - то, в чём я хочу стать по-настоящему сильным.
00 00 00 00 00 00 00 00
Чего я ищу: системный / low-latency C++ поближе к железу - или GPU-команду, готовую
взять человека, который читает дизассемблер ради удовольствия, но с CUDA в проде пока
не работал.
[heap]
Свой сервер
сопровождается мной, в рантайме, в свободное время
Одна 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
[anon] rwx
Реверс
хобби, которое мне нравится
Я разбираю программы, чтобы узнать, как они устроены изнутри. Подключиться, найти структуру,
посмотреть, как она меняется, отмотать назад до кода, который её изменил. Практически весь
мой опыт в реверсе - это игры.
Начинал с модификации игрового кода: искал оффсеты и правил инструкции напрямую в
ассемблере через 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
[sbrk]
Мини-Игра
небольшой кликер - выделяй память пока она не закончится. (память не настоящая!)
Тут живёт маленькая интерактивная игра: кликер-аллокатор, с несколькими мини играми внутри. Ей нужен JavaScript.