YouMind
Увійти

Як реверс-інжиніринг будь-чого за допомогою Opus 5.5 (повний курс)

@0xMovez
АНГЛІЙСЬКА12 жовт. 2026 р.
171K
271
38
8
557

Коротко

У цьому посібнику детально описано 11-кроковий робочий процес використання Claude Opus 5.5 та набору інструментів REA для реверс-інжинірингу бінарних файлів. Він охоплює встановлення, аналіз, обробку обфускації та виконання легальних реконструкцій у чистій кімнаті.

Більшість людей, які намагаються реверс-інжинірити бінарник, відкривають його в hex-редакторі, гортають хвилин двадцять і здаються.

Вони не знають, яким інструментом завантажити файл. Не знають, який промпт витягне з нього логіку. Не знають, як перетворити суцільну стіну асемблера на щось, що реально можна відтворити.

Цей курс із 11 кроків перетворить Claude Opus 5.5 на машину для створення будь-чого з відкритим кодом.

Підписуйтесь на мій Substack, щоб отримувати свіжу AI-альфу:

movez.substack.com

Реверс-інжиніринг — це не про злом. Це про те, щоб зрозуміти річ настільки добре, аби побудувати власну.

7 жовтня 2026 року Амджад Масад (Amjad Masad), CEO Replit, опублікував один рядок:

https://x.com/amasad/status/2107671204639465961

під ним розробник @morluto відповів доказами: набором інструментів, які дозволяють агентам керувати Hopper та Ghidra й заходити дуже далеко.

Цей проєкт — REA, і він набрав 110 000 зірок на GitHub за лічені дні.

Movez - inline image

https://github.com/morluto/rea

Це не просто хайп. Того ж тижня open-source проєкт WordCraft випустив clean-room перебудову Microsoft та Adobe на чистому Rust:

Movez - inline image

https://getartcraft.com/apps

Його створили, спостерігаючи за поведінкою Word та Adobe й читаючи публічні специфікації форматів файлів, жодного разу не заглядаючи в їхній код.

Movez - inline image

Цей курс показує весь шлях від запечатаного бінарника до такої перебудови, де Opus 5.5 виконує всю роботу з читання.

01. Рушій - як агент читає бінарник

Opus 5.5 не може самостійно запустити дизасемблер. Він читає текст і пише текст.

Реверс-інжиніринг за допомогою агента працює тому, що між моделлю та бінарником стоїть інструмент: він завантажує файл у реальний рушій дизасемблювання, надає результати у вигляді функцій, які можна викликати, і дозволяє моделі ставити запитання.

Movez - inline image

Цей інструмент — REA, а під капотом у нього Hopper, Ghidra або IDA.

Цикл простий і повторюється: модель просить REA дослідити ціль, REA повертає результати з точними доказами (адреси, байти, псевдокод, місця викликів), а модель використовує ці дані, щоб поставити наступне запитання або написати й протестувати реалізацію.

Movez - inline image

Усе працює локально на вашій машині. Нічого не завантажується, окрім результатів, які потрібні моделі для аналізу, і кожен висновок позначається як спостереження, умовивід або невідоме.

**

02. Встановлення - rea-agents плюс один дизасемблер

Налаштування реєструє MCP-сервер REA у вашому агенті та встановлює відповідні інструкції робочого процесу.

Одна команда робить усю роботу: вона показує кожну зміну перед записом і створює резервну копію того, що змінює.

Movez - inline image

Дизасемблер ви обираєте самі: Hopper на macOS — найпростіший шлях, Ghidra безкоштовна і кросплатформна, IDA — якщо вона у вас уже є.

python
1# 1. Зареєструйте REA у своєму агенті (Claude Code, Codex, Cursor, Gemini CLI...)
2npx rea-agents setup # показує заплановані зміни, запитує перед записом
3
4# 2. Провайдер глибокого аналізу. Hopper працює найзручніше на macOS;
5# налаштування може встановити його після вашого підтвердження. Ghidra та IDA потрібно встановлювати самостійно.
6# 3. Встановіть CLI rea для роботи в терміналі та скриптів
7npm install --global rea-agents
8rea --help
9
10# 4. Перезапустіть агента, потім переконайтеся, що інструменти активні
11claude
12> /mcp
13 rea: connected
14 open_binary, binary_overview, analyze_function, decompile,
15 list_procedures, search, xrefs, trace, inspect_artifact,
16 analyze_javascript_application, inspect_managed_artifact ...

Вимоги скромні: Node.js 22 або новіша версія та npm. Для нативного аналізу потрібен один із трьох рушіїв; статична перевірка JavaScript і .NET не потребує жодного. Тримайте REA оновленою, бо релізи часто містять виправлення.

python
1# Правила реверс-інжинірингу ( CLAUDE.MD )
2
3## Повноваження
4- Аналізуйте лише ті цілі, якими ви володієте або маєте дозвіл на дослідження. Озвучте підставу один раз.
5- Кожне твердження позначайте: спостереження (побачив), умовивід (вивів логічно) або невідоме.
6- Наводьте докази: адресу, байти, псевдокод або місце виклику. Жодних тверджень без джерел.
7
8## Робочий процес
9- Починайте з найменшого огляду, а не повного дампу. Розширюйте лише там, де є конкретний пробіл.
10- Використовуйте відкриту сесію повторно; ніколи не запускайте ідентичний аналіз заново.
11- Відокремлюйте статичні факти від рантайм-фактів. Ніколи не робіть висновків про виконання на основі статичного читання.
12
13## Реконструкція
14- Будуйте на основі ПОВЕДІНКИ та публічних специфікацій, ніколи на основі скопійованого коду чи ресурсів.
15- Ведіть реєстр зобов'язань: кожна відновлена поведінка потребує успішного тесту, перш ніж вважатися "готовою".

Opus 5.5 має п'ять рівнів зусиль: low, medium, high, xhigh та max. Використовуйте:

  • Medium, щоб досліджувати та орієнтуватися
  • High, щоб анотувати звичайні функції
  • Max для обфускованого коду та всього, де багато математики з вказівниками.

Рівень зусиль — це головний регулятор якості в усьому цьому курсі.

03. Маршрутизатор - 20 типів цілей, по одному інструменту на кожну

Перша помилка новачків — хапатися за дизасемблер, коли ціль є Electron-додатком, JavaScript якого лежить прямо на поверхні.

REA маршрутизує ціль до правильного інструменту, і ваш перший промпт має робити те саме. Назвіть файл, назвіть фічу, і дозвольте агенту обрати стартовий інструмент.

Movez - inline image
python
1Я хочу зрозуміти, як працює [ФІЧА] у [ДОДАТКУ], який знаходиться за шляхом [АБСОЛЮТНИЙ ШЛЯХ].
2
3Спочатку скажи мені, що це за тип цілі (нативний, Electron/JS, .NET, Go, APK, WASM)
4і обери правильний інструмент REA, щоб її відкрити. Поки що не починай глибокий аналіз.
5
6Потім дай мені карту в один абзац: на чому побудований додаток, якого він розміру і
7де б ти шукав насамперед [ФІЧУ]. Тримай спостереження, умовиводи та невідоме
8окремо і наводь докази для будь-яких своїх тверджень.

Якщо спрямувати REA на Electron-додаток, вона за секунди поверне модулі, імпорти та межі IPC без жодного дизасемблера.

Якщо спрямувати її на нативний Mach-O або ELF, вона відкриє базу даних Hopper і дасть вам складніший, але глибший нативний шлях. Розуміння того, де ви перебуваєте, економить години.

https://x.com/_vmlops/status/2106690704244420687

04. Розвідка - огляд, рядки та граф викликів

Поки що не відкривайте жодного коду. Спершу попросіть REA скласти карту всього файлу. Одна команда покаже, на якій архітектурі він працює, скільки функцій містить і який читабельний текст у ньому захований.

Цей текст — ваша найшвидша підказка: веб-адреси, повідомлення про помилки та назви фіч розкажуть, що робить додаток, ще до того, як ви прочитаєте хоча б рядок коду.

python
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }
2rea.binary_overview {}
3 arch: arm64
4 functions: 1,284 identified
5 segments: __TEXT __DATA __LINKEDIT
6 entry: _main @ 0x1000051c0
7
8rea.search { query: "http" } # рядки + посилання в коді
9 0x10004a2c0 "https://api.target.app/v3/sync"
10 0x10004a300 "Authorization: Bearer "
11 0x10004a330 "offline cache miss, falling back"
12
13rea.xrefs { address: "0x100012ab0" } # хто це викликає?
14 147 references -> core config loader, called everywhere

REA також рахує, скільки разів викликається кожна функція (ця кількість називається перехресними посиланнями, або xrefs).

Movez - inline image

Функція, яку викликають 147 разів, — це серце додатка, і вона заслуговує на максимум ваших зусиль. Та, що викликається двічі, — дрібний помічник, який можна ігнорувати, поки він не стане важливим. Починайте з верхівки цього списку і рухайтеся вниз.

05. Декомпіляція - одна функція у псевдокод

Тепер оберіть одну з тих "зайнятих" функцій і перетворіть її на щось читабельне. Декомпілятор бере необроблені машинні інструкції та переписує їх у код, близький до C.

Виглядає це грубо: імена на кшталт var_28, заплутана логіка, приведення типів скрізь. Але ви можете це прочитати, а читабельність — це все, що потрібно Opus 5.5.

Запускайте з командного рядка, щоб зберегти результат, або прямо з чату.

python
1# Декомпілювати одну функцію за адресою у форматі JSON, який можна передати через pipe або зберегти
2rea decompile /Applications/Target.app/.../Target 0x100012ab0 \
3 --provider hopper --json > fn_config_loader.json
4
5# Або шукати функцію за назвою та слідувати за посиланнями
6rea function /path/to/Target parseConfig --provider hopper --json
7rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json
8rea trace /path/to/Target "sync" --provider hopper --json
python
1// 0x100012ab0 xrefs: 147
2void sub_100012ab0(void* arg0) {
3 void* var_20 = objc_msgSend(cls_NSJSONSerialization,
4 sel_JSONObjectWithData_options_error, arg0, 0x0, 0x0);
5 if (var_20 != 0x0) {
6 void* var_28 = objc_msgSend(var_20, sel_objectForKey, @"endpoints");
7 void* var_30 = objc_msgSend(var_20, sel_objectForKey, @"auth_mode");
8 void* var_38 = objc_msgSend(var_20, sel_objectForKey, @"retry_count");
9 objc_msgSend(g_sharedConfig, sel_setEndpoints, var_28);
10 objc_msgSend(g_sharedConfig, sel_setAuthMode, var_30);
11 objc_msgSend(g_sharedConfig, sel_setRetryCount,
12 objc_msgSend(var_38, sel_intValue));
13 }
14}

Власне демо REA відстежує звуковий виклик у старій грі DX-Ball аж до допоміжної функції, яка визначає баланс звуку між лівим і правим каналами, а потім перетворює напівготовий псевдокод на C.

Movez - inline image

Результат проходить усі 3 205 оригінальних тестів і точно відтворює кожен із 63 скомпільованих байтів.

Movez - inline image

Повний розбір на rea.tools/showcase.

06. Анотація - нехай Opus назве кожну змінну

Цей сирий код — лише половина справи. Тепер передайте його Opus 5.5 і попросіть пояснити та прибрати зайве.

Модель перейменує незрозумілі змінні на осмислені, одним реченням опише призначення функції, розпізнає патерн і навіть знайде баги, які залишили автори оригінального додатка.

Вставте цей промпт у Claude:

python
1Ось декомпільований псевдокод функції, яка має 147 перехресних посилань.
2
3Для цієї функції:
41. Перейменуй кожну змінну на осмислену назву, виходячи з того, як вона використовується.
52. Опиши її призначення одним реченням.
63. Перерахуй структури даних, які вона читає та записує.
74. Назви патерн (синглтон, фабрика, машина станів, спостерігач...).
85. Перепиши це як чистий, ідіоматичний Swift (або мову, на яку вказують
9 угоди про виклики) з doc-коментарями.
106. Познач відсутню обробку помилок, валідацію вхідних даних або перевірки безпеки.
11
12Подумай над цим із зусиллям xhigh, перш ніж відповідати: проаналізуй, чим є кожне
13значення, перш ніж фіксувати назви. Позначай усе, в чому не впевнений.
14
15[вставте псевдокод]

Декомпіляція показує, що робить код. Opus 5.5 пояснює, чому, і дає назви для його відтворення.

https://x.com/0x0SojalSec/status/2108389060192706674

https://x.com/0x0SojalSec/status/2108031166502896035

Не кожній цілі потрібен дизасемблер. Демо REA з Notion знаходить фічу буфера обміну в JavaScript додатка, простежує її через шари Electron до головного процесу і показує, як саме будується розширений буфер обміну — повний трейс без жодного рядка асемблера. Дивіться

07. Обфускація - бенчмарк Tigress

Деякі додатки створені так, щоб протистояти саме тому, що ви робите. Їхній код навмисно заплутаний: логіку перемішано, текст зашифровано, додано фальшиві гілки, щоб марнувати ваш час.

Це називається обфускацією, і це єдине місце, де буксує навіть найкраща модель. Elastic Security Labs виміряли це, спрямувавши Claude Opus на обфускатор Tigress у 20 завданнях. Запам'ятайте ці цифри.

Movez - inline image

У цих цифрах криються два практичні уроки.

  • По-перше, невдала спроба коштує приблизно вдвічі дорожче за успішну, бо модель намагається все наполегливіше, перш ніж здатися. Тому встановіть ліміт витрат на одну функцію і зупиняйтеся рано.
  • По-друге, вичищайте сміття з декомпільованого коду перед відправкою (безкоштовний інструмент Caveman прибирає близько 75% його), щоб модель витрачала увагу на реальну логіку, а не на воду.

П'ять прийомів, з якими ви реально зіткнетеся, і як кожен із них виглядає при відкритті коду:

Movez - inline image
python
1Ця функція виглядає обфускованою. Працюй із максимальним зусиллям (max).
2
31. Визнач використані техніки (сплощення потоку керування, непрозорі предикати,
4 мертвий код, шифрування рядків, розбиття функцій) і вкажи, де саме кожна з них
5 проявляється в цьому коді.
62. Усунь їх: видали мертві гілки, обчисли непрозорі предикати, розплутай
7 диспетчеризацію, розшифруй вбудовані рядки, якщо ключ можна відновити.
83. Покажи чисту функцію, що залишилася.
94. Оціни свою впевненість від 1 до 10. Якщо нижче 6, скажи точно, які частини викликають сумніви
10 і який сусідній контекст допоміг би їх вирішити. Не здогадуйся мовчки.
11
12[вставте обфускований псевдокод]

08. Рій - контролер, який керує воркерами

Один чат не зможе якісно прочитати 500 функцій. Він забуває побачене, називає одне й те саме трьома різними іменами і починає суперечити сам собі.

Рішення — невелика команда: один чат-контролер, який роздає роботу, і кілька чатів-воркерів, кожен з яких бере одну функцію.

Контролер тримає загальну картину і зшиває шматки назад у єдине ціле.

Movez - inline image

Для цього не потрібно будувати нічого особливого — два промпти нижче і є всією системою.

python
1Ти — контролер реверс-інжинірингу. Карта функцій знаходиться у functions.json
2(адреса, назва, розмір, xref_count).
3
41. Згрупуй функції за близькістю у графі викликів; відсортуй групи за кількістю xref.
52. Передай кожну групу воркеру. Ніколи не аналізуй функції самостійно.
63. Вставляй уже розпізнані структури в бриф кожного воркера, щоб назви залишалися узгодженими.
74. Якщо воркер повертає впевненість нижче 6, постав у чергу другий прохід із контекстом
8 від його розпізнаних сусідів.
95. Відстежуй сумарні витрати токенів і звіtuj після кожної групи.
python
1Ти — воркер. Ти отримуєш одну декомпільовану функцію та вже розпізнані структури.
2Поверни точно: адресу, призначення, впевненість (1-10), structs_used, structs_new,
3clean_source, flags. Використовуй наявні назви структур; ніколи не вигадуй другу назву для
4структури, яку контролер тобі вже дав. Лише одна функція. Зупинись, коли закінчиш.

https://x.com/victor_explore/status/2109466356454510612

09. Clean room - чотири правила, які тримають у межах закону

Перебудова методом clean room означає, що ви копіюєте те, що робить додаток, а ніколи не код усередині нього. Зробіть це правильно — і те, що ви випустите, буде повністю вашим. Помиліться — і ви несете чужі авторські права.

Movez - inline image

Чотири правила тримають вас у безпеці, і команда WordCraft автоматично перевіряє всі чотири під час кожної збірки.

  1. Спостерігайте, ніколи не копіюйте. Запускайте ціль як чорний ящик, дивіться, що вона робить, робіть скріншоти лише її вікна. Ніколи не читайте, не дизасемблюйте і не вставляйте її код. Ніколи не копіюйте формулювання, окрім базових назв фіч.
  2. Специфікації, а не вихідники. Формати файлів беруться з публічних стандартів (OOXML — це ECMA-376 / ISO 29500, плюс опубліковані специфікації RTF та ODF), а ніколи з читання парсера конкурента чи будь-якого коду під GPL/LGPL.
  3. Лише оригінальні ресурси. Кожна іконка, шрифт, шаблон і звук намальовані кодом, є суспільним надбанням або мають відкриту ліцензію, із записом у файлі атрибуції. Інакше CI-перевірка звалить збірку.
  4. Розділіть дві задачі. Один агент відновлює поведінку і пише специфікацію. Інший контекст реалізує код виключно за специфікацією, ніколи не дивлячись на початковий аналіз. Це розділення і є межею clean room.
python
1На основі завершеного аналізу напиши clean-room специфікацію для перевтілення.
2
3Описуй ЛИШЕ ПОВЕДІНКУ. Включи: кожен публічний інтерфейс, модель даних, кожну
4видиму користувачу фічу як тестовану вимогу, формати файлів для читання та запису
5(за спостережуваною поведінкою та публічною специфікацією), а також обробку помилок.
6
7НЕ включай: адреси чи зміщення, назви змінних із декомпіляції, асемблер
8або будь-що, скопійоване з оригіналу. Розробник, який ніколи не бачив бінарник, має
9змогти реалізувати сумісну версію лише на основі цього документа.
10
11Виведи markdown із розділами: Architecture, Data Model, Public API, File Formats,
12Test Cases.

Робота за описом — це не лише юридичний захист. Це дозволяє вам робити правильний вибір для вашої мови та потреб, замість того щоб успадковувати рішення, які оригінальний автор прийняв десятиліття тому.

Movez - inline image

WordCraft місцями швидший за Word саме тому, що не копіював його нутрощі.

10. Створення додатків - дванадцять професійних інструментів, один метод

WordCraft — не виняток. Це один із дванадцяти додатків на полиці команди ArtCraft, кожен з яких є clean-room перебудовою інструменту, за який ви вже платите. Усі написані з нуля на Rust і випущені безкоштовно та з відкритим кодом на GitHub.

Їхній девіз: "Twelve apps. One craft" ("Дванадцять додатків. Одна майстерність"), і ця майстерність — метод із кроку 9: спостерігай за оригіналом, читай публічні специфікації, будуй свіжу версію виключно на основі поведінки.

Movez - inline image

Вигода від цього спільного методу скрізь однакова. Ніякого Electron: кожен додаток нативний на macOS, Windows і Linux, і всі, крім FilmCraft, також працюють у вкладці браузера через WebAssembly.

А оскільки кожна дія всередині них є іменованою командою, усіма дванадцятьма можна керувати за допомогою AI-агента одразу з коробки.

Кожен додаток Craft побудований однаково, і цю архітектуру варто копіювати. Кожен складається з шарів, і кожен шар використовує лише той, що під ним — від базових вимірювань внизу до екранного вікна нагорі.

Ось шари WordCraft:

Movez - inline image

І кожна дія — це просто іменована команда, тому клік мишкою, гаряча клавіша та AI-агент запускають абсолютно одне й те саме. Саме це дозволяє керувати будь-яким із них через агента.

python
1керування WordCraft через MCP
2
3# Автоматизація документів без UI (headless)
4claude mcp add wordcraft -- wordcraft-cli mcp
5
6# Або керування запущеним десктопним додатком
7wordcraft --control 7981 &
8claude mcp add wordcraft-app -- wordcraft-cli mcp --connect 127.0.0.1:7981
9
10# Інструменти: list_commands, execute, batch, type_text, select_text,
11# inspect_document, render_page, save_document (+ screenshot/click/key наживо)
12> Open report.docx, make every heading 14pt bold, export to PDF
13 ✓ select.all-headings -> 12 selected
14 ✓ format.font-size 14 · format.bold
15 ✓ export report.pdf (selectable text, bookmarks kept)

https://x.com/yuhasbeentaken/status/2109235513102057828

11. Перевірте та випустіть - доведіть паритет, відкрийте MCP

У вас ніколи не було вихідного коду оригіналу, тому ви не можете порівняти його рядок за рядком.

Замість цього ви порівнюєте поведінку: даєте і оригіналу, і вашій перебудові однакові вхідні дані та перевіряєте, чи збігається результат.

python
1Створи тестовий стенд для порівняння поведінки оригінального бінарника та моєї перебудови.
2
3Згенеруй 50 вхідних даних: 30 нормальних, 10 граничних (порожні, максимальний розмір, unicode, спецсимволи),
410 помилкових (некоректні, відсутні поля, пошкоджені). Прогань кожне через обидва варіанти. Порівняй вивід
5байт-у-байт, де можливо, і семантично в інших випадках. Повідом відсоток збігів, список
6розбіжностей та серйозність кожної (косметична / поведінкова / критична). Збережи у report.md.

Це також найпереконливіший доказ, який ви можете комусь показати (той самий RE-слот на самому початку статті).

Movez - inline image

Потім випустіть свою перебудову так само, як це зробили REA та WordCraft: у вигляді MCP-сервера, щоб агент наступної людини міг керувати ним так само, як ви керували REA.

Дайте кожній функції зрозумілу назву та опис, загорніть її в простий CLI-інструмент і зробіть так, щоб вона встановлювалася одним рядком.

https://x.com/0xMovez/status/2108884063515746410

І тестуйте в процесі, а не наприкінці, бо помилка, знайдена після того, як ви побудували поверх неї три шари, обійдеться значно дорожче.

Шість помилок, які вбивають вихідні

  1. Відкривати дизасемблер для Electron-додатка. Якщо JavaScript лежить на поверхні, маршрутизуйте на analyze_javascript_application і повністю пропустіть нативний шлях.
  2. Дампити все, перш ніж прочитати хоч щось. Спершу попросіть REA зробити зведення. Витягування всього додатка одразу ховає справжню логіку в шумі та роздуває ваші рахунки.
  3. Читати функції в порядку їхнього розташування у файлі. Сортуйте за кількістю перехресних посилань. Функція зі 147 xrefs — це архітектура; помічник із 2 xrefs може почекати.
  4. Гризти обфускацію 3-го рівня. Бенчмарк вирішує 0% багатошарових задач. Встановіть бюджет, збережіть контекст від сусідів, поверніться пізніше.
  5. Дозволяти моделі копіювати код у вашу перебудову. Це порушує принципи clean room. Спочатку специфікація в одному контексті, потім реалізація за специфікацією в іншому.
  6. Випускати продукт без звіту про паритет. "Мені здається, що збігається" — це не доказ. 50 поведінкових тестів і відсоток збігів — доказ.

Висновок:

Встановіть REA. Прочитайте бінарник. Перебудуйте його як свій власний.

Маршрутизуйте ціль, складіть карту її поверхні, декомпілюйте гарячі функції, дозвольте Opus 5.5 дати всьому імена, зламайте ту обфускацію, яку варто ламати, масштабуйте це роєм, потім чисто опишіть специфікацію та випустіть перебудову через MCP.

Одинадцять кроків. Одна модель. Нуль скопійованого коду.

Збереження в один клік

Використовуйте YouMind для AI-глибокого читання віральних статей

Зберігайте джерела, ставте цілеспрямовані запитання, підсумовуйте аргументи та перетворюйте віральні статті на корисні нотатки в одному AI-робочому просторі.

Дослідити YouMind
Для авторів

Перетворіть свій Markdown на охайну статтю для 𝕏

Коли ви публікуєте власні лонгріди, зображення, таблиці та блоки коду роблять форматування в 𝕏 складним. YouMind перетворює повну чернетку в Markdown на чисту статтю для 𝕏, готову до публікації.

Спробувати Markdown для 𝕏

Більше патернів для аналізу

Останні віральні статті

Переглянути більше віральних статей