Автоматизация реверс‑инжиниринга через локальную LLM

Облачные LLM сливают IOC в общие базы и цензурят описание опасных модулей. Реализуем анализатор вредоносного программного обеспечения с помощью локальной LLM, Ghidra и Neo4j.

Высокоуровневый язык программирования

Облачные LLM сливают IOC в общие базы и цензурят описание опасных модулей. Реализуем анализатор вредоносного программного обеспечения с помощью локальной LLM, Ghidra и Neo4j.

Мы попытались автоматизировать первую линию SOC. Захотелось объединить гибкость ЛЛМ и надежность сигнатурных движков. Поместилось все это в один асинхронный граф.
Под капотом гибридный RAG (Vector + BM25), zero‑cost фича для экономии токенов и параллельный сигнатурный анализ.
Статья об архитектуре, а не готовом решении.
Мы тестировали пайплайн на логах кибербезопасности, но концепция получилась модульной и универсальной. Логи лишь выступают как пример для демонстрации. Представленный граф можно адаптировать под разбор отзывов, фильтрацию спама или модерацию внутренних документов компании.

MCP-сервер отвечает Connected. Инструменты работают: бот сам присылает мне сообщения. Мои сообщения до бота доходят, я вижу их в очереди Telegram. А в сессию Claude Code они не попадают. Ни ошибки, ни предупреждения.
Полтора часа я искал не там.
Меня зовут Сол ГудКод, и обычно я вытаскиваю людей из ситуаций, в которые они сами себя загнали, но на этот раз клиентом оказался я сам: мне нужен был бот, которому можно наговорить задачу голосом из дороги, чтобы он сделал её на моей машине и в моих проектах. У Anthropic такое есть официально, и именно поэтому история вышла длиннее, чем я рассчитывал.
Внутри: как отличить эту тишину от своей ошибки за минуту и чем я заменил официальный канал. Плюс восемь мест, где я наступил на грабли Windows. В том числе на те, куда уже наступал в этом же проекте. И на ту, где Claude вежливо попросил меня договорить мысль.

Скрипт на python-evtx отработал без единой ошибки, с кодом возврата 0, и вернул 94 записи. В файле их было 2309, и вся атака — от создания админской учётки до запуска шифровальщика — оказалась в потерянных 96%. Разбираемся, почему два байта в заголовке .evtx нельзя принимать на веру и почему проверка непрерывности EventRecordID в этом случае отвечает «пропусков нет».

Хотел понять, потянет ли маленькая локальная модель сопроводительные письма или без облака никак. Оказалось, главный рычаг не модель, а промпт: переписал инструкцию, и отправляемость прыгнула с 0% до 88%, а рекрутёр вслепую принял 6 писем-генераций из 8 за живые.

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

Я собираю афишу города в одну карту из пяти источников. Два из них — Яндекс.Афиша и afisha.ru — собирать себя не хотят. И режут не так, как ждешь: ни логина, ни капчи на входе, ни «подтвердите, что вы не робот». Мой requests.get(...) ловит 403 — даже когда заголовки скопированы из Chrome один в один.
Первая мысль была дурацкая: где-то не хватает куки или очередного sec-ch-ua. Оказалось — проблема раньше. К тому моменту, когда сервер читает мой браузерный User-Agent, он уже успел посмотреть, как именно клиент открыл защищенное соединение. Питоновский клиент палится ровно тем, как он здоровается.

Python — один из известнейших мировых языков программирования. Его создатель — Гвидо ван Россум из Нидерландов. О том, как был придуман язык, и кто патентует разработки, связанные ним, — об этом в нашей статье.

Современные AI-агенты строятся достаточно разнообразно. Где-то берут готовые приложения, которые выросли в полноценные фреймворки с преднастроенными агентами. Где-то провайдеры предлагают настройку из готовых блоков через UI на веб-портале. Где-то хочется написать своё: дешевле, в своём контуре или просто иначе. Один из популярных фреймворков для этого - LangChain / LangGraph: удобные обёртки, пайплайны, графы, интеграции под типичные куски агента.
В большинстве случаев агенты строятся вокруг базового цикла ReAct (Reasoning + Acting - рассуждение и действие): модель рассуждает, при необходимости вызывает инструмент (tool), смотрит результат и снова думает - пока не отдаст ответ. На короткой задаче этого хватает. На длинной - агент сам накапливает контекст: историю, результаты инструментов, планы, файлы. Вопрос смещается от «как написать промпт» к «как управлять всей этой средой». Этим занимается контекст-инжиниринг (context engineering). Глубокие агенты (Deep Agents) - готовая реализация этой идеи в экосистеме LangChain: не новый тип модели, а заранее собранная рабочая среда вокруг обычного агента (в API - create_deep_agent поверх create_agent).
В этой статье хочу разобрать, что стоит за словом глубокий (deep): какую проблему решает такая рабочая среда, из каких механизмов она собрана, какую цену за них приходится платить и когда этот «тяжёлый рюкзак» действительно стоит брать.

Привет, Хабр! Меня зовут Владимир, и это пятая часть цикла статей по написанию и обучению небольшой decoder-only LLM с нуля. В прошлых частях мы собрали и обучили модель LinguaLaboratoriumMechanicus — миниатюрную GPT-like LLM во вселенной Warhammer 40K. В этой части упакуем её в формат Hugging Face: сделаем конфиг и обёртку под transformers, сохраним и зальём модель на Hub.

Я разработал плагин, чтобы помочь разработчикам Telegram ботов.
Он работает поверх aiogram – не нужно будет переписывать уже имеющийся код.
И если ты хоть раз писал ботов, эта статья сэкономит тебе много времени и нервов.
Каждый раз, когда заходит разговор "что дешевле — поднять у себя открытую модель или платить за API", его почему-то ведут в ценах за токен. И почти всегда это спор не в тех единицах.
Во-первых, self-hosting — это постоянные затраты, а API — переменные. Значит, ответ зависит не от цены за токен, а от того, насколько плотно вы это железо загрузите. Во-вторых, токены вообще никто не покупает как цель. Покупают решённые задачи. А модели очень по-разному тратят токены на одну и ту же задачу.
И вот что изменилось за последний год: открытые модели догнали топ лидербордов. На SWE-bench Verified DeepSeek V4 Pro берёт 80,6 %, Kimi K3 — 93,4 %, вплотную к лучшим закрытым. То есть во многих сегментах выбор «своё железо vs API» перестал быть выбором по качеству — он стал чисто экономически/операционным. Ниже это то, как я предлагаю его считать.

AI-агенты отлично решают локальные задачи, но часто теряют связи между частями большой кодовой базы. Из-за этого изменение одной функции может незаметно сломать frontend, backend-роут, сервис, repository, background task или тест.
В статье разбирается CodeSlicer — локальный CLI, MCP-сервер и визуальный анализатор, который строит проверяемый граф влияния проекта. Он связывает функции, классы, DI-провайдеры, HTTP-endpoint’ы, frontend-компоненты и тесты, сохраняя evidence chain, provenance, confidence и причины каждой связи.
Показывается полный pipeline: inventory, extraction, semantic resolution, support packs, unknown regions, mutation testing, runtime observation и impact analysis. Отдельно разобрано, почему система не должна превращать предположение AI в подтверждённое ребро.
На размеченных Python-сценариях протестированы 21 тестовый сценарий, 29 mutation-сценариев, 20 обязательных semantic edges, 0 false positive и 0 false negative. Для TypeScript и frontend-backend bridge проверены 12 сценариев, 15 мутаций и 4 cross-language цепочки с endpoint precision 1.0.
Также рассматриваются интеграции с AI-агентами через CLI, MCP и skills, отличие CodeSlicer от обычных графов кода и дальнейшее развитие проверенного registry библиотек

Можно ли построить демона — наблюдателя, который знает состояние системы настолько точно, что будущее для него так же очевидно, как прошлое?

Отмена задачи кажется простой, пока сервис не зависает при остановке, таймаут не оставляет запрос работать в фоне, а CancelledError исчезает внутри обработчика исключений. Разберём, как устроена кооперативная отмена в asyncio, где ставить точки ожидания и как использовать TaskGroup, timeout и shield, чтобы задачи завершались предсказуемо.

Нашёл модель в 8 раз дешевле. Она начала писать иероглифы в русских новостях
У меня новостной бот, и каждая новость в нём проходит через LLM: категория, перевод, тон, разбор. Выходит около 936 вызовов в сутки, и в какой-то момент мне захотелось платить за это меньше.
Я перебрал все бесплатные модели OpenRouter на живых промптах, нашёл платную в 8 раз дешевле текущей, обрадовался и выкатил в прод.
Через час в ленте появился заголовок: «Как не,让智能手机 перегревать: советы в жару».

Задача формулировалась в одно предложение: робот должен сам звонить людям в WhatsApp, проигрывать голосовое приветствие, записывать ответ и присылать оператору расшифровку с вердиктом «да / нет / надо посмотреть руками».
Проблема в том, что официально это невозможно. У WhatsApp нет API для голосовых роботов: Business API умеет шаблонные сообщения, провайдеры на рынке умеют текстовые рассылки, голосовые звонки закрыты наглухо. Готового решения не существует ни за деньги, ни за большие деньги.
Зато существует официальное десктопное приложение, которое звонить умеет. И его можно водить за руку.
Это рассказ о том, что из этого вышло: с чего начиналось, какие подходы умерли по дороге, четыре слоя автоматизации — от CDP до виртуальных аудиокабелей — и один урок про производительность, который перечеркнул половину архитектуры уже на живых звонках.
Сразу оговорюсь: по отношению к правилам платформы это серая зона, и я не предлагаю это повторять. Мне здесь интересна чистая инженерия — как автоматизируется то, что автоматизировать не предполагалось. Ограничения и риски честно разберу в конце.
Кода будет много. Всё интересное в этом проекте живёт именно в деталях.

Локально тесты проходят стабильно, а в CI начинают падать в случайных местах — знакомая картина даже для проектов на Playwright.
В статье разберём, где заканчивается встроенное автоожидание, какие привычные конструкции возвращают гонки и как выстроить тесты так, чтобы результат меньше зависел от скорости окружения и состояния данных.
Несколько месяцев пилил pet-проект, который зашёл дальше, чем планировал: файловый ASGI-фреймворк, где дерево папок — это и есть таблица роутов. Сегодня вышла версия 1.0 — с адверсариальным security-аудитом (нашёл у себя pickle RCE и CSWSH), 2329 тестами и нативным async на PostgreSQL. Рассказываю, что внутри и что было больнее всего сделать правильно.

Когда в зависимости обнаруживают уязвимость, очевидное решение — поднять её минимально допустимую версию во всех библиотеках, которые ее используют. Тогда пакетный менеджер не подтянет уязвимую версию даже при новой установке. Сет Ларсон из Python Software Foundation предлагает не делать этого автоматически. По его мнению метаданные библиотеки должны описывать только совместимость, а контроль безопасности сборки оставаться на стороне приложения.
Колонка Сета вызвала спор в Python-сообществе: одни поддержали разделение ответственности между библиотекой и приложением, другие заметили, что безопасность тоже может входить в условия поддержки библиотеки. Мы в CodeScoring подготовили перевод колонки, разбор обеих позиций и наш взгляд на этот вопрос.