diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19dfcaa5ff..f08aaab0c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,9 +96,17 @@ Run the full checks, isolated package verifier, package dry run, and two-target ```bash npm pack -npm exec --yes --package ./morluto-rea-0.1.0.tgz -- rea --help ``` +Use the exact filename printed by `npm pack` to run the packaged executable: + +```bash +npm exec --yes --package ./rea-agents-VERSION.tgz -- rea --help +``` + +Replace `VERSION` with the packed version; do not use a tarball from an earlier +build. + Publish the public package: ```bash @@ -110,6 +118,6 @@ After npm registry propagation, verify the published CLI and connect the client ```bash npx -y rea-agents@latest --help npx -y rea-agents@latest doctor -npx -y rea-agents@latest setup --yes +npx -y rea-agents@latest setup --yes --all-detected npx -y rea-agents@latest mcp ``` diff --git a/README_ar.md b/README_ar.md index a76990b0ca..a13609f37e 100644 --- a/README_ar.md +++ b/README_ar.md @@ -4,7 +4,7 @@ # REA: هندسة أي شيء عكسيًا -### واجهة CLI وخادم MCP واحدان يمكّنان وكلاء البرمجة من إجراء هندسة عكسية لأي شيء +### استقصِ سلوك التطبيقات والملفات التنفيذية الأصلية باستخدام وكيلك. **اعثر على ميزة تعجبك. افهم آلية عملها. ابنها بالطريقة التي تريدها.** @@ -13,33 +13,49 @@ [![MCP tool catalog](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](#منصة-أدوات-التحقيق) [![Node.js 22+](https://img.shields.io/badge/Node.js-22.19%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE) +[![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM) -[البدء السريع](#البدء-السريع) · [من الملف التنفيذي إلى السلوك](#من-الملف-التنفيذي-إلى-السلوك) · [دليل الأدوات](#منصة-أدوات-التحقيق) · [كيف يعمل](#كيف-يعمل) · [الأسئلة الشائعة](#الأسئلة-الشائعة) +[البدء السريع](#البدء-السريع) · [حالة الدعم](#حالة-الدعم) · [من الملف التنفيذي إلى السلوك](#من-الملف-التنفيذي-إلى-السلوك) · [منصة أدوات التحقيق](#منصة-أدوات-التحقيق) · [خطة العمل](#خطة-العمل) · [كيف يعمل؟](#كيف-يعمل) + + + + + +
+ + Discord
+ انضم إلى مجتمع الهندسة العكسية +

+ Discord · أسئلة وأجوبة · شارك أعمالك +

-curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +npx rea-agents setup + +
+ +REA يشغّل جسر التحليل داخل Hopper لفحص ملف تنفيذي أصلي -هل وجدت في تطبيق ما ميزة تريدها في منتجك؟ أعط التطبيق إلى وكيل البرمجة حتى من دون شيفرته المصدرية. باستخدام REA، يستطيع الوكيل استقصاء الميزة وفهم آلية عملها ثم بناء نسخة ملائمة لتقنياتك وتصميمك ومتطلباتك. +--- -يوفر REA هذه العملية عبر CLI وخادم MCP واحدين. يستطيع الوكيل قراءة شيفرة التطبيق وتتبع طريقة عمل الميزات ثم استخدام الأدلة مباشرة في عمله البرمجي المعتاد. ويتولى REA أدوات الهندسة العكسية المعقدة خلف واجهة واحدة. +هل وجدت في تطبيق ميزة تريدها في منتجك؟ اطلب من وكيلك استقصاءها باستخدام REA. يستطيع فحص التطبيق من دون شيفرته المصدرية، وشرح طريقة عمل الميزة وعرض الأدلة، ثم بناء نسخة تناسب مشروعك. + +يوفر REA أدوات لتحليل الملفات التنفيذية الأصلية وتطبيقات JavaScript وElectron وتجميعات .NET والمواقع. يمكنك استخدامها من وكيلك أو من الطرفية. يعمل التحليل محليًا، وتتضمن النتائج الأدلة والقيود. + +يضبط Setup إعدادات الوكيل ويربطه بتثبيت موجود من Hopper أو Ghidra. ويمكنه تثبيت Hopper بعد موافقتك. ## اطلب من وكيلك مباشرة -```bash -npx rea-agents setup -``` - -ثم اطلب: +بعد [الإعداد](#البدء-السريع)، أعد تشغيل الوكيل ثم اطلب: ```text -أعد REA وأجر هندسة عكسية لتطبيق Notes. اشرح طريقة عمل البحث وكيف توصلت إلى ذلك، -ثم ابنِ ميزة مشابهة لمشروعي. +استقصِ طريقة عمل البحث في تطبيق Notes، واعرض الأدلة، ثم ابنِ ميزة مشابهة لمشروعي. ``` -تطبيق Notes مجرد مثال. يمكنك تسمية أي تطبيق تريد فهمه أو طلب البدء بنظرة عامة. +استبدل Notes بالتطبيق الذي تريد فهمه، أو اطلب نظرة عامة أولًا. ## من الملف التنفيذي إلى السلوك @@ -57,65 +73,90 @@ npx rea-agents setup | **CLI وMCP** | استخدم قدرات الهندسة العكسية نفسها من الطرفية أو وكيل البرمجة. | | **يتولى التعقيد** | يدير REA إعداد الأدوات وفتح التطبيق واستمرار الاستقصاء والتنظيف بعد الانتهاء. | | **سير عمل كامل** | انتقل من النظرة الأولى إلى الشيفرة شبه المصدرية وعلاقات الاستدعاء والأنواع وأدلة التنفيذ. | -| **محلي حسب التصميم** | يجري التحليل على جهاز Mac ولا يرفع REA الملف التنفيذي إلى خدمة تحليل مستضافة. | +| **محلي حسب التصميم** | يجري التحليل على جهازك المدعوم ولا يرفع REA الملف التنفيذي إلى خدمة تحليل مستضافة. | | **يحافظ على السياق** | استقصِ عدة ملفات تنفيذية من دون بدء التحليل من جديد عند كل سؤال. | ## البدء السريع -### باستخدام وكيل برمجة (موصى به) +### تشغيل الإعداد (موصى به) + +اربط REA بوكيلك: ```bash -npx --yes rea-agents@latest setup +npx rea-agents setup ``` -اطلب من الوكيل إعداد REA. سيفحص جهاز Mac ويشرح ما يحتاج إلى تثبيته ويطلب الموافقة ويرشدك خلال رسائل النظام. أعد تشغيل الوكيل بعد الإعداد إذا طلب ذلك لتحميل مجموعة الأدوات الكاملة. +اختر **Agent Integration**، وحدد الوكلاء الذين تريد إعدادهم، ثم راجع الخطة ووافق عليها. يضبط Setup اتصال MCP ويثبت سير عمل الاستقصاء. يمكنه استخدام تثبيت موجود من Hopper أو Ghidra، أو اقتراح تثبيت Hopper. -### قبل البدء +يعرض التغييرات قبل تطبيقها وينشئ نسخة احتياطية من الإعدادات الموجودة. راجع [دليل التثبيت والإعداد](docs/installation.md) للمتطلبات والخيارات الإضافية. -- macOS 12 أو أحدث -- Ubuntu 24.04+ أو Fedora 41+ أو Arch Linux ‏64 بت -- Node.js 22.19+ أو 24.11+ وnpm المرفق مع Node +### الاستخدام مع وكيل -يعرض `rea setup` خطة التغييرات كاملة ويطلب التأكيد قبل تطبيقها. لا يثبت أو يحدّث Homebrew أو Node.js أو npm. إذا كان [Hopper](https://www.hopperapp.com/) مفقودًا، يقترح Setup الحزمة الرسمية. Hopper برنامج منفصل يحتاج إلى ترخيص خاص به. +بعد الإعداد، أعد تشغيل الوكيل واشرح التطبيق أو الميزة التي تريد استقصاءها. يستطيع REA إعداد Claude Code وClaude Desktop وCodex وCursor وGemini CLI وWindsurf. يكتشف Devin فقط ولا يضبط إعداداته. يمكن للوكلاء الآخرين استخدام إعداد MCP أدناه. -إذا كان Ghidra 12.1.4 PUBLIC وJDK 21 الكامل بنواة 64 بت مثبتين مسبقًا على Linux ‏64 بت، فيمكن لـ Setup أيضًا تسجيل `GHIDRA_INSTALL_DIR` و`JAVA_HOME` الاختياري بعد الموافقة. لا ينزّل REA أو يثبت أو يعدّل Ghidra أو Java. يوفّر مزوّد Ghidra ضمن جلسة headless معزولة وللقراءة فقط الجرد، وفك الترجمة، والتجميع، وعلاقات الاستدعاء، والمراجع ذات الأنواع، وxref، وCFG، وملفات تحليل الدوال؛ وتبقى حالة الواجهة الرسومية وعمليات التعديل غير متاحة. +يمكن تشغيل Hopper في الوضع التجريبي. إذا ظهرت رسالة عند التشغيل الأول، فاختر التجربة أو أدخل ترخيصًا موجودًا. -#### التثبيت على Linux واستكشاف الأخطاء +### الاستخدام من الطرفية -على Ubuntu 24.04+ وFedora 41+ وArch Linux ‏64 بت، ينزّل REA حزمة DEB أو RPM أو Arch الرسمية، ويتحقق من الحجم وقيمة التحقق المنشورين، ثم يستخدم `apt-get` أو `dnf` أو `pacman` لحل الاعتماديات. عند التشغيل دون root يعرض `pkexec` طلب تفويض النظام. لا يستدعي REA الأمر `sudo`. - -مسار المشغّل الافتراضي هو `/opt/hopper/bin/Hopper`. استخدم `HOPPER_LAUNCHER_PATH` للمسارات الأخرى. إذا أبلغ Doctor عن غياب محرك التحليل، شغّل `ldd /opt/hopper/bin/Hopper | grep 'not found'`، وثبّت المكتبات الناقصة ثم أعد `rea setup`. يشغّل REA إصدار Hopper التجريبي المدعوم على شاشة Xvfb خاصة ويختار وضع التجربة الذي يقدمه Hopper لكل جلسة تحليل؛ لا يلزم `DISPLAY` لسطح المكتب ولا ترخيص مدفوع، مع بقاء حدود الإصدار التجريبي التي يحددها المورّد. أضف `~/.local/bin` إلى `PATH` أيضًا. - -### 1. إعداد REA - -```bash -curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash -npx --yes rea-agents@latest setup -``` - -إذا طلب macOS أو برنامج التثبيت تأكيدًا، فأكمل الخطوة ثم شغّل الأمر نفسه مرة أخرى. - -### 2. إعادة تشغيل وكيل البرمجة - -يكتشف Setup كلاً من Claude Code وClaude Desktop وCodex وCursor وGemini CLI وWindsurf وDevin. ويهيئ تلقائيًا أول ستة عملاء عند اكتشافهم؛ أما Devin فيُبلّغ عن اكتشافه فقط ولا يُعدّله لعدم وجود حد موثق لإعداد MCP المحلي. أعد تشغيل العملاء الذين جرى إعدادهم كي يحمّلوا REA. - -### 3. اطلب من الوكيل - -يمكنك ذكر التطبيق باسمه. سيعثر وكيل البرمجة عليه ويمرر ملف البرنامج الذي يحتاجه REA. - -```text -استخدم REA لإجراء هندسة عكسية لتطبيق Notes. اشرح طريقة عمل البحث واعرض الأدلة، -ثم ابنِ ميزة مشابهة لمشروعي باستخدام SQLite. -``` - -إذا واجهت مشكلة، فشغّل: +بعد الإعداد، شغّل: ```bash npx -y rea-agents@latest doctor -rea uninstall -rea uninstall --purge-data +npx -y rea-agents@latest analyze /Applications/Notes.app ``` +### تثبيت أمر rea + +ثبت واجهة سطر الأوامر: + +```bash +curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +``` + +يجب تثبيت Node.js وnpm مسبقًا. عند تشغيله من طرفية، يثبت البرنامج `rea` ويبدأ الإعداد. + +يمكنك بدلًا من ذلك التثبيت باستخدام npm ثم تشغيل الإعداد: + +```bash +npm install --global rea-agents +rea setup +``` + +### المتطلبات + +- macOS 12 أو أحدث +- Ubuntu 24.04+ أو Fedora 41+ أو Arch Linux بنواة 64 بت +- Node.js 22.19+ أو 24.11+ وnpm + +يتطلب تحليل الملفات التنفيذية الأصلية Hopper أو Ghidra. Hopper برنامج منفصل، وللوضع التجريبي قيود يحددها المورّد، لكن الترخيص المدفوع ليس إلزاميًا. + +يدعم Ghidra نظامي Linux x64 وmacOS x64/arm64. ثبت Ghidra 12.1.4 وJDK 21 الكامل بنواة 64 بت بصورة منفصلة، ثم اضبط REA لاستخدامهما. يحتاج macOS أيضًا إلى أداة فك الترجمة الأصلية المطابقة لمعمارية الجهاز. + +يستطيع Setup التحقق من التثبيت وحفظ المسارات؛ ولا يثبت أو يحدّث Ghidra أو Java أو Node.js أو npm أو Homebrew. + +تحليل Ghidra على Windows غير متاح. لم تُنفذ بعد ضوابط ملكية العمليات وأذونات المجلدات الخاصة والتحقق الآمن من المسارات. حتى التثبيت الصحيح لـ Ghidra وJava لا يفعّل التحليل. راجع [Windows Ghidra P0](docs/windows-ghidra-p0.md). + +### تشخيص المشكلات + +يشخّص `npx -y rea-agents@latest doctor` الجهاز والاعتماديات وأدوات التحليل وإعدادات الوكيل من دون تغييرها. أضف `--json` للحصول على تشخيص منظم. + +مسار Hopper الافتراضي على Linux هو `/opt/hopper/bin/Hopper`. استخدم `HOPPER_LAUNCHER_PATH` للمسارات الأخرى. إذا كان الملف موجودًا لكن محرك التحليل لا يظهر، فشغّل `ldd /opt/hopper/bin/Hopper | grep 'not found'` للتحقق من المكتبات الناقصة. راجع [دليل Hopper](docs/installation.md#hopper). + +### التحديث والإزالة + +- يحدّث `rea upgrade` تثبيت REA الحالي. +- يزيل `rea uninstall` تسجيلات الوكلاء وملفات سير العمل التي يديرها REA، ويترك Hopper مثبتًا. +- يزيل `rea uninstall --purge-data` أيضًا ذاكرة REA المؤقتة وحالته. استخدمه فقط إذا أردت حذف هذه البيانات. + +## حالة الدعم + +يوفر REA عبر CLI وMCP تحليل الملفات التنفيذية الأصلية وتطبيقات JavaScript وElectron وتجميعات .NET والمواقع. تعتمد العمليات المتاحة على الجهاز والهدف وأداة التحليل المختارة. + +- يدعم Hopper التحليل الأصلي والتعليقات؛ ويختلف سلوك واجهته الرسومية حسب المنصة. +- يقدم Ghidra على Linux x64 وmacOS x64/arm64 عددًا قدره 22 عملية للقراءة فقط: الجرد والبحث وفك الترجمة والتعليمات والاستدعاءات والمراجع والأنواع. لا يقدم عمليات واجهة رسومية أو تعديل. +- لسير عمل المتصفح وElectron وتشغيل العمليات متطلبات مستقلة للإعداد والموافقة وإدارة دورة الحياة. راجع [English README](README.md#current-status) للتفاصيل الكاملة. +- تحليل Ghidra على Windows غير مفعّل. تابع التقدم في [#527](https://github.com/morluto/rea/issues/527). + ## استقصاء كامل بطلب واحد بعد الإعداد، يمكنك أن تطلب من وكيلك: @@ -159,22 +200,26 @@ rea uninstall --purge-data ## منصة أدوات التحقيق -| عائلة الأدوات | العدد | أمثلة | -| --------------------- | ----: | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| فحص الملفات التنفيذية | 39 | الدوال، والشيفرة شبه المصدرية، والتعليمات، والسلاسل، والأسماء، والمراجع، والتعليقات | -| التحليل المركب | 15 | النظرة العامة، و`inspect_native_api`، وفك الترجمة الدفعي، ومخططات الاستدعاء، والمراجع، واكتشاف الأنواع | -| أدوات macOS الأصلية | 7 | بيانات Mach-O والتوقيعات وملفات plist والمعماريات وفك رموز Swift دون تشغيل Hopper | -| رسم القطع الأثرية | 5 | فحص الدلائل والحزم، ورسم واجهة Interface Builder، وبيانات كتالوج أصول Apple، والاستخراج المحدد صراحة | -| Managed PE/CLI | 8 | هوية PE/CLI، أعضاء البيانات الوصفية، بصمات CIL، تصريحات P/Invoke/الحدود الأصلية والتحقق منها، إسقاط رسم التطبيق، استيراد إعادة البناء من فك الترجمة، إعادة ربط الرموز، خطط ترابط وقت التشغيل ومقارنة الإصدارات | -| مراقبة المتصفح | 9 | التقاط CDP محدود الأصل وتحليل الحزم وخرائط المصدر واكتشاف WebMCP والفروق والأدلة المرئية | -| تحليل Electron | 5 | مراقبة سلبية ضمن جذور canonical، ورسم ثابت ومحدود للتطبيق، ومطابقة ثابتة/وقت تشغيل قائمة على Evidence | -| وقت تشغيل JavaScript | 2 | اكتشاف أهداف Node/Electron Inspector المعتمدة للاتصال فقط، ومراقبة محدودة للبرامج النصية وسياقات التنفيذ دون تقييم أو تجهيز | -| سير عمل التطبيقات | 10 | تتبع محدود ومقارنة إصدارات فريدة ومقارنة ثابتة لأشكال قيم إرجاع الصادرات وإعادة تشغيل وحدات معزولة ومعتمدة على Linux وتوصيف وقت التشغيل المُدار وإغلاق تغطية إعادة البناء ودفاتر التزامات حتمية | -| جلسة الملف التنفيذي | 22 | فتح الأهداف وحزم الأدلة وتشغيل آلة إعادة محدودة ومقارنة العمليات والقطع والدوال وسجل المجهولات المتبقية | +| عائلة الأدوات | العدد | الاستخدام | +| --------------------- | ----: | ------------------------------------------------------------------------------------------------- | +| فحص الملفات التنفيذية | 39 | الدوال والشيفرة شبه المصدرية والتعليمات والسلاسل والرموز والمراجع والتعليقات | +| التحليل المركب | 15 | النظرة العامة وتحليل الدوال وفك الترجمة الدفعي ومخطط الاستدعاء وفحص Swift وObjC | +| أدوات macOS الأصلية | 7 | بيانات Mach-O والتوقيعات وplist والمعماريات واستعادة أسماء Swift | +| الملفات والحزم | 5 | فحص الدلائل والحزم وInterface Builder وموارد Apple والاستخراج | +| .NET PE/CLI | 8 | هوية التجميع والبيانات الوصفية وCIL والاستدعاءات الأصلية والمقارنة واستيراد إعادة البناء | +| مراقبة المتصفح | 9 | الصفحات والبرامج النصية وخرائط المصدر وWebMCP والصور ومقارنة الالتقاط | +| تحليل Electron | 5 | مراقبة الصفحات وبنية التطبيق وربط النتائج الثابتة بنتائج التشغيل والتفاعل المعتمد | +| وقت تشغيل JavaScript | 2 | الاتصال بهدف Node/Electron Inspector موجود لمراقبة البرامج وسياقات التنفيذ | +| سير عمل التطبيقات | 10 | تتبع الميزات ومقارنة الإصدارات وبنية قيم الإرجاع وإعادة التشغيل المعزولة والتحقق من إعادة الإنشاء | +| جلسة الملف التنفيذي | 22 | تبديل الأهداف وحفظ الأدلة ومقارنة العمليات والدوال وتسجيل الأسئلة غير المحسومة | + +## خطة العمل + +يشمل العمل التالي توسيع التحقق من الأهداف الأصلية، ومقارنة إصدارات JavaScript و.NET، ومراقبة وقت التشغيل والتحقق من إعادة الإنشاء. يتيح Setup بالفعل اختيار تكامل الوكيل وتثبيت Hopper. تثبيت أدوات تحليل أخرى ما زال عملًا لاحقًا. راجع [خطة التثبيت](docs/roadmap.md) و[تقييم أدوات التحليل](docs/provider-evaluation.md). ## استخدام REA مع وكلاء برمجة آخرين -يكتشف Setup كلاً من Claude Code وClaude Desktop وCodex وCursor وGemini CLI وWindsurf وDevin، ويهيئ تلقائيًا أول ستة عملاء. أما Devin فيُبلّغ عن اكتشافه فقط ولا يُعدّله. يمكن لأي وكيل برمجة يدعم خوادم MCP المحلية استخدام REA بالإعداد التالي: +يستطيع Setup إعداد Claude Code وClaude Desktop وCodex وCursor وGemini CLI وWindsurf. يكتشف Devin فقط ولا يغيّر إعداداته. يمكن لأي وكيل يدعم خوادم MCP المحلية الاتصال باستخدام الإعداد التالي: @@ -204,7 +249,7 @@ flowchart LR Ghidra --> App ``` -يستخدم CLI وخادم MCP محرك التحليل نفسه. تغلق أوامر الطرفية التطبيق عند انتهائها، بينما تبقيه جلسة الوكيل مفتوحًا أثناء الاستقصاء. +يستخدم CLI وخادم MCP سير عمل التحليل نفسه. تحرر أوامر الطرفية جلسة الجسر الخاصة بها عند انتهائها، بينما يمكن لجلسة الوكيل الحفاظ على الاتصال أثناء الاستقصاء. إغلاق جلسة REA لا يغلق تطبيق Hopper الذي يستخدمه المستخدم. ## أوامر CLI @@ -221,15 +266,9 @@ npx -y rea-agents@latest compare /absolute/path/to/left-evidence.json /absolute/ ## سلوك Hopper -يستطيع REA تشغيل Hopper تلقائيًا؛ لا حاجة إلى افتراض أنه يعمل مسبقًا. لكنه تطبيق macOS رسومي، لذلك قد يطلب التركيز أو يعرض حوارًا عندما يفرض Hopper قرارًا تفاعليًا. لا يمكن لـ REA ضمان تشغيل غير مرئي تمامًا لأن هذه الواجهة يملكها Hopper وmacOS. +يشغّل REA برنامج Hopper عند الحاجة. على macOS قد تظهر نافذته في المقدمة أو يحتاج أحد الحوارات إلى استجابة منك. لا يمكن ضمان بقاء النافذة في الخلفية. -لتجنب مربع اختيار معمارية ملف شامل، حدد معطيات المحمل مسبقًا: - -```bash -export HOPPER_LOADER_ARGS_JSON='["-l", "Mach-O", "--aarch64"]' -``` - -يدير REA دورة حياة Hopper ويحاول إغلاق العمليات التي بدأها عند انتهاء الأمر أو جلسة MCP. +يحدد REA تنسيق الهدف ومعماريته لتجنب حوارات الاختيار المعتادة. عند إغلاق الجلسة، يوقف الجسر وينظف موارده الخاصة، لكنه لا يغلق تطبيق Hopper الذي تستخدمه. ## الأمان والخصوصية @@ -258,7 +297,7 @@ export HOPPER_LOADER_ARGS_JSON='["-l", "Mach-O", "--aarch64"]'
هل يعمل REA على Linux أو Windows؟ -نعم، يعمل REA على macOS 12+ وUbuntu 24.04+ وFedora 41+ وArch Linux ‏64 بت؛ Windows غير مدعوم حاليًا. يستخدم التحليل العميق Hopper أو مزوّد Ghidra للقراءة فقط الذي يختاره المستدعي؛ ويتطلب Ghidra على Linux الإصدار 12.1.4 وJDK 21 الكامل. +يدعم REA نظام macOS 12+ وUbuntu 24.04+ وFedora 41+ وArch Linux بنواة 64 بت. يعمل تحليل Ghidra للقراءة فقط على Linux x64 وmacOS x64/arm64 مع Ghidra 12.1.4 وJDK 21 الكامل. تحليل Ghidra على Windows غير متاح بسبب الضوابط الأصلية غير المنفذة؛ راجع [Windows Ghidra P0](docs/windows-ghidra-p0.md).
diff --git a/README_ja.md b/README_ja.md index 34d61a34e6..94e016ad13 100644 --- a/README_ja.md +++ b/README_ja.md @@ -4,7 +4,7 @@ # REA:あらゆるものをリバースエンジニアリング -### コーディングエージェントがあらゆるものをリバースエンジニアリングするための、ひとつの CLI / MCP サーバー +### エージェントでアプリの動作からネイティブバイナリまで調べる。 **気になる機能を見つけ、仕組みを理解し、自分の形で実装する。** @@ -13,35 +13,49 @@ [![MCP tool catalog](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](#調査ツールカタログ) [![Node.js 22+](https://img.shields.io/badge/Node.js-22.19%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE) +[![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM) -[クイックスタート](#クイックスタート) · [バイナリから動作へ](#バイナリから動作へ) · [ツールカタログ](#調査ツールカタログ) · [仕組み](#仕組み) · [FAQ](#faq) +[クイックスタート](#クイックスタート) · [現在の対応状況](#現在の対応状況) · [バイナリから動作へ](#バイナリから動作へ) · [調査ツールカタログ](#調査ツールカタログ) · [ロードマップ](#ロードマップ) · [仕組み](#仕組み) + + + + + +
+ + Discord
+ リバースエンジニアリングのコミュニティに参加 +

+ Discord · 質問と回答 · 成果の共有 +

-curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +npx rea-agents setup + +
+ +Hopper 内で解析ブリッジを起動し、ネイティブバイナリを調べる REA --- -アプリの気になる機能を自分のプロダクトにも取り入れたいと思ったことはありませんか。ソースコードがなくても、そのアプリをコーディングエージェントに渡せます。REA を使えば、エージェントが機能を調査して仕組みを理解し、あなたの技術スタック、デザイン、要件に合わせた形で実装できます。 +アプリの機能を自分のプロダクトにも取り入れたいときは、REA を使ってエージェントに調査を依頼できます。ソースコードがなくても、アプリを調べ、仕組みと根拠を示し、あなたのプロジェクト向けに同様の機能を実装できます。 -REA はこの流れをひとつの CLI / MCP サーバーで実現します。エージェントはコンパイル済みのアプリを調べ、機能の流れを追い、分かったことを通常のコーディング作業に活用できます。複雑なリバースエンジニアリングツールは REA がひとつのインターフェースの裏側で扱います。 +REA はネイティブバイナリ、JavaScript/Electron アプリ、.NET アセンブリ、Web サイトの解析ツールを提供します。エージェントからもターミナルからも使えます。解析はローカルで実行され、結果には根拠と制限が含まれます。 + +Setup はエージェントを設定し、既存の Hopper または Ghidra に接続します。承認後に Hopper をインストールすることもできます。 ## エージェントに頼むだけ -```bash -npx rea-agents setup -``` - -次のように依頼します: +[セットアップ](#クイックスタート)後にエージェントを再起動し、次のように依頼します: ```text -メモアプリをリバースエンジニアリングしてください。 -検索の仕組みと判断の理由を示し、私のプロジェクト向けに同様の機能を実装してください。 +メモアプリの検索機能を調べて根拠を示し、私のプロジェクト向けに同様の機能を実装してください。 ``` -メモアプリは例にすぎません。調べたいアプリを指定するか、まず概要から始めるよう依頼できます。 +メモアプリを調べたいアプリに置き換えるか、まず概要を依頼してください。 ## バイナリから動作へ @@ -53,70 +67,96 @@ REA は調査をバイナリ上の根拠に結び付けます。元のソース ## REA を選ぶ理由 -| | | -| ---------------------- | ------------------------------------------------------------------------------------- | -| **エージェント向け** | コンパイル済みアプリについて質問し、推測ではなく根拠を集めさせることができます。 | -| **CLI と MCP** | ターミナルとコーディングエージェントから同じリバースエンジニアリング機能を使えます。 | -| **複雑さを処理** | ツール設定、アプリの読み込み、調査の維持、終了後のクリーンアップを REA が担います。 | -| **一連の調査に対応** | 最初の概要から疑似コード、呼び出し関係、型、実装の手掛かりまで掘り下げられます。 | -| **ローカルで解析** | 解析は Mac 上で実行され、REA がバイナリをホスト型解析サービスへ送ることはありません。 | -| **コンテキストを維持** | 質問ごとに解析を最初からやり直さず、複数のバイナリを続けて調査できます。 | +| | | +| ---------------------- | ---------------------------------------------------------------------------------------------------- | +| **エージェント向け** | コンパイル済みアプリについて質問し、推測ではなく根拠を集めさせることができます。 | +| **CLI と MCP** | ターミナルとコーディングエージェントから同じリバースエンジニアリング機能を使えます。 | +| **複雑さを処理** | ツール設定、アプリの読み込み、調査の維持、終了後のクリーンアップを REA が担います。 | +| **一連の調査に対応** | 最初の概要から疑似コード、呼び出し関係、型、実装の手掛かりまで掘り下げられます。 | +| **ローカルで解析** | 解析は対応するローカルホストで実行され、REA がバイナリをホスト型解析サービスへ送ることはありません。 | +| **コンテキストを維持** | 質問ごとに解析を最初からやり直さず、複数のバイナリを続けて調査できます。 | ## クイックスタート -### コーディングエージェントから(推奨) +### セットアップを実行(推奨) + +REA をエージェントで使うための設定を行います: ```bash -npx --yes rea-agents@latest setup +npx rea-agents setup ``` -エージェントに REA のセットアップを依頼してください。Mac を確認し、必要なインストールを説明して承認を求め、システムプロンプトを案内します。完全なツールを読み込むため再起動を求められた場合は、セットアップ後に再起動してください。 +**Agent Integration** を選び、設定するエージェントを選択して、計画を確認・承認します。Setup は MCP 接続と REA の調査ワークフローを設定します。既存の Hopper または Ghidra に接続でき、Hopper がなければインストールを提案できます。 -### 始める前に +変更は事前に表示され、既存の設定はバックアップされます。要件と追加オプションは[インストールガイド](docs/installation.md)を参照してください。 -- macOS 12 以降 -- Ubuntu 24.04+、Fedora 41+、または 64 ビット Arch Linux -- Node.js 22.19+ または 24.11+ と、Node に付属する npm +### エージェントで使う -`rea setup` は変更計画を表示し、確認後に適用します。Homebrew、Node.js、npm をインストールまたは更新しません。[Hopper](https://www.hopperapp.com/) がない場合は公式パッケージを提案します。Hopper は別製品で、ライセンスは別途必要です。 +設定後にエージェントを再起動し、調べたいアプリや機能を説明します。REA は Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf を設定できます。Devin は検出のみです。その他のエージェントは下記の MCP 設定を使えます。 -64 ビット Linux に Ghidra 12.1.4 PUBLIC と完全な 64 ビット JDK 21 がすでにある場合、Setup は承認後に `GHIDRA_INSTALL_DIR` と任意の `JAVA_HOME` も登録できます。REA は Ghidra や Java をダウンロード、インストール、変更しません。Ghidra プロバイダーは隔離された読み取り専用 headless セッションで、インベントリ、逆コンパイル、アセンブリ、呼び出し関係、型付き参照、xref、CFG、関数 dossier を提供します。GUI 状態と変更操作は引き続き利用できません。 +Hopper はデモモードで使えます。初回起動の画面ではデモを選択するか、既存のライセンスを入力してください。 -#### Linux のインストールとトラブルシューティング +### ターミナルで使う -Ubuntu 24.04+、Fedora 41+、64 ビット Arch Linux では、REA が公式の DEB、RPM、または Arch パッケージを取得し、公開されたサイズとチェックサムを検証してから `apt-get`、`dnf`、または `pacman` で依存関係を解決します。root 以外では `pkexec` がシステム承認を表示します。REA は `sudo` を呼び出しません。 - -既定のランチャーは `/opt/hopper/bin/Hopper` です。別の場所では `HOPPER_LAUNCHER_PATH` を設定してください。Doctor が解析エンジン不足を報告した場合は `ldd /opt/hopper/bin/Hopper | grep 'not found'` を実行し、不足ライブラリを入れて `rea setup` を再実行します。REA は対応する Hopper デモ版を専用 Xvfb ディスプレイで起動し、解析セッションごとに Hopper が提示するデモモードを選択します。デスクトップの `DISPLAY` や有料ライセンスは不要ですが、デモ版にはベンダー所定の制限があります。`~/.local/bin` も `PATH` に追加してください。 - -```bash -# 1. REA をセットアップ -curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash -npx --yes rea-agents@latest setup -``` - -macOS やインストーラーから確認を求められた場合は、その操作を完了してから同じコマンドをもう一度実行してください。 - -### 2. コーディングエージェントを再起動 - -Setup は Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf、Devin を検出します。検出した最初の 6 クライアントは自動設定しますが、Devin はローカル MCP 設定境界が文書化されていないため、検出結果を報告するだけで変更しません。設定されたクライアントを再起動して REA を読み込んでください。 - -### 3. エージェントに依頼 - -アプリは名前で指定できます。コーディングエージェントがアプリを探し、REA に必要なプログラムファイルを渡します。 - -```text -REA でメモアプリをリバースエンジニアリングしてください。検索機能の仕組みと -根拠を示し、SQLite を使って私のプロジェクト向けに同様の機能を実装してください。 -``` - -問題がある場合は次を実行します: +設定後に実行します: ```bash npx -y rea-agents@latest doctor -rea uninstall -rea uninstall --purge-data +npx -y rea-agents@latest analyze /Applications/Notes.app ``` +### rea コマンドをインストール + +コマンドラインツールをインストールします: + +```bash +curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +``` + +Node.js と npm を先にインストールしてください。ターミナルで実行すると、インストーラーは `rea` を追加してセットアップを開始します。 + +npm でインストールし、セットアップを実行することもできます: + +```bash +npm install --global rea-agents +rea setup +``` + +### 要件 + +- macOS 12 以降 +- Ubuntu 24.04+、Fedora 41+、または 64 ビット Arch Linux +- Node.js 22.19+ または 24.11+ と npm + +ネイティブバイナリ解析には Hopper または Ghidra が必要です。Hopper は別製品です。デモにはベンダー所定の制限がありますが、有料ライセンスは必須ではありません。 + +Ghidra は Linux x64 と macOS x64/arm64 に対応します。Ghidra 12.1.4 と完全な 64 ビット JDK 21 を別途インストールし、REA で使うように設定してください。macOS ではホストのアーキテクチャに合うネイティブデコンパイラーも必要です。 + +Setup はインストールを確認し、パスを保存できます。Ghidra、Java、Node.js、npm、Homebrew のインストールや更新は行いません。 + +Windows の Ghidra 解析は利用できません。プロセスの所有権、プライベートディレクトリの権限、安全なパス検証が未実装のため、Ghidra と Java を正しくインストールしても有効になりません。[Windows Ghidra P0](docs/windows-ghidra-p0.md)を参照してください。 + +### トラブルシューティング + +`npx -y rea-agents@latest doctor` はホスト、依存関係、解析ツール、エージェント設定を変更せずに確認します。構造化された診断には `--json` を追加してください。 + +Linux の既定ランチャーは `/opt/hopper/bin/Hopper` です。別の場所には `HOPPER_LAUNCHER_PATH` を設定します。ファイルがあるのに解析エンジンが見つからない場合は、`ldd /opt/hopper/bin/Hopper | grep 'not found'` で不足ライブラリを確認してください。詳しくは [Hopper ガイド](docs/installation.md#hopper)を参照してください。 + +### 更新とアンインストール + +- `rea upgrade` は現在の REA インストールを更新します。 +- `rea uninstall` は REA が管理するエージェント登録とワークフローファイルを削除します。Hopper は残ります。 +- `rea uninstall --purge-data` は REA のキャッシュと状態も削除します。それらを削除したい場合にだけ使ってください。 + +## 現在の対応状況 + +REA は CLI と MCP からネイティブバイナリ、JavaScript/Electron アプリ、.NET アセンブリ、Web サイトを解析できます。使える操作はホスト、対象、選択した解析ツールによって異なります。 + +- Hopper はネイティブ解析と注釈操作に対応します。GUI の動作はプラットフォームによって異なります。 +- Ghidra は Linux x64 と macOS x64/arm64 で、一覧、検索、逆コンパイル、アセンブリ、呼び出し、参照、命令、型の検査など 22 の読み取り専用操作を提供します。GUI 操作や変更操作はありません。 +- ブラウザー、Electron、プロセスの実行時ワークフローには、それぞれ設定、承認、終了処理の要件があります。詳細は [English README](README.md#current-status) を参照してください。 +- Windows の Ghidra 解析は未対応です。進捗は [#527](https://github.com/morluto/rea/issues/527) で確認できます。 + ## ひとつのプロンプトで調査を完結 ```text @@ -149,22 +189,26 @@ REA は手順 1〜5 のバイナリ解析を処理し、手順 6 はエージェ ## 調査ツールカタログ -| ツール群 | 数 | 例 | -| ---------------------- | --: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| バイナリ調査 | 39 | プロシージャ、疑似コード、アセンブリ、文字列、名前、セグメント、callers、callees、xrefs、注釈 | -| 合成解析 | 15 | `binary_overview`, `analyze_function`, `inspect_native_api`, `batch_decompile`, `get_call_graph`, `find_xrefs_to_name`, Swift / ObjC 検出 | -| macOS ネイティブ | 7 | Mach-O メタデータ、署名、plist、アーキテクチャ、Swift デマングル。Hopper 起動不要 | -| アーティファクトグラフ | 5 | ディレクトリと対応パッケージの調査、Interface Builder UI グラフ、Apple アセットカタログのメタデータ、明示選択された抽出 | -| Managed PE/CLI | 8 | PE/CLI 識別、メタデータメンバー、CIL ハッシュ、P/Invoke/ネイティブ境界宣言と検証、アプリケーショングラフ投影、逆コンパイル再構成インポート、構造的 token 再マッピング、ランタイム相関計画、バージョン比較 | -| ブラウザ観察 | 9 | origin 限定 CDP 取得、bundle/source map 解析、WebMCP 検出、セッション、capture diff、視覚証拠 | -| Electron 解析 | 5 | canonical ファイルルート内の受動観察、有界な静的アプリマッピング、Evidence に基づく静的/実行時の照合 | -| JavaScript ランタイム | 2 | 承認済みのアタッチ専用 Node/Electron Inspector ターゲット検出と、評価や計装を行わない有界なスクリプト/実行コンテキスト観察 | -| アプリケーション | 10 | 有界なクロスレイヤー追跡、一意限定のバージョン比較、静的なエクスポート戻り値形状比較、承認済み Linux 隔離 extracted-module replay、マネージドランタイム特性評価、再構築カバレッジ閉包、決定論的な義務台帳 | -| バイナリセッション | 22 | `open_binary`、`binary_session`、証拠バンドル、有限リプレイ状態機械、プロセス/成果物/関数比較、残余未知レジストリ | +| ツール分類 | 数 | 用途 | +| -------------------- | --: | --------------------------------------------------------------------------- | +| バイナリ検査 | 39 | 関数、疑似コード、アセンブリ、文字列、シンボル、参照、注釈 | +| 組み合わせた解析 | 15 | 概要、関数解析、一括逆コンパイル、呼び出しグラフ、Swift と ObjC | +| macOS ネイティブ | 7 | Mach-O メタデータ、署名、plist、アーキテクチャ、Swift 名の復元 | +| ファイルとパッケージ | 5 | ディレクトリとパッケージ、Interface Builder、Apple リソース、抽出 | +| .NET PE/CLI | 8 | アセンブリ識別、メタデータ、CIL、ネイティブ呼び出し、比較、再構築の取り込み | +| ブラウザー観察 | 9 | ページ、スクリプト、ソースマップ、WebMCP、スクリーンショット、比較 | +| Electron 解析 | 5 | ページ観察、アプリ構造、静的・実行時結果の対応付け、承認済み操作 | +| JavaScript 実行時 | 2 | 既存の Node/Electron Inspector に接続し、スクリプトと実行コンテキストを観察 | +| アプリのワークフロー | 10 | 機能追跡、バージョン比較、戻り値構造の比較、隔離実行、再実装の検証 | +| バイナリセッション | 22 | 対象切り替え、根拠の保存、プロセス・関数比較、未解決事項の記録 | + +## ロードマップ + +次の作業はネイティブ対象の検証拡大、JavaScript と .NET のバージョン比較、実行時の観察と再実装の検証です。Setup はエージェント連携と Hopper のインストールを選択できます。他の解析ツールのインストールは今後の作業です。[インストールのロードマップ](docs/roadmap.md)と[解析ツールの評価](docs/provider-evaluation.md)を参照してください。 ## 他のコーディングエージェントで使う -Setup は Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf、Devin を検出し、最初の 6 クライアントを自動設定します。Devin は検出結果を報告するだけで変更しません。ローカル MCP サーバーに対応するコーディングエージェントなら、次の設定で REA を利用できます。 +Setup は Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf を設定できます。Devin は検出結果のみを報告します。ローカル MCP サーバーに対応するエージェントは、次の設定でも接続できます。 @@ -193,7 +237,7 @@ flowchart LR Ghidra --> App ``` -CLI と MCP サーバーは同じ解析エンジンを使います。ターミナルのコマンドは終了時にアプリを閉じ、エージェントのセッションは調査中アプリを開いたままにします。 +CLI と MCP サーバーは同じ解析処理を使います。ターミナルコマンドは完了後に自分のブリッジセッションを解放し、エージェントセッションは調査中の接続を維持できます。REA セッションを閉じても、ユーザーが利用中の Hopper は終了しません。 ## CLI @@ -229,7 +273,7 @@ REA は必要なときに Hopper を起動します。Hopper のランチャー
Hopper を先に起動する必要がありますか? -いいえ。REA が必要時に起動します。すでに起動している Hopper にも対応します。 +いいえ。REA が必要時に起動します。Hopper が起動済みでも使えますが、既存の GUI ドキュメントには接続せず、新しい解析ドキュメントを開きます。
diff --git a/README_ko.md b/README_ko.md index ecc5bc2fe9..6149292439 100644 --- a/README_ko.md +++ b/README_ko.md @@ -4,7 +4,7 @@ # REA: 무엇이든 리버스 엔지니어링 -### 코딩 에이전트가 무엇이든 리버스 엔지니어링할 수 있게 하는 하나의 CLI 및 MCP 서버 +### 에이전트로 앱의 동작부터 네이티브 바이너리까지 조사하세요. **마음에 드는 기능을 찾고, 작동 방식을 이해하고, 원하는 방식으로 구현하세요.** @@ -13,35 +13,50 @@ [![MCP tool catalog](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](#조사-도구-카탈로그) [![Node.js 22+](https://img.shields.io/badge/Node.js-22.19%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE) +[![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM) -[빠른 시작](#빠른-시작) · [바이너리에서 동작까지](#바이너리에서-동작까지) · [도구 카탈로그](#조사-도구-카탈로그) · [작동 방식](#작동-방식) · [FAQ](#faq) +[빠른 시작](#빠른-시작) · [현재 지원 범위](#현재-지원-범위) · [바이너리에서 동작까지](#바이너리에서-동작까지) · [조사 도구 카탈로그](#조사-도구-카탈로그) · [로드맵](#로드맵) · [작동 방식](#작동-방식) + + + + + +
+ + Discord
+ 리버스 엔지니어링 커뮤니티에 참여하세요 +

+ Discord · 질문과 답변 · 작업 공유 +

-curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +npx rea-agents setup + +
+ +Hopper에서 분석 브리지를 시작하고 네이티브 바이너리를 조사하는 REA --- -어떤 앱에서 마음에 드는 기능을 자신의 제품에도 넣고 싶나요? 소스 코드가 없어도 앱을 코딩 에이전트에 전달할 수 있습니다. REA를 사용하면 에이전트가 기능을 조사하고 작동 방식을 이해한 뒤, 사용자의 기술 스택, 디자인, 요구 사항에 맞는 버전을 구현할 수 있습니다. +앱에서 마음에 드는 기능을 찾았다면 에이전트에게 REA로 조사해 달라고 요청하세요. 소스 코드가 없어도 앱을 분석하고, 기능의 동작과 근거를 설명한 뒤, 프로젝트에 맞는 기능을 구현할 수 있습니다. -REA는 이 과정을 하나의 CLI 및 MCP 서버로 제공합니다. 에이전트는 컴파일된 앱을 조사하고 기능의 작동 방식을 추적한 뒤 알아낸 내용을 일반 코딩 작업에 활용할 수 있습니다. 복잡한 리버스 엔지니어링 도구는 REA가 하나의 인터페이스 뒤에서 처리합니다. +REA는 네이티브 바이너리, JavaScript/Electron 앱, .NET 어셈블리, 웹사이트 분석 도구를 제공합니다. 에이전트와 터미널에서 같은 도구를 사용할 수 있습니다. 분석은 로컬에서 실행되며 결과에는 근거와 제한 사항이 포함됩니다. + +Setup은 에이전트를 설정하고 기존 Hopper 또는 Ghidra 설치에 연결합니다. 승인 후 Hopper를 설치할 수도 있습니다. ## 에이전트에게 바로 요청하기 -```bash -npx rea-agents setup -``` - -그런 다음 요청하세요. +[설정](#빠른-시작)을 마친 뒤 에이전트를 다시 시작하고 요청하세요. ```text -REA를 설정하고 메모 앱을 리버스 엔지니어링해 주세요. 검색 기능의 작동 방식과 -그렇게 판단한 이유를 보여 주고, 제 프로젝트에 비슷한 기능을 구현해 주세요. +메모 앱의 검색 기능이 어떻게 동작하는지 조사하고 근거를 보여 주세요. +그다음 제 프로젝트에 비슷한 기능을 구현해 주세요. ``` -메모 앱은 예시일 뿐입니다. 이해하고 싶은 앱을 지정하거나 먼저 개요부터 살펴보라고 요청할 수 있습니다. +메모 앱 대신 조사할 앱을 지정하거나 먼저 개요를 요청할 수 있습니다. ## 바이너리에서 동작까지 @@ -53,70 +68,96 @@ REA는 분석을 바이너리 증거에 근거하게 합니다. 원본 소스 ## REA를 사용하는 이유 -| | | -| ------------------ | ---------------------------------------------------------------------------------- | -| **에이전트용** | 컴파일된 앱에 관해 질문하고 추측 대신 증거를 수집하게 합니다. | -| **CLI와 MCP** | 터미널과 코딩 에이전트에서 동일한 리버스 엔지니어링 기능을 사용합니다. | -| **복잡성 처리** | 도구 설정, 앱 열기, 조사 유지, 작업 후 정리를 REA가 처리합니다. | -| **전체 조사 과정** | 첫 개요에서 의사 코드, 호출 관계, 타입, 구현 단서까지 이어서 조사합니다. | -| **로컬 분석** | 분석은 Mac에서 실행되며 REA는 바이너리를 호스팅 분석 서비스에 업로드하지 않습니다. | -| **컨텍스트 유지** | 질문마다 분석을 처음부터 시작하지 않고 여러 바이너리를 연속으로 조사합니다. | +| | | +| ------------------ | --------------------------------------------------------------------------------------------------- | +| **에이전트용** | 컴파일된 앱에 관해 질문하고 추측 대신 증거를 수집하게 합니다. | +| **CLI와 MCP** | 터미널과 코딩 에이전트에서 동일한 리버스 엔지니어링 기능을 사용합니다. | +| **복잡성 처리** | 도구 설정, 앱 열기, 조사 유지, 작업 후 정리를 REA가 처리합니다. | +| **전체 조사 과정** | 첫 개요에서 의사 코드, 호출 관계, 타입, 구현 단서까지 이어서 조사합니다. | +| **로컬 분석** | 분석은 지원되는 로컬 호스트에서 실행되며 REA는 바이너리를 호스팅 분석 서비스에 업로드하지 않습니다. | +| **컨텍스트 유지** | 질문마다 분석을 처음부터 시작하지 않고 여러 바이너리를 연속으로 조사합니다. | ## 빠른 시작 -### 코딩 에이전트에서 시작하기(권장) +### 설정 실행하기(권장) + +REA를 에이전트에 연결하세요. ```bash -npx --yes rea-agents@latest setup +npx rea-agents setup ``` -에이전트에게 REA 설정을 요청하세요. Mac을 확인하고 필요한 설치 내용을 설명한 뒤 승인을 요청하며 시스템 프롬프트를 안내합니다. 전체 도구를 불러오기 위해 재시작하라고 하면 설정 후 에이전트를 재시작하세요. +**Agent Integration**을 선택하고 설정할 에이전트를 고른 뒤 계획을 검토하고 승인하세요. Setup은 MCP 연결과 REA의 조사 워크플로를 설정합니다. 기존 Hopper나 Ghidra에 연결하거나 Hopper 설치를 제안할 수 있습니다. -### 시작하기 전에 +변경 전에 계획을 표시하고 기존 설정을 백업합니다. 요구 사항과 추가 옵션은 [설치 안내](docs/installation.md)를 참고하세요. -- macOS 12 이상 -- Ubuntu 24.04+, Fedora 41+ 또는 64비트 Arch Linux -- Node.js 22.19+ 또는 24.11+ 및 Node와 함께 제공되는 npm +### 에이전트에서 사용하기 -`rea setup`은 전체 변경 계획을 표시하고 확인 후 적용합니다. Homebrew, Node.js 또는 npm을 설치하거나 업데이트하지 않습니다. [Hopper](https://www.hopperapp.com/)가 없으면 공식 패키지 설치를 제안합니다. Hopper는 별도 라이선스가 필요한 독립 소프트웨어입니다. +설정 후 에이전트를 다시 시작하고 조사할 앱이나 기능을 설명하세요. REA는 Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf를 설정할 수 있습니다. Devin은 감지만 합니다. 다른 에이전트는 아래 MCP 설정을 사용할 수 있습니다. -64비트 Linux에 Ghidra 12.1.4 PUBLIC과 완전한 64비트 JDK 21이 이미 설치되어 있다면 Setup은 승인 후 `GHIDRA_INSTALL_DIR`과 선택 사항인 `JAVA_HOME`도 등록할 수 있습니다. REA는 Ghidra나 Java를 다운로드, 설치 또는 수정하지 않습니다. Ghidra 공급자는 격리된 읽기 전용 headless 세션에서 인벤토리, 디컴파일, 어셈블리, 호출 관계, 형식이 지정된 참조, xref, CFG 및 함수 dossier를 제공합니다. GUI 상태와 변경 작업은 계속 사용할 수 없습니다. +Hopper는 데모 모드로 사용할 수 있습니다. 첫 실행 안내가 나오면 데모를 선택하거나 기존 라이선스를 입력하세요. -#### Linux 설치 및 문제 해결 +### 터미널에서 실행하기 -Ubuntu 24.04+, Fedora 41+, 64비트 Arch Linux에서 REA는 공식 DEB, RPM 또는 Arch 패키지를 내려받아 게시된 크기와 체크섬을 검증한 뒤 `apt-get`, `dnf` 또는 `pacman`으로 의존성을 설치합니다. root가 아니면 `pkexec`가 시스템 승인 창을 표시합니다. REA는 `sudo`를 호출하지 않습니다. - -기본 실행 파일은 `/opt/hopper/bin/Hopper`입니다. 다른 위치에 설치했다면 `HOPPER_LAUNCHER_PATH`를 설정하세요. Doctor가 분석 엔진 누락을 보고하면 `ldd /opt/hopper/bin/Hopper | grep 'not found'`를 실행하고 누락된 라이브러리를 설치한 다음 `rea setup`을 다시 실행하세요. REA는 지원되는 Hopper 데모 빌드를 전용 Xvfb 디스플레이에서 실행하고 분석 세션마다 Hopper가 제공하는 데모 모드를 선택합니다. 데스크톱 `DISPLAY`나 유료 라이선스는 필요하지 않지만 데모에는 공급업체가 정한 제한이 있습니다. `~/.local/bin`도 `PATH`에 추가해야 합니다. - -```bash -# 1. REA 설정 -curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash -npx --yes rea-agents@latest setup -``` - -macOS나 설치 프로그램이 확인을 요청하면 해당 절차를 완료하고 같은 명령을 다시 실행하세요. - -### 2. 코딩 에이전트 재시작 - -Setup은 Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin을 감지합니다. 감지된 앞의 여섯 클라이언트는 자동으로 구성하지만, Devin은 문서화된 로컬 MCP 구성 경계가 없어 감지만 보고하고 변경하지 않습니다. 구성된 클라이언트를 다시 시작해 REA를 불러오세요. - -### 3. 에이전트에게 요청 - -앱 이름만 말해도 됩니다. 코딩 에이전트가 앱을 찾아 REA에 필요한 프로그램 파일을 전달합니다. - -```text -REA로 메모 앱을 리버스 엔지니어링해 주세요. 검색 기능의 작동 방식과 증거를 보여 주고, -SQLite를 사용해 제 프로젝트에 비슷한 기능을 구현해 주세요. -``` - -문제가 있으면 다음을 실행하세요. +설정 후 실행하세요. ```bash npx -y rea-agents@latest doctor -rea uninstall -rea uninstall --purge-data +npx -y rea-agents@latest analyze /Applications/Notes.app ``` +### rea 명령 설치하기 + +명령줄 도구를 설치하세요. + +```bash +curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +``` + +Node.js와 npm이 먼저 설치되어 있어야 합니다. 터미널에서 실행하면 설치 프로그램이 `rea`를 설치하고 설정을 시작합니다. + +npm으로 설치한 뒤 설정을 실행할 수도 있습니다. + +```bash +npm install --global rea-agents +rea setup +``` + +### 요구 사항 + +- macOS 12 이상 +- Ubuntu 24.04+, Fedora 41+ 또는 64비트 Arch Linux +- Node.js 22.19+ 또는 24.11+와 npm + +네이티브 바이너리 분석에는 Hopper 또는 Ghidra가 필요합니다. Hopper는 별도 소프트웨어입니다. 데모에는 공급업체의 제한이 있지만 유료 라이선스가 필수는 아닙니다. + +Ghidra는 Linux x64와 macOS x64/arm64를 지원합니다. Ghidra 12.1.4와 완전한 64비트 JDK 21을 별도로 설치한 뒤 REA가 사용하도록 설정하세요. macOS에서는 호스트 아키텍처에 맞는 네이티브 디컴파일러도 필요합니다. + +Setup은 설치를 확인하고 경로를 저장할 수 있습니다. Ghidra, Java, Node.js, npm, Homebrew를 설치하거나 업데이트하지 않습니다. + +Windows Ghidra 분석은 사용할 수 없습니다. 프로세스 소유권, 비공개 디렉터리 권한, 안전한 경로 검사가 구현되지 않았으므로 Ghidra와 Java를 올바르게 설치해도 분석을 활성화할 수 없습니다. [Windows Ghidra P0](docs/windows-ghidra-p0.md)를 참고하세요. + +### 문제 해결 + +`npx -y rea-agents@latest doctor`는 호스트, 의존성, 분석 도구, 에이전트 설정을 변경 없이 확인합니다. 구조화된 진단에는 `--json`을 추가하세요. + +Linux의 기본 Hopper 실행 파일은 `/opt/hopper/bin/Hopper`입니다. 다른 위치에는 `HOPPER_LAUNCHER_PATH`를 설정하세요. 파일이 있는데도 분석 엔진이 없다고 하면 `ldd /opt/hopper/bin/Hopper | grep 'not found'`로 누락된 라이브러리를 확인하세요. 자세한 내용은 [Hopper 안내](docs/installation.md#hopper)를 참고하세요. + +### 업데이트와 제거 + +- `rea upgrade`는 현재 REA 설치를 업데이트합니다. +- `rea uninstall`은 REA가 관리하는 에이전트 등록과 워크플로 파일을 제거합니다. Hopper는 유지합니다. +- `rea uninstall --purge-data`는 REA 캐시와 상태도 삭제합니다. 해당 데이터를 지우려는 경우에만 사용하세요. + +## 현재 지원 범위 + +REA는 CLI와 MCP로 네이티브 바이너리, JavaScript/Electron 앱, .NET 어셈블리, 웹사이트를 분석합니다. 사용할 수 있는 작업은 호스트, 대상, 선택한 분석 도구에 따라 다릅니다. + +- Hopper는 네이티브 분석과 주석 작업을 지원합니다. GUI 동작은 플랫폼에 따라 다릅니다. +- Ghidra는 Linux x64와 macOS x64/arm64에서 목록, 검색, 디컴파일, 어셈블리, 호출, 참조, 명령어, 타입 검사 등 읽기 전용 작업 22개를 제공합니다. GUI나 변경 작업은 제공하지 않습니다. +- 브라우저, Electron, 프로세스 런타임 워크플로에는 각각 설정, 승인, 종료 처리 요구 사항이 있습니다. 자세한 내용은 [English README](README.md#current-status)를 참고하세요. +- Windows Ghidra 분석은 아직 사용할 수 없습니다. 진행 상황은 [#527](https://github.com/morluto/rea/issues/527)에서 확인하세요. + ## 하나의 프롬프트로 전체 조사 ```text @@ -149,22 +190,26 @@ REA는 1–5단계의 바이너리 분석을 처리합니다. 6단계는 에이 ## 조사 도구 카탈로그 -| 도구 그룹 | 수 | 예시 | -| ------------------- | --: | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 바이너리 검사 | 39 | 프로시저, 의사 코드, 어셈블리, 문자열, 이름, 세그먼트, callers, callees, xrefs, 주석 | -| 합성 분석 | 15 | `binary_overview`, `analyze_function`, `inspect_native_api`, `batch_decompile`, `get_call_graph`, `find_xrefs_to_name`, Swift 및 ObjC 탐색 | -| macOS 네이티브 도구 | 7 | Mach-O 메타데이터, 코드 서명, plist, 아키텍처, Swift 디맹글링. Hopper 실행 불필요 | -| 아티팩트 그래프 | 5 | 디렉터리와 지원 패키지 검사, Interface Builder UI 그래프, Apple 에셋 카탈로그 메타데이터, 명시적으로 선택한 추출 | -| Managed PE/CLI | 8 | PE/CLI ID, 메타데이터 멤버, CIL 해시, P/Invoke/네이티브 경계 선언 및 검증, 애플리케이션 그래프 투영, 디컴파일 재구성 가져오기, 구조적 token 재매핑, 런타임 상관 계획, 버전 비교 | -| 브라우저 관찰 | 9 | origin 제한 CDP 캡처, bundle/source map 분석, WebMCP 검색, 세션 타임라인, capture diff 및 시각 증거 | -| Electron 분석 | 5 | canonical 파일 루트 내 수동 관찰, 제한된 정적 앱 매핑, Evidence 기반 정적/런타임 조정 | -| JavaScript 런타임 | 2 | 승인된 연결 전용 Node/Electron Inspector 대상 탐색과 평가·계측 없는 제한된 스크립트 및 실행 컨텍스트 관찰 | -| 애플리케이션 | 10 | 제한된 교차 계층 추적, 고유 일치 버전 비교, 정적 export 반환 형태 비교, 승인된 Linux 격리 extracted-module replay, 관리형 런타임 특성화, 재구성 커버리지 폐쇄, 결정론적 의무 원장 | -| 바이너리 세션 | 22 | `open_binary`, `binary_session`, 증거 번들, 유한 replay 상태 머신, 프로세스·아티팩트·함수 비교, 잔여 미지수 레지스트리 | +| 도구 분류 | 수 | 용도 | +| ----------------- | --: | -------------------------------------------------------------------- | +| 바이너리 검사 | 39 | 함수, 의사 코드, 어셈블리, 문자열, 심볼, 참조, 주석 | +| 결합 분석 | 15 | 개요, 함수 분석, 일괄 디컴파일, 호출 그래프, Swift와 ObjC 검사 | +| macOS 네이티브 | 7 | Mach-O 메타데이터, 서명, plist, 아키텍처, Swift 이름 복원 | +| 파일과 패키지 | 5 | 디렉터리와 패키지 검사, Interface Builder, Apple 리소스, 추출 | +| .NET PE/CLI | 8 | 어셈블리 식별, 메타데이터, CIL, 네이티브 호출, 비교, 재구성 가져오기 | +| 브라우저 관찰 | 9 | 페이지, 스크립트, 소스 맵, WebMCP, 스크린샷, 캡처 비교 | +| Electron 분석 | 5 | 페이지 관찰, 앱 구조, 정적·런타임 결과 연결, 승인된 상호작용 | +| JavaScript 런타임 | 2 | 기존 Node/Electron Inspector에 연결해 스크립트와 실행 컨텍스트 관찰 | +| 앱 워크플로 | 10 | 기능 추적, 버전 비교, 반환 구조 비교, 격리 실행, 재구현 검증 | +| 바이너리 세션 | 22 | 대상 전환, 근거 저장, 프로세스·함수 비교, 미해결 항목 기록 | + +## 로드맵 + +다음 작업은 네이티브 대상 검증 확대, JavaScript와 .NET의 버전 비교, 런타임 관찰과 재구현 검증입니다. Setup은 에이전트 연결과 Hopper 설치 선택을 이미 지원합니다. 다른 분석 도구 설치는 향후 작업입니다. [설치 로드맵](docs/roadmap.md)과 [분석 도구 평가](docs/provider-evaluation.md)를 참고하세요. ## 다른 코딩 에이전트에서 사용하기 -Setup은 Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin을 감지하고 앞의 여섯 클라이언트를 자동으로 구성합니다. Devin은 감지만 보고하고 변경하지 않습니다. 로컬 MCP 서버를 지원하는 코딩 에이전트라면 다음 설정으로 REA를 사용할 수 있습니다. +Setup은 Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf를 설정할 수 있습니다. Devin은 감지 결과만 보고합니다. 로컬 MCP 서버를 지원하는 에이전트는 다음 설정으로 연결할 수 있습니다. @@ -193,7 +238,7 @@ flowchart LR Ghidra --> App ``` -CLI와 MCP 서버는 같은 분석 엔진을 사용합니다. 터미널 명령은 끝날 때 앱을 닫고, 에이전트 세션은 조사하는 동안 앱을 열어 둡니다. +CLI와 MCP 서버는 같은 분석 워크플로를 사용합니다. 터미널 명령은 완료 후 자신의 브리지 세션을 해제하고, 에이전트 세션은 조사 중 연결을 유지할 수 있습니다. REA 세션을 닫아도 사용자가 이용 중인 Hopper 앱은 종료하지 않습니다. ## CLI @@ -229,7 +274,7 @@ REA는 필요할 때 Hopper를 시작합니다. Hopper 런처는 내부적으로
Hopper를 미리 실행해야 하나요? -아니요. REA가 필요할 때 시작하며 이미 실행 중인 Hopper도 지원합니다. +아니요. REA가 필요할 때 시작합니다. Hopper가 실행 중이어도 사용할 수 있지만 기존 GUI 문서에 연결하는 대신 새 분석 문서를 엽니다.
diff --git a/README_zh.md b/README_zh.md index 97722066fc..f068114ae6 100644 --- a/README_zh.md +++ b/README_zh.md @@ -4,7 +4,7 @@ # REA:逆向工程一切 -### 一个 CLI 与 MCP 服务器,让编程智能体逆向工程任何程序 +### 使用智能体逆向工程任何程序,从应用行为到原生二进制文件。 **看到喜欢的功能。理解它的原理。按照你的方式实现。** @@ -13,35 +13,49 @@ [![MCP tool catalog](https://img.shields.io/badge/MCP-tool_catalog-5c4ee5?style=flat-square)](#调查工具目录) [![Node.js 22+](https://img.shields.io/badge/Node.js-22.19%2B-339933?style=flat-square&logo=nodedotjs&logoColor=white)](https://nodejs.org/) [![MIT license](https://img.shields.io/badge/license-MIT-f4c430?style=flat-square)](LICENSE) +[![Discord](https://img.shields.io/discord/1556595354999332884?logo=discord&logoColor=white&label=Discord&color=5865F2)](https://discord.gg/GkcryMnJDM) -[快速开始](#快速开始) · [从二进制到行为](#从二进制到行为) · [工具目录](#调查工具目录) · [工作原理](#工作原理) · [常见问题](#常见问题) +[快速开始](#快速开始) · [当前状态](#当前状态) · [从二进制到行为](#从二进制到行为) · [调查工具目录](#调查工具目录) · [路线图](#路线图) · [工作原理](#工作原理) + + + + + +
+ + Discord
+ 加入逆向工程社区 +

+ Discord · 问答 · 成果分享 +

-curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +npx rea-agents setup + +
+ +REA 在 Hopper 中启动分析桥并检查原生二进制文件 --- -看到某个应用中想加入自己产品的功能?即使没有源代码,也可以把应用交给编程智能体。借助 REA,智能体能够调查该功能、理解其工作原理,并按照你的技术栈、设计和需求构建适合你产品的版本。 +看到某个应用中想加入自己产品的功能?让智能体用 REA 调查它。即使没有源代码,智能体也可以检查应用、解释功能的工作方式、展示证据,并为你的项目实现类似功能。 -REA 通过一个 CLI 与 MCP 服务器实现这套流程。智能体可以检查编译后的应用、追踪功能的工作方式,并把了解到的内容用于日常编码。REA 在一个接口背后处理复杂的逆向工程工具。 +REA 提供原生二进制、JavaScript 与 Electron 应用、.NET 程序集和网站的分析工具。你可以从智能体或终端使用它们。分析在本机运行,结果会说明证据和限制。 + +Setup 可以配置智能体、连接已安装的 Hopper 或 Ghidra,也可以在你批准后安装 Hopper。 ## 直接询问智能体 -```bash -npx rea-agents setup -``` - -然后说: +完成[设置](#快速开始)后,重启智能体并提出问题: ```text -逆向工程“备忘录”应用。解释搜索功能的工作方式, -说明你是如何得出结论的,然后为我的项目构建类似功能。 +解释“备忘录”应用的搜索功能,展示证据,然后为我的项目实现类似功能。 ``` -“备忘录”只是示例。你可以说出任何想了解的应用,也可以让智能体先从概览开始。 +把“备忘录”替换成你想了解的应用,也可以先请求概览。 ## 从二进制到行为 @@ -53,70 +67,96 @@ REA 让调查始终以二进制证据为依据。它不会声称能恢复原始 ## 为什么选择 REA -| | | -| ---------------- | -------------------------------------------------------------- | -| **为智能体设计** | 直接询问编译后应用的行为,让智能体搜集证据,而不是猜测。 | -| **CLI 与 MCP** | 在终端或编程智能体中使用同一套逆向工程能力。 | -| **处理复杂流程** | REA 负责工具设置、打开应用、维持调查过程,并在完成后清理资源。 | -| **完整工作流** | 从初步概览推进到伪代码、调用关系、类型和实现线索。 | -| **本地运行** | 分析在你的 Mac 上运行;REA 不会把二进制上传到托管式分析服务。 | -| **保留上下文** | 连续调查多个二进制文件,无需为每个问题重新开始整个分析过程。 | +| | | +| ---------------- | -------------------------------------------------------------------- | +| **为智能体设计** | 直接询问编译后应用的行为,让智能体搜集证据,而不是猜测。 | +| **CLI 与 MCP** | 在终端或编程智能体中使用同一套逆向工程能力。 | +| **处理复杂流程** | REA 负责工具设置、打开应用、维持调查过程,并在完成后清理资源。 | +| **完整工作流** | 从初步概览推进到伪代码、调用关系、类型和实现线索。 | +| **本地运行** | 分析在受支持的本机系统上运行;REA 不会把二进制上传到托管式分析服务。 | +| **保留上下文** | 连续调查多个二进制文件,无需为每个问题重新开始整个分析过程。 | ## 快速开始 -### 使用编程智能体(推荐) +### 运行设置(推荐) + +配置 REA 与智能体的连接: ```bash -npx --yes rea-agents@latest setup +npx rea-agents setup ``` -让智能体设置 REA。它会检查你的 Mac,说明需要安装的内容,先征得同意,并引导你处理系统提示。如果智能体要求重启以加载完整工具,请在设置后重启。 +选择 **Agent Integration**,勾选要配置的智能体,然后查看并批准计划。Setup 会配置 MCP 访问并安装 REA 的调查工作流。它可以连接现有的 Hopper 或 Ghidra,也可以提议安装 Hopper。 -### 开始之前 +Setup 会先展示变更并备份已有配置。要求与更多选项见[安装与设置](docs/installation.md)。 -- macOS 12 或更高版本 -- Ubuntu 24.04+、Fedora 41+ 或 64 位 Arch Linux -- Node.js 22.19+ 或 24.11+,以及随 Node 安装的 npm +### 使用智能体 -`rea setup` 会先显示完整变更计划并请求确认。它不会安装或更新 Homebrew、Node.js 或 npm。缺少 [Hopper](https://www.hopperapp.com/) 时,Setup 会提议安装官方软件包;Hopper 是需要单独许可证的独立软件。 +设置完成后,重启智能体并描述你想了解的应用或功能。REA 可以配置 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI 和 Windsurf。Devin 只会被检测,不会被自动配置;其他智能体可以使用下方的 MCP 配置。 -如果你已在 64 位 Linux 上安装 Ghidra 12.1.4 PUBLIC 和完整的 64 位 JDK 21,Setup 也可以在批准后登记 `GHIDRA_INSTALL_DIR` 和可选的 `JAVA_HOME`。REA 不会下载、安装或修改 Ghidra 或 Java。Ghidra provider 在隔离的只读 headless 会话中提供清单、反编译、汇编、调用关系、带类型的引用、xref、CFG 与函数 dossier;GUI 状态和修改操作仍不可用。 +Hopper 支持演示模式。如果首次启动时出现提示,选择演示模式或输入已有许可证。 -#### Linux 安装与故障排除 +### 从终端运行 -在 Ubuntu 24.04+、Fedora 41+ 和 64 位 Arch Linux 上,REA 会下载 Hopper 官方的 DEB、RPM 或 Arch 软件包,验证发布方提供的大小和校验和,然后通过 `apt-get`、`dnf` 或 `pacman` 安装依赖。非 root 运行时,`pkexec` 会显示系统授权提示;REA 不调用 `sudo`。 - -默认启动器是 `/opt/hopper/bin/Hopper`。自定义安装可设置 `HOPPER_LAUNCHER_PATH`。如果 Doctor 报告缺少分析引擎,请运行 `ldd /opt/hopper/bin/Hopper | grep 'not found'`,安装缺少的系统库后重新运行 `rea setup`。REA 会在私有 Xvfb 显示器上运行受支持的 Hopper 演示版,并为每个分析会话选择 Hopper 提供的演示模式;无需桌面 `DISPLAY` 或付费许可证,但演示版受厂商限制。Linux 上还应确保 `~/.local/bin` 位于 `PATH` 中。 - -```bash -# 1. 安装和配置 REA -curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash -npx --yes rea-agents@latest setup -``` - -如果 macOS 或安装程序要求确认,请完成提示,然后再次运行同一命令。 - -### 2. 重启编程智能体 - -Setup 会检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf 和 Devin。它会自动配置检测到的前六种客户端;由于目前没有明确的本地 MCP 配置边界,检测到 Devin 时只会报告而不会修改。重启已配置的客户端,让它加载 REA。 - -### 3. 直接询问智能体 - -你可以直接说出应用名称。编程智能体会找到应用,并把 REA 所需的程序文件交给它。 - -```text -使用 REA 逆向工程“备忘录”应用。解释搜索功能的工作方式,展示证据, -然后使用 SQLite 为我的项目构建一个类似功能。 -``` - -如果遇到问题,请运行: +设置完成后: ```bash npx -y rea-agents@latest doctor -rea uninstall -rea uninstall --purge-data +npx -y rea-agents@latest analyze /Applications/Notes.app ``` +### 安装 rea 命令 + +安装命令行工具: + +```bash +curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash +``` + +需要预先安装 Node.js 和 npm。在终端中运行时,安装程序会安装 `rea` 并启动设置。 + +也可以用 npm 安装,再运行设置: + +```bash +npm install --global rea-agents +rea setup +``` + +### 运行要求 + +- macOS 12 或更高版本 +- Ubuntu 24.04+、Fedora 41+ 或 64 位 Arch Linux +- Node.js 22.19+ 或 24.11+,以及 npm + +原生二进制分析需要 Hopper 或 Ghidra。Hopper 是独立软件;演示模式有厂商规定的限制,不要求购买许可证。 + +Ghidra 支持 Linux x64 和 macOS x64/arm64。单独安装 Ghidra 12.1.4 和完整的 64 位 JDK 21,然后配置 REA 使用它们。macOS 还需要对应架构的原生反编译器。 + +Setup 可以验证安装并保存路径,不会安装或升级 Ghidra、Java、Node.js、npm 或 Homebrew。 + +Windows Ghidra 分析目前不可用。进程归属、私有目录权限和安全路径检查尚未实现,正确安装 Ghidra 和 Java 也不能启用分析。详见 [Windows Ghidra P0](docs/windows-ghidra-p0.md)。 + +### 故障排查 + +运行 `npx -y rea-agents@latest doctor`,检查主机、依赖、分析工具和智能体配置。该命令不会修改文件。添加 `--json` 可获取结构化诊断。 + +Linux 上的默认 Hopper 启动器为 `/opt/hopper/bin/Hopper`。其他路径可通过 `HOPPER_LAUNCHER_PATH` 指定。如果文件存在但仍报告缺少分析引擎,运行 `ldd /opt/hopper/bin/Hopper | grep 'not found'` 检查缺少的系统库。安装详情见 [Hopper 指南](docs/installation.md#hopper)。 + +### 更新与卸载 + +- `rea upgrade` 更新当前 REA 安装。 +- `rea uninstall` 移除 REA 管理的智能体配置项和工作流文件,保留 Hopper。 +- `rea uninstall --purge-data` 还会删除 REA 的缓存和状态。仅在需要移除这些数据时使用。 + +## 当前状态 + +REA 可以通过 CLI 和 MCP 分析原生二进制、JavaScript/Electron 应用、.NET 程序集和网站。具体操作取决于主机、目标和所选分析工具。 + +- Hopper 支持原生分析和注释操作;GUI 行为取决于平台。 +- Ghidra 在 Linux x64 和 macOS x64/arm64 上提供 22 项只读操作,包括清单、搜索、反编译、汇编、调用关系、引用、指令与类型检查。它不提供 GUI 或修改操作。 +- 浏览器、Electron 和进程运行时工作流有独立的配置、批准和生命周期要求。详见 [English README](README.md#current-status) 中的完整状态说明。 +- Windows Ghidra 分析尚未启用,跟踪进展见 [#527](https://github.com/morluto/rea/issues/527)。 + ## 一个提示词,完成一次完整调查 ```text @@ -149,22 +189,26 @@ REA 负责第 1–5 步中的二进制分析。第 6 步由智能体使用其常 ## 调查工具目录 -| 工具类别 | 数量 | 示例 | -| ----------------- | ---: | --------------------------------------------------------------------------------------------------------------------------------------------------- | -| 二进制检查 | 39 | 过程、伪代码、汇编、字符串、名称、段、调用者、被调用者、交叉引用、注释 | -| 组合分析 | 15 | `binary_overview`, `analyze_function`, `inspect_native_api`, `batch_decompile`, `get_call_graph`, `find_xrefs_to_name`、Swift 与 ObjC 发现 | -| macOS 原生工具 | 7 | Mach-O 元数据、代码签名、plist、架构与 Swift 符号还原,无需启动 Hopper | -| 制品图谱 | 5 | 目录及支持的软件包内联检查、Interface Builder UI 图解、Apple 资源目录元数据分页检查,以及显式选择的事务式提取 | -| Managed PE/CLI | 8 | PE/CLI 身份、元数据成员、CIL 哈希、P/Invoke/原生边界声明与验证、应用图谱投影、反编译重建导入、结构化 token 重映射、运行时关联计划与跨版本比较 | -| 浏览器观察 | 9 | 精确来源 CDP 抓取、bundle/source map 分析、WebMCP 发现、会话时间线、capture diff 与视觉证据 | -| Electron 分析 | 5 | 限定 canonical 文件根的被动观察、有界静态应用映射,以及基于 Evidence 的静态/运行时对账 | -| JavaScript 运行时 | 2 | 经批准的只附加 Node/Electron Inspector 目标发现,以及不执行求值或插桩的有界脚本和执行上下文观察 | -| 应用工作流 | 10 | 有界跨层追踪、唯一匹配跨版本图比较、静态导出返回形状比较、经批准的 Linux 隔离 extracted-module replay、托管运行时表征、重建覆盖闭合和确定性义务账本 | -| 二进制会话 | 22 | `open_binary`、`binary_session`、证据包、有限重放状态机、进程、制品与函数比较、残余未知项注册表 | +| 工具类别 | 数量 | 用途 | +| ----------------- | ---: | --------------------------------------------------------- | +| 二进制检查 | 39 | 函数、伪代码、汇编、字符串、符号、段、引用与注释 | +| 组合分析 | 15 | 概览、函数分析、批量反编译、调用图、Swift 与 ObjC 检查 | +| macOS 原生工具 | 7 | Mach-O 元数据、代码签名、plist、架构与 Swift 符号还原 | +| 制品检查 | 5 | 目录与软件包检查、Interface Builder、Apple 资源目录与提取 | +| .NET PE/CLI | 8 | 程序集身份、元数据、CIL、原生调用声明、成员比较与重建导入 | +| 浏览器观察 | 9 | 页面、脚本、来源映射、WebMCP 工具、截图与捕获比较 | +| Electron 分析 | 5 | 页面观察、应用结构、静态与运行时结果关联、批准的交互场景 | +| JavaScript 运行时 | 2 | 连接现有 Node/Electron Inspector,观察脚本与执行上下文 | +| 应用工作流 | 10 | 功能追踪、版本比较、返回结构比较、隔离重放与重建验证 | +| 二进制会话 | 22 | 目标切换、证据包、进程与函数比较、待解决问题记录 | + +## 路线图 + +接下来的工作包括更多原生目标验证、JavaScript 与 .NET 跨版本比较,以及运行时观察和重建验证。当前设置已支持选择智能体集成和 Hopper 安装;安装其他分析工具仍是后续工作。详见[安装路线图](docs/roadmap.md)和[分析工具评估](docs/provider-evaluation.md)。 ## 与其他编程智能体一起使用 -Setup 会检测 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI、Windsurf 和 Devin,并自动配置检测到的前六种客户端;检测到 Devin 时只会报告而不会修改。任何支持本地 MCP 服务器的编程智能体都可以使用以下配置连接 REA。 +Setup 可以配置 Claude Code、Claude Desktop、Codex、Cursor、Gemini CLI 和 Windsurf。Devin 只会被检测,不会被修改。任何支持本地 MCP 服务器的智能体都可以使用以下配置连接 REA。 @@ -193,7 +237,7 @@ flowchart LR Ghidra --> App ``` -CLI 与 MCP 服务器使用相同的分析引擎。终端命令完成后会关闭应用;智能体会话则会在调查期间保持应用打开。 +CLI 与 MCP 服务器使用相同的分析流程。终端命令完成后释放自己创建的桥接会话;智能体会话可以在调查期间保持连接。关闭 REA 会话不会退出用户正在使用的 Hopper 应用。 ## CLI @@ -223,7 +267,7 @@ REA 会推导明确的格式和架构参数,以避免常见的 FAT 与 ARM 选 ## 安全模型 -每个桥会话都使用随机能力令牌和仅限当前用户的 Unix 套接字。协议消息有大小限制,面向调用者的错误不会暴露启动器 stderr 或内部异常原因。Ghidra 会话还使用隔离的临时项目,不会打开或修改用户自己的 Ghidra 项目。 +每个桥会话都使用随机能力令牌和仅限当前用户的 Unix 套接字。诊断保留本机路径、摘要和错误位置等排查信息,同时移除凭据和认证令牌。Ghidra 会话还使用隔离的临时项目,不会打开或修改用户自己的 Ghidra 项目。 这不是沙箱,也无法防御以同一操作系统用户身份运行的恶意进程。打开不可信二进制文件会让所选本地提供商以当前用户权限进行解析和分析。请按照 [SECURITY.md](SECURITY.md) 中的私密流程报告漏洞。 @@ -231,7 +275,7 @@ REA 会推导明确的格式和架构参数,以避免常见的 FAT 与 ARM 选
Hopper 是否需要提前运行? -不需要。REA 会在操作需要时启动 Hopper,也支持已经运行的 Hopper。 +不需要。REA 会在操作需要时启动 Hopper。Hopper 已经运行时也可以使用,但 REA 会打开新的分析文档,不会连接并复用现有 GUI 文档。
diff --git a/docs/adr/0001-provider-selection-and-analysis-profiles.md b/docs/adr/0001-provider-selection-and-analysis-profiles.md index 91817ae42f..d918390d07 100644 --- a/docs/adr/0001-provider-selection-and-analysis-profiles.md +++ b/docs/adr/0001-provider-selection-and-analysis-profiles.md @@ -6,7 +6,7 @@ target binding, analysis-profile commitment, and snapshot/Evidence migration are implemented. Ghidra discovery, target/profile resolution, doctor checks, the private headless-session foundation, ten read-only inventory capabilities, - and nine function-analysis capabilities are implemented with real + and twelve function-analysis capabilities are implemented with real cross-format conformance. ## Context diff --git a/docs/adr/README.md b/docs/adr/README.md index 5c2ea750c8..d6caea6fc7 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -4,8 +4,8 @@ Accepted decisions describe the architecture that implementation PRs must follow. Acceptance does not by itself mean the behavior is shipped; each record states its implementation status separately. -| ADR | Status | Implementation | -| ------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------------------------------- | -| [0001: Provider selection and analysis profiles](0001-provider-selection-and-analysis-profiles.md) | Accepted | Foundation shipped; capability work continues | -| [0002: Controlled JavaScript replay authority and sandbox policy](0002-controlled-replay-authority-and-sandbox.md) | Accepted | Linux x86_64 extracted-module replay shipped | -| [0003: Managed-code evidence and provider boundary](0003-managed-code-evidence-and-provider-boundary.md) | Accepted | PE/CLI triage shipped; deeper contracts planned | +| ADR | Status | Implementation | +| ------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------- | +| [0001: Provider selection and analysis profiles](0001-provider-selection-and-analysis-profiles.md) | Accepted | Provider selection and 22 Ghidra operations shipped on Linux/macOS; Windows analysis blocked | +| [0002: Controlled JavaScript replay authority and sandbox policy](0002-controlled-replay-authority-and-sandbox.md) | Accepted | Linux x86_64 extracted-module replay shipped | +| [0003: Managed-code evidence and provider boundary](0003-managed-code-evidence-and-provider-boundary.md) | Accepted | Eight static-analysis and runtime-planning tools shipped; native-body mapping and runtime execution planned | diff --git a/docs/electron-observation.md b/docs/electron-observation.md index e8c3a0a141..591f6524af 100644 --- a/docs/electron-observation.md +++ b/docs/electron-observation.md @@ -4,8 +4,9 @@ REA can attach to a user-owned Electron/Chromium CDP endpoint and inspect existi This passive runtime surface is distinct from the target-free static [`analyze_javascript_application`](javascript-artifact-reconstruction.md) -workflow. Static analysis reads an approved ASAR or extracted directory under -observations and static inferences are never silently treated as the same fact. +workflow. Static analysis reads a local ASAR or extracted directory without +executing application code. Passive observation inspects an existing Electron +page. The results keep static inferences and runtime observations distinct. Use the separate [`reconcile_javascript_runtime`](javascript-runtime-reconciliation.md) workflow when both Evidence sets already exist. @@ -18,7 +19,7 @@ The capability is disabled by default: export REA_ELECTRON_OBSERVE_ENABLED=true ``` -The capability is disabled by default. Its permission ceiling is loopback-only. REA accepts local hostless `file://` URLs that resolve to regular files; remote hosts, encoded path separators, and nonexistent paths are rejected. There is no separate filesystem-root configuration. +Its permission ceiling is loopback-only. REA accepts local hostless `file://` URLs that resolve to regular files; remote hosts, encoded path separators, and nonexistent paths are rejected. There is no separate filesystem-root configuration. ## Workflow diff --git a/docs/installation.md b/docs/installation.md index efab46209c..ad699578c4 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -63,34 +63,21 @@ Supported options are `--version `, `--dry-run`, `--no-setup`, `--no-pro ## Review setup changes -`rea setup` uses an inline, scroll-preserving journey inspired by the clarity of -PostHog's CLI wizard. It begins with the outcome instead of the installer -mechanics: +`rea setup` detects your agents and analysis tools, then asks what to configure: -- investigate local applications from a supported agent; -- recover evidence through an available deep-analysis provider; -- use the bundled skill for a repeatable investigation workflow. +1. Choose **Agent integration** to install the guided workflow and configure MCP + access. Select the agents that should receive a registration. Detected agents + are selected by default; deselect any you do not want to change. +2. Select **Hopper** if you want setup to connect or install it. Setup can also + save verified paths for an existing Ghidra installation. +3. Review the plan and approve it. The approval prompt defaults to **Yes**, but + you must confirm before REA applies changes. -REA then summarizes the detected clients and asks which capabilities to set up. -The capability picker pre-selects `Agent integration` (the MCP registration and -matching guided workflow together) when detected agents exist, and presents the -optional Hopper provider alongside it. Selecting agent integration opens a second -checklist for the exact detected agents that should receive a registration; all -detected agents are pre-selected. Detection provides context and pre-selection; -it does not authorize a configuration write until the user confirms. +Selecting agent integration installs the bundled workflow even if you deselect +all agents. Choosing no capabilities exits without changes. You can cancel at +any prompt. -Because the user has explicitly invoked `rea setup`, the wizard biases toward the -happy path: capabilities and agents are pre-selected, and the final approval -defaults to **Yes**. The user can still deselect any item or cancel at any prompt. -Choosing no capabilities exits without changes. Selecting agent integration -always includes the bundled skill, even if all agents are deselected. The picker -keeps its navigation, selection, confirmation, and cancellation keys visible -instead of relying on a transient hint. - -Every selected path converges on the same exact preflight. REA validates the -current state, prints the proposed effects, and asks for final approval with -**Yes** as the default. Selection alone never authorizes a mutation. The plan -identifies: +Before applying changes, REA checks your current configuration. The plan lists: - an existing Hopper installation, a verified existing Ghidra installation, or the official Hopper package it proposes to install; - each detected agent configuration path; @@ -103,13 +90,9 @@ Hopper installation or any file write. Declining, pressing Ctrl-C, or selecting nothing makes no changes. Agent configuration writes preserve unrelated entries, create backups, use atomic replacement, and verify their result. -Progress remains append-only so completed and failed operations stay visible in -terminal history. After a successful run, the completion message names the -verified capabilities now available, such as configured MCP clients, the -selected analysis provider, and the installed skill, and gives the corresponding -next action. When an agent must restart to load its registration, REA says so; -otherwise it suggests beginning an investigation. It does not advertise a -capability that the final diagnostic check did not verify. +After setup, REA reports which agents, analysis tools, and workflow files passed +its final checks. Restart any agent named in the completion message, then begin +your investigation. Failed steps and diagnostics remain in terminal history. Select exact clients in scripts with repeatable `--client` flags, or retain automatic discovery explicitly with `--all-detected`. Use `--skill=false` to diff --git a/docs/javascript-application-workflows.md b/docs/javascript-application-workflows.md index 823dca7250..ff68fc9bd2 100644 --- a/docs/javascript-application-workflows.md +++ b/docs/javascript-application-workflows.md @@ -7,7 +7,7 @@ are `trace_application_feature`, `trace_javascript_semantics`, `compare_javascript_export_shapes`; their CLI equivalents use the same names with hyphens. -Both workflows consume Evidence produced by +These workflows consume Evidence produced by `analyze_javascript_application` or `reconcile_javascript_runtime`. They do not read an artifact, execute application code, attach to a process, or open a native-analysis provider. Static artifact observations, passive runtime diff --git a/docs/managed-code-analysis.md b/docs/managed-code-analysis.md index c2cb508088..f649b21c84 100644 --- a/docs/managed-code-analysis.md +++ b/docs/managed-code-analysis.md @@ -1,26 +1,31 @@ # Managed-code analysis plan -This document turns -[ADR-0003](adr/0003-managed-code-evidence-and-provider-boundary.md) into an -implementation and verification plan. REA currently ships read-only PE/CLI -triage and exact identity through `inspect_managed_artifact` and -`rea inspect-managed-artifact`, plus file-backed metadata, signature, -method-body CIL, exception-region, call-edge, and field-access inspection -through `inspect_managed_members` and `rea inspect-managed-members`, and -declared ModuleRef/ImplMap/PInvoke and native implementation boundary inventory -through `inspect_managed_native_boundaries` and -`rea inspect-managed-native-boundaries`, plus obfuscation-resistant member -comparison through `compare_managed_members` and `rea compare-managed-members`, -managed/native export or function Evidence matching through -`verify_managed_native_boundaries` and `rea verify-managed-native-boundaries`, -decompiler reconstruction import through `import_managed_reconstruction` and -`rea import-managed-reconstruction`, and default-disabled runtime-correlation -admission planning through `plan_managed_runtime_correlation` and -`rea plan-managed-runtime-correlation`, plus static managed graph projection -through `project_managed_application_graph` and -`rea project-managed-application-graph`. Native-body bridge mapping and runtime -execution remain planned behavior. The current product inventory remains the -one in [`product-catalog.json`](product-catalog.json). +REA inspects .NET PE/CLI artifacts without loading or executing their code. +It can identify an assembly, inspect metadata and CIL, compare members across +builds, and connect declared native calls to supplied native-analysis evidence. +CIL is Common Intermediate Language, the instruction format used by managed +assemblies. + +The eight shipped tools are: + +| Task | MCP tool | +| --------------------------------------------------------------------------- | ----------------------------------- | +| Identify an artifact and its managed deployment form | `inspect_managed_artifact` | +| Inspect types, signatures, method bodies, calls, and field access | `inspect_managed_members` | +| List declared native calls and native implementation indicators | `inspect_managed_native_boundaries` | +| Compare members across builds and map build-local tokens | `compare_managed_members` | +| Check native call declarations against supplied export or function evidence | `verify_managed_native_boundaries` | +| Import decompiled code against verified static member identities | `import_managed_reconstruction` | +| Plan a separately approved runtime experiment without executing it | `plan_managed_runtime_correlation` | +| Add managed findings to an application graph | `project_managed_application_graph` | + +Each has a matching CLI command: replace underscores with hyphens and prefix +the name with `rea`, for example `rea inspect-managed-artifact`. +Native-body bridge mapping and runtime execution remain planned. + +This guide describes the implementation and verification of +[ADR-0003](adr/0003-managed-code-evidence-and-provider-boundary.md). The canonical +tool inventory is [`product-catalog.json`](product-catalog.json). ## Analysis objective diff --git a/docs/native-investigation.md b/docs/native-investigation.md index e8ab06a059..52a897d524 100644 --- a/docs/native-investigation.md +++ b/docs/native-investigation.md @@ -127,10 +127,14 @@ UI actions may change application data or trigger network activity. ## Provider and verification boundaries -Ghidra 12.1.4 with a full 64-bit JDK 21 is bring-your-own. Linux x64 and macOS -x64/arm64 are admitted; macOS requires the matching native decompiler. Windows -x64 P0 remains limited to approved native PE applications. There is no GUI or -mutation authority and no automatic fallback to Hopper. +Install Ghidra 12.1.4 and a full 64-bit JDK 21 separately, then configure REA to +use them. Ghidra analysis supports Linux x64 and macOS x64/arm64; macOS requires +the matching native decompiler. Windows Ghidra analysis is unavailable until +Job Object process ownership, private runtime DACLs, and reparse-safe path checks +are implemented and verified. See [Windows Ghidra P0](windows-ghidra-p0.md) and +[issue #527](https://github.com/morluto/rea/issues/527). +Ghidra has no GUI or mutation authority, and REA never falls back automatically +to Hopper. - `npm run verify:ghidra`: host-native debug/stripped targets, native type layout, instruction/call facts, value dependencies and process/project cleanup. @@ -138,8 +142,12 @@ mutation authority and no automatic fallback to Hopper. relative tables, plus ARM64 Mach-O on an ARM64 macOS host. - `npm run verify:apple-dispatch`: source-built Objective-C protocols/classes and Swift conformances/vtables, repeated after stripping local symbols. -- `npm run verify:native-ui`: one source-owned fixture window, selected capture - or a reported OS permission denial, changed-target rejection and cleanup. +- `npm run verify:native-ui`: one source-owned fixture window, successful + selected-window capture and approved actions, changed-target rejection, and + cleanup. Missing OS permissions fail this lane. +- `npm run verify:native-ui:permissions`: permits a permission-denial result and + reports `positive_e2e: false` when capture is denied. That result verifies the + permission boundary, not successful UI capture or actions. macOS ARM64 is the real host verified during this implementation. Admission of macOS Intel does not claim an Intel verification run. Unsupported metadata and diff --git a/docs/provider-evaluation.md b/docs/provider-evaluation.md index 1ba7cf1a21..dd6c2a61d0 100644 --- a/docs/provider-evaluation.md +++ b/docs/provider-evaluation.md @@ -1,25 +1,21 @@ # Static-analysis provider evaluation -Status: the Ghidra read-only analysis provider is shipped on Linux x64 and macOS x64/arm64 with matching native tools, and has -an experimental Windows x64 P0 for approved native PE applications. The provider -validates an exact bring-your-own Ghidra 12.1.4/JDK 21 environment, resolves a -provider/version/profile commitment, runs one isolated read-only headless -import, and publishes 22 operation-level capabilities after the authenticated -post-analysis handshake. +Ghidra read-only analysis is available on Linux x64 and macOS x64/arm64. +Install Ghidra 12.1.4 and a full 64-bit JDK 21 separately, then configure REA to +use them. macOS installations need the matching native decompiler. -The provider-neutral target, provider registry, deterministic target binding, -analysis-profile commitment, Evidence provenance, snapshot caching, and bounded -provider-process lifecycle foundations are implemented. The Ghidra launcher, -packaged Java bridge, doctor/setup projection, bounded client lifecycle, and -multi-target real Linux verifier, curated Windows CI, and controlled real -Windows verifier are also implemented. Program identity, -procedure/string/symbol inventory, memory blocks, address/name and -containing-procedure resolution, complete inventory search, function metadata, -decompilation, assembly, resolved calls, typed references, xrefs, CFG, and -function dossiers are admitted. A provider is not a drop-in replacement for -Hopper: every capability is mapped explicitly, with truthful `unavailable`, -unknown, or degraded results where the engine cannot provide equivalent -semantics. +REA imports one target into a temporary project and exposes 22 read-only +operations after analysis completes. They cover inventories, search, +decompilation, assembly, function metadata, resolved calls, references, control +flow, instructions, and recovered types. Results identify the provider version, +analysis settings, target digest, and any unavailable or incomplete facts. +Ghidra does not expose Hopper's GUI or annotation operations. + +Windows Ghidra analysis is unavailable, including on a correctly configured +Ghidra/JDK host. Job Object process ownership, private runtime DACLs, and +reparse-safe path checks are not implemented. Package and adapter tests do not +establish real Windows analysis support. See [Windows Ghidra P0](windows-ghidra-p0.md) +and [issue #527](https://github.com/morluto/rea/issues/527). [ADR-0001](adr/0001-provider-selection-and-analysis-profiles.md) fixes the provider registry, deterministic selection, target binding, analysis profile, @@ -31,8 +27,8 @@ follow. - Keep the existing provider-neutral CLI and MCP tool names. - Bind one deep-analysis provider to a target for the target's lifetime; never fail over silently between Hopper and Ghidra. -- Start with bring-your-own Ghidra and a compatible Java runtime. Setup must not - install or upgrade Java. +- Use an existing Ghidra installation and a compatible Java runtime. Setup must + not install or upgrade Ghidra or Java. - Run Ghidra headlessly in an owned process with a private temporary project, startup and cleanup deadlines, caller cancellation, and complete replies. - Prefer a packaged Java bridge loaded through Ghidra's script path. PyGhidra @@ -53,10 +49,10 @@ follow. `GHIDRA_INSTALL_DIR` must identify an extracted official 12.1.4 release; optional `JAVA_HOME` must identify a 64-bit full JDK 21, otherwise doctor probes -`java`/`javac` or `java.exe`/`javac.exe` from `PATH`. Linux accepts x86, x86-64, -ARM, and ARM64 ELF, PE, and Mach-O executable targets. Windows P0 accepts only -native x86-64 PE applications and rejects DLLs, managed images, unknown roles, -other formats, and other architectures before launch. +`java`/`javac` or `java.exe`/`javac.exe` from `PATH`. Supported Linux and macOS +hosts accept compatible ELF, PE, and Mach-O executable targets. Host admission +and target compatibility are separate checks. The intended Windows P0 accepts +only native x86-64 PE applications; it remains blocked before launch. The launcher creates one ephemeral runtime root with project, home/cache/config/data/temp, logs, descriptor, endpoint, target snapshot, and @@ -65,18 +61,19 @@ It passes `-readOnly` and `-deleteProject`, and uses Ghidra's default analysis and resource settings; inherited Java option injection variables are cleared. On Linux, the mode-0600 descriptor carries the random token without exposing it in argv or environment and the Java bridge binds a mode-restricted -Unix socket. Windows uses authenticated IPv4 loopback with a strict token-free -endpoint record. Both transports report actual -Ghidra/language/compiler/analysis/import-digest metadata, accept only the exact -authenticated `ping`, `shutdown`, and ten -inventory plus nine function-analysis methods, and deletes the socket. Close, -cancellation, timeout, -malformed protocol, or process exit stops the owned process resources and -removes the entire runtime root. Windows P0 uses bounded `taskkill` tree -termination and explicitly does not claim Job Object, private-DACL, or -reparse-point authority; see [Windows Ghidra P0](windows-ghidra-p0.md). +Unix socket. macOS uses the same local transport. The bridge reports actual +Ghidra/language/compiler/analysis/import-digest metadata and accepts only +authenticated `ping`, `shutdown`, ten inventory methods, and twelve +function-analysis methods. Close, cancellation, timeout, malformed protocol, +or process exit stops the owned process resources, closes the socket, and +removes the runtime root. -The provider catalog lists only the 19 proved Ghidra operations. GUI cursor, +The experimental Windows transport uses authenticated IPv4 loopback with a +token-free endpoint record, but cannot start while the native authority is +unavailable. Its `taskkill` cleanup code does not establish Job Object ownership, +private DACLs, or reparse-safe paths. + +The provider catalog lists the 22 Ghidra operations. GUI cursor, navigation, and mutation operations remain absent; the router therefore reports them unavailable instead of borrowing Hopper semantics or inferring capability from a successful import. @@ -125,24 +122,24 @@ Mach-O target coverage. It requires `clang`, LLD, and `lld-link`; set these tools before compilation. Keeping this matrix separate lets Linux host/provider acceptance run with only the host compiler. -`npm run verify:ghidra:windows` generates a deterministic source-owned native -x86-64 PE application, proves the Windows P0 operations through the production Windows -launcher and loopback transport, checks target/snapshot/import SHA-256 linkage, -and requires project, endpoint, process, and runtime cleanup. Passing that lane -proves only the documented P0 boundary, not the remaining Windows security -gates. +`npm run verify:ghidra:windows` remains blocked by the missing Windows native +authority. After those controls are implemented, the lane must check the +source-owned native x86-64 PE fixture, all read-only operations, +target/snapshot/import SHA-256 linkage, and project, endpoint, process, and +runtime cleanup. The existence of this verifier is not evidence that Windows +Ghidra analysis works. ## Shared provider-process foundation `src/process/` now provides the mechanisms that a long-lived Hopper or Ghidra -adapter genuinely shares: POSIX run-token-authenticated process-group ownership, +adapter shares: POSIX run-token-authenticated process-group ownership, ephemeral temporary runtime roots, one absolute startup deadline, correlated request cancellation and lifecycle-deadline cleanup, bounded stdout and stderr retention with exact byte counts, process-exit diagnostics, and bounded TERM-to-KILL shutdown. Reusable fixtures exercise exit, timeout, cancellation, graceful termination, forced termination, double-close, spawn failure, and resource release. Windows -P0 adds bounded process-tree termination as an explicitly weaker host backend; -Job Object ownership remains unimplemented. +process-tree termination code exists, but the missing Job Object and private +runtime controls prevent it from establishing an available Ghidra session. The foundation does not define a bridge schema, socket framing, health payload, analysis model, or shutdown acknowledgement. Hopper keeps its authenticated @@ -152,12 +149,12 @@ only the generic process mechanisms. ## Shortlist -| Provider | License / automation surface | What it brings | REA fit and blockers | -| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| [Ghidra](https://github.com/NationalSecurityAgency/ghidra) | Apache-2.0 source license; `analyzeHeadless`, Java APIs, and PyGhidra | Broad static analysis, many processors and formats, scripting, and project/database workflows | Read-only analysis shipped: exact BYO checks, isolated state and provider lifecycle, serial API queue, packaged bridge, 19 inventory/function operations, and real ELF/PE/Mach-O x86-64 plus AArch64 conformance. GUI and mutation semantics remain intentionally unavailable. | -| [Rizin](https://github.com/rizinorg/rizin) / [rz-pipe](https://github.com/rizinorg/rz-pipe) | Rizin repository contains LGPL-3.0 and GPL-3.0 components; `rizin`, `rz-bin`, and language bridges through `rzpipe` | Portable CLI analysis, disassembly/debugging, many architectures and file formats, JSON command output | Good candidate for a process-backed Linux provider and fast metadata fallback. License/component inventory must be preserved; command output needs version-pinned parsers and semantic conformance before evidence is trusted. | -| [LIEF](https://github.com/lief-project/LIEF) | Apache-2.0; C++, Python, and other bindings | Deterministic parsing and modification of ELF, PE, Mach-O, COFF, and related executable formats; headers, sections, symbols, relocations, and functions | Best near-term complement, not a decompiler replacement. It can cover format metadata and artifact evidence without a long-lived analysis process; function semantics, pseudocode, CFG, and cross-reference parity remain out of scope unless separately demonstrated. | -| [Binary Ninja](https://docs.binary.ninja/dev/index.html) | API/documentation components are MIT, while the analysis product is licensed by edition; commercial, Ultimate, or Headless license is required for headless automation | Python/Core/C++/Rust APIs, headless loading, IL layers, function analysis, plugins, and configurable analysis | Strong technical fit for a native provider, especially function dossiers. Commercial licensing, license-secret handling, native runtime packaging, and multithreaded lifecycle rules are material deployment blockers. | +| Provider | License / automation surface | What it brings | REA fit and blockers | +| ------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Ghidra](https://github.com/NationalSecurityAgency/ghidra) | Apache-2.0 source license; `analyzeHeadless`, Java APIs, and PyGhidra | Static analysis, multiple processors and formats, scripting, and project/database workflows | 22 read-only operations shipped on Linux/macOS with installation checks, temporary projects, a serial API queue, and real ELF/PE/Mach-O conformance. Windows analysis is blocked; GUI and mutation operations are unavailable. | +| [Rizin](https://github.com/rizinorg/rizin) / [rz-pipe](https://github.com/rizinorg/rz-pipe) | Rizin repository contains LGPL-3.0 and GPL-3.0 components; `rizin`, `rz-bin`, and language bridges through `rzpipe` | Portable CLI analysis, disassembly/debugging, many architectures and file formats, JSON command output | Good candidate for a process-backed Linux provider and fast metadata fallback. License/component inventory must be preserved; command output needs version-pinned parsers and semantic conformance before evidence is trusted. | +| [LIEF](https://github.com/lief-project/LIEF) | Apache-2.0; C++, Python, and other bindings | Deterministic parsing and modification of ELF, PE, Mach-O, COFF, and related executable formats; headers, sections, symbols, relocations, and functions | Best near-term complement, not a decompiler replacement. It can cover format metadata and artifact evidence without a long-lived analysis process; function semantics, pseudocode, CFG, and cross-reference parity remain out of scope unless separately demonstrated. | +| [Binary Ninja](https://docs.binary.ninja/dev/index.html) | API/documentation components are MIT, while the analysis product is licensed by edition; commercial, Ultimate, or Headless license is required for headless automation | Python/Core/C++/Rust APIs, headless loading, IL layers, function analysis, plugins, and configurable analysis | Strong technical fit for a native provider, especially function dossiers. Commercial licensing, license-secret handling, native runtime packaging, and multithreaded lifecycle rules are material deployment blockers. | ## Recommended order