Більшість людей, які намагаються реверс-інжинірити бінарник, відкривають його в hex-редакторі, гортають хвилин двадцять і здаються.
Вони не знають, яким інструментом завантажити файл. Не знають, який промпт витягне з нього логіку. Не знають, як перетворити суцільну стіну асемблера на щось, що реально можна відтворити.
Цей курс із 11 кроків перетворить Claude Opus 5.5 на машину для створення будь-чого з відкритим кодом.
Підписуйтесь на мій Substack, щоб отримувати свіжу AI-альфу:
Реверс-інжиніринг — це не про злом. Це про те, щоб зрозуміти річ настільки добре, аби побудувати власну.
7 жовтня 2026 року Амджад Масад (Amjad Masad), CEO Replit, опублікував один рядок:
https://x.com/amasad/status/2107671204639465961
під ним розробник @morluto відповів доказами: набором інструментів, які дозволяють агентам керувати Hopper та Ghidra й заходити дуже далеко.
Цей проєкт — REA, і він набрав 110 000 зірок на GitHub за лічені дні.

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

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

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

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

Усе працює локально на вашій машині. Нічого не завантажується, окрім результатів, які потрібні моделі для аналізу, і кожен висновок позначається як спостереження, умовивід або невідоме.
**
02. Встановлення - rea-agents плюс один дизасемблер
Налаштування реєструє MCP-сервер REA у вашому агенті та встановлює відповідні інструкції робочого процесу.
Одна команда робить усю роботу: вона показує кожну зміну перед записом і створює резервну копію того, що змінює.

Дизасемблер ви обираєте самі: Hopper на macOS — найпростіший шлях, Ghidra безкоштовна і кросплатформна, IDA — якщо вона у вас уже є.
1# 1. Зареєструйте REA у своєму агенті (Claude Code, Codex, Cursor, Gemini CLI...)2npx rea-agents setup # показує заплановані зміни, запитує перед записом34# 2. Провайдер глибокого аналізу. Hopper працює найзручніше на macOS;5# налаштування може встановити його після вашого підтвердження. Ghidra та IDA потрібно встановлювати самостійно.6# 3. Встановіть CLI rea для роботи в терміналі та скриптів7npm install --global rea-agents8rea --help910# 4. Перезапустіть агента, потім переконайтеся, що інструменти активні11claude12> /mcp13 rea: connected14 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 оновленою, бо релізи часто містять виправлення.
1# Правила реверс-інжинірингу ( CLAUDE.MD )23## Повноваження4- Аналізуйте лише ті цілі, якими ви володієте або маєте дозвіл на дослідження. Озвучте підставу один раз.5- Кожне твердження позначайте: спостереження (побачив), умовивід (вивів логічно) або невідоме.6- Наводьте докази: адресу, байти, псевдокод або місце виклику. Жодних тверджень без джерел.78## Робочий процес9- Починайте з найменшого огляду, а не повного дампу. Розширюйте лише там, де є конкретний пробіл.10- Використовуйте відкриту сесію повторно; ніколи не запускайте ідентичний аналіз заново.11- Відокремлюйте статичні факти від рантайм-фактів. Ніколи не робіть висновків про виконання на основі статичного читання.1213## Реконструкція14- Будуйте на основі ПОВЕДІНКИ та публічних специфікацій, ніколи на основі скопійованого коду чи ресурсів.15- Ведіть реєстр зобов'язань: кожна відновлена поведінка потребує успішного тесту, перш ніж вважатися "готовою".
Opus 5.5 має п'ять рівнів зусиль: low, medium, high, xhigh та max. Використовуйте:
- Medium, щоб досліджувати та орієнтуватися
- High, щоб анотувати звичайні функції
- Max для обфускованого коду та всього, де багато математики з вказівниками.
Рівень зусиль — це головний регулятор якості в усьому цьому курсі.
03. Маршрутизатор - 20 типів цілей, по одному інструменту на кожну
Перша помилка новачків — хапатися за дизасемблер, коли ціль є Electron-додатком, JavaScript якого лежить прямо на поверхні.
REA маршрутизує ціль до правильного інструменту, і ваш перший промпт має робити те саме. Назвіть файл, назвіть фічу, і дозвольте агенту обрати стартовий інструмент.

1Я хочу зрозуміти, як працює [ФІЧА] у [ДОДАТКУ], який знаходиться за шляхом [АБСОЛЮТНИЙ ШЛЯХ].23Спочатку скажи мені, що це за тип цілі (нативний, Electron/JS, .NET, Go, APK, WASM)4і обери правильний інструмент REA, щоб її відкрити. Поки що не починай глибокий аналіз.56Потім дай мені карту в один абзац: на чому побудований додаток, якого він розміру і7де б ти шукав насамперед [ФІЧУ]. Тримай спостереження, умовиводи та невідоме8окремо і наводь докази для будь-яких своїх тверджень.
Якщо спрямувати REA на Electron-додаток, вона за секунди поверне модулі, імпорти та межі IPC без жодного дизасемблера.
Якщо спрямувати її на нативний Mach-O або ELF, вона відкриє базу даних Hopper і дасть вам складніший, але глибший нативний шлях. Розуміння того, де ви перебуваєте, економить години.
https://x.com/_vmlops/status/2106690704244420687
04. Розвідка - огляд, рядки та граф викликів
Поки що не відкривайте жодного коду. Спершу попросіть REA скласти карту всього файлу. Одна команда покаже, на якій архітектурі він працює, скільки функцій містить і який читабельний текст у ньому захований.
Цей текст — ваша найшвидша підказка: веб-адреси, повідомлення про помилки та назви фіч розкажуть, що робить додаток, ще до того, як ви прочитаєте хоча б рядок коду.
1rea.open_binary { path: "/Applications/Target.app/Contents/MacOS/Target" }2rea.binary_overview {}3 arch: arm644 functions: 1,284 identified5 segments: __TEXT __DATA __LINKEDIT6 entry: _main @ 0x1000051c078rea.search { query: "http" } # рядки + посилання в коді9 0x10004a2c0 "https://api.target.app/v3/sync"10 0x10004a300 "Authorization: Bearer "11 0x10004a330 "offline cache miss, falling back"1213rea.xrefs { address: "0x100012ab0" } # хто це викликає?14 147 references -> core config loader, called everywhere
REA також рахує, скільки разів викликається кожна функція (ця кількість називається перехресними посиланнями, або xrefs).

Функція, яку викликають 147 разів, — це серце додатка, і вона заслуговує на максимум ваших зусиль. Та, що викликається двічі, — дрібний помічник, який можна ігнорувати, поки він не стане важливим. Починайте з верхівки цього списку і рухайтеся вниз.
05. Декомпіляція - одна функція у псевдокод
Тепер оберіть одну з тих "зайнятих" функцій і перетворіть її на щось читабельне. Декомпілятор бере необроблені машинні інструкції та переписує їх у код, близький до C.
Виглядає це грубо: імена на кшталт var_28, заплутана логіка, приведення типів скрізь. Але ви можете це прочитати, а читабельність — це все, що потрібно Opus 5.5.
Запускайте з командного рядка, щоб зберегти результат, або прямо з чату.
1# Декомпілювати одну функцію за адресою у форматі JSON, який можна передати через pipe або зберегти2rea decompile /Applications/Target.app/.../Target 0x100012ab0 \3 --provider hopper --json > fn_config_loader.json45# Або шукати функцію за назвою та слідувати за посиланнями6rea function /path/to/Target parseConfig --provider hopper --json7rea xrefs /path/to/Target 0x100012ab0 --provider hopper --json8rea trace /path/to/Target "sync" --provider hopper --json
1// 0x100012ab0 xrefs: 1472void 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.

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

Повний розбір на rea.tools/showcase.
06. Анотація - нехай Opus назве кожну змінну
Цей сирий код — лише половина справи. Тепер передайте його Opus 5.5 і попросіть пояснити та прибрати зайве.
Модель перейменує незрозумілі змінні на осмислені, одним реченням опише призначення функції, розпізнає патерн і навіть знайде баги, які залишили автори оригінального додатка.
Вставте цей промпт у Claude:
1Ось декомпільований псевдокод функції, яка має 147 перехресних посилань.23Для цієї функції:41. Перейменуй кожну змінну на осмислену назву, виходячи з того, як вона використовується.52. Опиши її призначення одним реченням.63. Перерахуй структури даних, які вона читає та записує.74. Назви патерн (синглтон, фабрика, машина станів, спостерігач...).85. Перепиши це як чистий, ідіоматичний Swift (або мову, на яку вказують9 угоди про виклики) з doc-коментарями.106. Познач відсутню обробку помилок, валідацію вхідних даних або перевірки безпеки.1112Подумай над цим із зусиллям xhigh, перш ніж відповідати: проаналізуй, чим є кожне13значення, перш ніж фіксувати назви. Позначай усе, в чому не впевнений.1415[вставте псевдокод]
Декомпіляція показує, що робить код. 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 завданнях. Запам'ятайте ці цифри.

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

1Ця функція виглядає обфускованою. Працюй із максимальним зусиллям (max).231. Визнач використані техніки (сплощення потоку керування, непрозорі предикати,4 мертвий код, шифрування рядків, розбиття функцій) і вкажи, де саме кожна з них5 проявляється в цьому коді.62. Усунь їх: видали мертві гілки, обчисли непрозорі предикати, розплутай7 диспетчеризацію, розшифруй вбудовані рядки, якщо ключ можна відновити.83. Покажи чисту функцію, що залишилася.94. Оціни свою впевненість від 1 до 10. Якщо нижче 6, скажи точно, які частини викликають сумніви10 і який сусідній контекст допоміг би їх вирішити. Не здогадуйся мовчки.1112[вставте обфускований псевдокод]
08. Рій - контролер, який керує воркерами
Один чат не зможе якісно прочитати 500 функцій. Він забуває побачене, називає одне й те саме трьома різними іменами і починає суперечити сам собі.
Рішення — невелика команда: один чат-контролер, який роздає роботу, і кілька чатів-воркерів, кожен з яких бере одну функцію.
Контролер тримає загальну картину і зшиває шматки назад у єдине ціле.

Для цього не потрібно будувати нічого особливого — два промпти нижче і є всією системою.
1Ти — контролер реверс-інжинірингу. Карта функцій знаходиться у functions.json2(адреса, назва, розмір, xref_count).341. Згрупуй функції за близькістю у графі викликів; відсортуй групи за кількістю xref.52. Передай кожну групу воркеру. Ніколи не аналізуй функції самостійно.63. Вставляй уже розпізнані структури в бриф кожного воркера, щоб назви залишалися узгодженими.74. Якщо воркер повертає впевненість нижче 6, постав у чергу другий прохід із контекстом8 від його розпізнаних сусідів.95. Відстежуй сумарні витрати токенів і звіtuj після кожної групи.
1Ти — воркер. Ти отримуєш одну декомпільовану функцію та вже розпізнані структури.2Поверни точно: адресу, призначення, впевненість (1-10), structs_used, structs_new,3clean_source, flags. Використовуй наявні назви структур; ніколи не вигадуй другу назву для4структури, яку контролер тобі вже дав. Лише одна функція. Зупинись, коли закінчиш.
https://x.com/victor_explore/status/2109466356454510612
09. Clean room - чотири правила, які тримають у межах закону
Перебудова методом clean room означає, що ви копіюєте те, що робить додаток, а ніколи не код усередині нього. Зробіть це правильно — і те, що ви випустите, буде повністю вашим. Помиліться — і ви несете чужі авторські права.

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

WordCraft місцями швидший за Word саме тому, що не копіював його нутрощі.
10. Створення додатків - дванадцять професійних інструментів, один метод
WordCraft — не виняток. Це один із дванадцяти додатків на полиці команди ArtCraft, кожен з яких є clean-room перебудовою інструменту, за який ви вже платите. Усі написані з нуля на Rust і випущені безкоштовно та з відкритим кодом на GitHub.
Їхній девіз: "Twelve apps. One craft" ("Дванадцять додатків. Одна майстерність"), і ця майстерність — метод із кроку 9: спостерігай за оригіналом, читай публічні специфікації, будуй свіжу версію виключно на основі поведінки.

Вигода від цього спільного методу скрізь однакова. Ніякого Electron: кожен додаток нативний на macOS, Windows і Linux, і всі, крім FilmCraft, також працюють у вкладці браузера через WebAssembly.
А оскільки кожна дія всередині них є іменованою командою, усіма дванадцятьма можна керувати за допомогою AI-агента одразу з коробки.
Кожен додаток Craft побудований однаково, і цю архітектуру варто копіювати. Кожен складається з шарів, і кожен шар використовує лише той, що під ним — від базових вимірювань внизу до екранного вікна нагорі.
Ось шари WordCraft:

І кожна дія — це просто іменована команда, тому клік мишкою, гаряча клавіша та AI-агент запускають абсолютно одне й те саме. Саме це дозволяє керувати будь-яким із них через агента.
1керування WordCraft через MCP23# Автоматизація документів без UI (headless)4claude mcp add wordcraft -- wordcraft-cli mcp56# Або керування запущеним десктопним додатком7wordcraft --control 7981 &8claude mcp add wordcraft-app -- wordcraft-cli mcp --connect 127.0.0.1:7981910# Інструменти: 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 PDF13 ✓ select.all-headings -> 12 selected14 ✓ format.font-size 14 · format.bold15 ✓ export report.pdf (selectable text, bookmarks kept)
https://x.com/yuhasbeentaken/status/2109235513102057828
11. Перевірте та випустіть - доведіть паритет, відкрийте MCP
У вас ніколи не було вихідного коду оригіналу, тому ви не можете порівняти його рядок за рядком.
Замість цього ви порівнюєте поведінку: даєте і оригіналу, і вашій перебудові однакові вхідні дані та перевіряєте, чи збігається результат.
1Створи тестовий стенд для порівняння поведінки оригінального бінарника та моєї перебудови.23Згенеруй 50 вхідних даних: 30 нормальних, 10 граничних (порожні, максимальний розмір, unicode, спецсимволи),410 помилкових (некоректні, відсутні поля, пошкоджені). Прогань кожне через обидва варіанти. Порівняй вивід5байт-у-байт, де можливо, і семантично в інших випадках. Повідом відсоток збігів, список6розбіжностей та серйозність кожної (косметична / поведінкова / критична). Збережи у report.md.
Це також найпереконливіший доказ, який ви можете комусь показати (той самий RE-слот на самому початку статті).

Потім випустіть свою перебудову так само, як це зробили REA та WordCraft: у вигляді MCP-сервера, щоб агент наступної людини міг керувати ним так само, як ви керували REA.
Дайте кожній функції зрозумілу назву та опис, загорніть її в простий CLI-інструмент і зробіть так, щоб вона встановлювалася одним рядком.
https://x.com/0xMovez/status/2108884063515746410
І тестуйте в процесі, а не наприкінці, бо помилка, знайдена після того, як ви побудували поверх неї три шари, обійдеться значно дорожче.
Шість помилок, які вбивають вихідні
- Відкривати дизасемблер для Electron-додатка. Якщо JavaScript лежить на поверхні, маршрутизуйте на analyze_javascript_application і повністю пропустіть нативний шлях.
- Дампити все, перш ніж прочитати хоч щось. Спершу попросіть REA зробити зведення. Витягування всього додатка одразу ховає справжню логіку в шумі та роздуває ваші рахунки.
- Читати функції в порядку їхнього розташування у файлі. Сортуйте за кількістю перехресних посилань. Функція зі 147 xrefs — це архітектура; помічник із 2 xrefs може почекати.
- Гризти обфускацію 3-го рівня. Бенчмарк вирішує 0% багатошарових задач. Встановіть бюджет, збережіть контекст від сусідів, поверніться пізніше.
- Дозволяти моделі копіювати код у вашу перебудову. Це порушує принципи clean room. Спочатку специфікація в одному контексті, потім реалізація за специфікацією в іншому.
- Випускати продукт без звіту про паритет. "Мені здається, що збігається" — це не доказ. 50 поведінкових тестів і відсоток збігів — доказ.
Висновок:
Встановіть REA. Прочитайте бінарник. Перебудуйте його як свій власний.
Маршрутизуйте ціль, складіть карту її поверхні, декомпілюйте гарячі функції, дозвольте Opus 5.5 дати всьому імена, зламайте ту обфускацію, яку варто ламати, масштабуйте це роєм, потім чисто опишіть специфікацію та випустіть перебудову через MCP.
Одинадцять кроків. Одна модель. Нуль скопійованого коду.





