Меня зовут Вячеслав. Для простоты можно Ви.
Решаю судоку перманентным маркером, слушаю синтвейв, починяю примус и участвую в CTF-соревнованиях.
Я – IT-энтузиаст с широким набором языков, инструментов и реализованных проектов за плечами. В сфере IT меня привлекает творческая составляющая – как писатель выражает свои идеи через слова, я выражаю их в виде команд вычислительному устройству.
Получил степень бакалавра в РГПУ им. А. И. Герцена по направлению «Информационные системы и технологии» (2018-2022). Связаться со мной можно, кликнув любую из кнопочек соцсетей выше, а я продолжу свой нарратив.
Мой профиль на CodeWars:
Мой профиль на HackTheBox:
-
🔓 Unblocker: задумывавшийся изначально как приложение для рендера веб-страниц в PDF-формат, был реорганизован для обеспечения read-only доступа к заблокированным ресурсам. Может конвертировать magnet-ссылки в torrent-файлы, выступать в качестве прокси-сервера для скачивания файлов по прямым ссылкам. И, конечно же, рендерить страницы в PDF-формат. Регулярно набирал 1000+ часов аптайма на Heroku в месяц до того, как платформа убрала Free Tier.
-
📒 DnevnikClient: альтернатива официальному клиенту dnevnik.ru, которая разрабатывалась мной в школьные годы и принесла мне победу на районном конкурсе IT-проектов. PWA-приложение, поддерживающее работу в офлайн-режиме. Лёгкое и быстрое, написано на фреймворке Vue.js.
-
💡 AbitOnline: проект с хакатона "Цифровой Прорыв" в номинации "Государственное управление". Электронная приёмная комиссия. Тоже реализован на Vue.js, на бекэнде – Zeit Micro.
-
🔎 MimeDetect: эксперимент по написанию нативного Node-модуля на языке Rust с обёрткой в виде Electron.js и использованию Blocs для вёрстки UI. Приложение идентифицирует формат передаваемых ему файлов по "магическим байтам", а если это сделать не удаётся – сопоставляет расширение файла со внутренней базой данных.
-
📄 TextReader: тоже Electron.js приложение. Позволяет читать большие текстовые файлы по кусочкам в 1000 байт. Так, например, можно заглянуть в файл, не загружая его в память полностью.
-
⌨️ MathNote: и ещё одно Electron.js приложение. Позволяет делать заметки в формате Markdown с поддержкой LaTeX выражений. Можно сохранять часто используемые выражения в виде сокращений, которые при использовании будут раскрываться приложением при отображении заметки.
-
⚙️ Channel4: форк библиотеки, реализующей CSP для выполнения асинхронных задач в простейшем виде. Провёл рефакторинг и сделал пару фиксов, касающихся универсальности этого решения.
-
📥 VK-Audio-Downloader: приложение, которое "рулило" headless-браузером для извлечения аудиотеки со страницы в ВК (пользователя или сообщества), пока последний не обфусцировал доступ к аудио ещё больше.
Занимательный факт: изначально оно было реализовано в качестве плагина для MITMProxy на языке Python. Ветка с кодом осталась в исторических целях.
-
💾 Foxford Downloader: magnum opus, начало моей истории. Ныне представляет чисто историческую ценность. Титанический комбайн для сохранения материалов курсов с сайта foxford.ru, который поддерживался мной в одиночку. Умел скачивать видеолекции различными способами, которые активно исправлялись командой Нетологии, а также "рулил" headless-браузером для сохранения домашних заданий с ответами на них и лекциями в текстовом формате.
-
📡 UpDown: программа для мониторинга доступности веб-сайтов. Создаёт уведомление, когда сайт падает или возвращается в онлайн. Поле экспериментов с различными шаблонами; в качестве базы данных используется SQLite3.
-
☎️ gRPC-AddressBook: программа "Контакты", или же "Адресная книга". Учился использовать gRPC в качестве альтернативы REST.
Этому языку я с нуля учился на платформе JetBrains Academy (он же Hyperskill). За месяц (вплоть до истечения пробного периода) сумел выполнить два проекта наивысшего уровня сложности. Вот они:
-
📬 WebQuizEngine: полноценный бекэнд приложения для создания и проведения опросов, написанный при помощи Spring Boot. Система сборки – Maven. В качестве базы данных используется H2. Есть система авторизации и валидация данных.
-
🔗 Blockchain: упрощённая модель блокчейна с транзакциями, ботами и сервисами. Многопоточность, сериализация данных и многое другое. Система сборки – Gradle.
-
📝 TextEditor: простенький редактор, сделанный при помощи Swing. "Читатель" есть, а "редактора" не было. Я это исправил 😊
-
📲 MediaServer: приложение, позволяющее поделиться содержимым папки с мультимедиа в локальной сети. Можно дать кому-нибудь послушать свою многотонную аудиотеку или посмотреть смешные видосики, которые ты кропотливо сохранял на телефоне.
-
📷 Scanner: приложение-сканер, занимающееся оцифровкой ч/б документов и фискальных чеков. Осуществляет поиск документов на фотографии, нормализацию их ориентации и выравнивание цветовых параметров для получения изображения с очень высоким разрешением. Бекэнд написан на Python (использует OpenCV), а фронтэнд – на Dart.
-
📤 GetItUploaded: быстрый и минималистичный загрузчик, позволяющий создать одноразовую ссылку на файл и поделиться ей. Файл можно выбрать как непосредственно в приложении, так и при помощи функции "поделиться" в вашем любимом файловом менеджере или любом другом приложении. Интерфейс нарисован в Sketch, а код для него автоматически сгенерирован в Supernova Studio.
-
✉️ FlutterSMSApp: приложение для доступа к СМС в режиме "только чтение", чтобы случайно не отправлять ответы на тарифах, в которые не входят бесплатные сообщения.
-
⚙️ JoystickNavDemo: эксперимент, демонстрирующий кастомное переключение карточек с использованием внешнего управляющего элемента. Может быть использован в качестве каркаса для приложения.
-
🧬 FASTAUtils: веб-приложение, написанное по просьбе знакомого генного инженера. Принимает на вход цепочку ДНК в формате FASTA и разбивает её на более мелкие фрагменты с пересечениями. Учитывает максимальную допустимую длину фрагментов, а также температуру плавления и размер их пересечений.
-
🖥 Yanes: виртуальная машина, эмулирующая процессор 6502. Есть адресное пространство, дисплей, возможность ввода с клавиатуры и ассемблер. Дипломная работа.
-
🔧 squidclient: утилита, написанная мной в процессе прохождения виртуальной машины Unbalanced на CTF-платформе HackTheBox. Под MacOS её не было, я сделал. Нужна для осуществления запросов к кэш-менеджеру Squid.
-
🐍 pyenv-py: лаунчер для pyenv-win – менеджера версий Python, позволяющего устанавливать и использовать несколько версий Python одновременно на одной системе. Запускает различные версии Python из списка установленных без необходимости переключаться на них.
-
Попробовал Haskell на вкус. Вот, например, программы для построения таблиц истинности, конструирования полиномов Жегалкина и поиска отношений между множествами: https://github.com/limitedeternity/some-gists/tree/master/RelationalAlgebra
-
Прошёл введение в язык Си: https://github.com/limitedeternity/ProgTech-Labs
-
Реализовал различные алгоритмы кодирования, преобразования, сжатия (LZW) и корректирования ошибок (алгоритм Хэмминга) на С++: https://github.com/limitedeternity/TIPS-Labs
-
Прошёл введение в MATLAB: https://github.com/limitedeternity/Model-Labs
-
Научился конструировать доказательства теорем о свойствах программ и эквивалентности функций на языке Coq: https://github.com/limitedeternity/PrPr-Labs.
Вот, например, доказательство самостоятельно выдвинутого fold-свойства: https://gist.github.com/limitedeternity/65d6de67a5ecc25b56e0eb3f08263855 -
Научился работать с Transact-SQL и языком SQL в целом: https://github.com/limitedeternity/SQL-Labs
-
Понял, как программировать на языке Prolog (и зачем он вообще): https://github.com/limitedeternity/PrKnow-Labs
-
Получил толчок к изучению языка ассемблера. Вот, например, написанный мной промежуточный загрузчик для QEMU: https://github.com/limitedeternity/qemu-bootloader.
А в остальном, знания ассемблера я, чаще всего, использую на CTF-заданиях раздела "бинарные уязвимости". Это вообще мой любимый раздел 🙂 -
Научился осуществлять поддержку других open-source проектов: https://github.com/lex-js/lex-js.
Переписал проект сначала на Node.js, а затем на Python, настроил CI-среду с автоматической сборкой проекта в исполняемый PE-файл под две разные архитектуры.
-
"Не Mr. Robot, но...": добраться с ранга Noob до Elite Hacker на HackTheBox за месяц, по пути захватив пол сотни машин.
Использованное "снаряжение" и отчёты тут: https://github.com/limitedeternity/HackTheBox -
"А что, так можно было?": расширить знания по эксплуатации Linux-систем, используя Nebula.
-
"process is executing new program: /bin/dash": расширить знания по эксплуатации бинарных уязвимостей, используя Phoenix.
-
"Приключение на 20 минут": пройти dostackbufferoverflowgood за 20 минут, в процессе открыв для себя пару-тройку "тайных" знаний.
-
"Индиана Джонс": выполнить все задания ROPEmporium для архитектур i386 и amd64.
Эксплойты тут: https://github.com/limitedeternity/ROPEmporium -
"Одного байта хватит": пройти курс на Udemy по эксплуатации "выделителей памяти" (malloc).
Эксплойты тут: https://github.com/limitedeternity/HeapLAB