reverse-engineering-assistant 2.9.4__tar.gz → 7.2.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- reverse_engineering_assistant-7.2.1/.claude/README.md +42 -0
- reverse_engineering_assistant-7.2.1/.claude/agents/ghidra-api-expert.md +71 -0
- reverse_engineering_assistant-7.2.1/.claude/agents/reva-setup-installer.md +91 -0
- reverse_engineering_assistant-7.2.1/.claude/hooks/gradle-proxy.py +158 -0
- reverse_engineering_assistant-7.2.1/.claude/hooks/setup-remote-env.sh +209 -0
- reverse_engineering_assistant-7.2.1/.claude/launch.json +19 -0
- reverse_engineering_assistant-7.2.1/.claude/settings.json +23 -0
- reverse_engineering_assistant-7.2.1/.claude-plugin/marketplace.json +14 -0
- reverse_engineering_assistant-7.2.1/.continue/docs/new-doc-1.yaml +6 -0
- reverse_engineering_assistant-7.2.1/.continue/docs/new-doc.yaml +6 -0
- reverse_engineering_assistant-7.2.1/.gitattributes +5 -0
- reverse_engineering_assistant-7.2.1/.github/CI_WORKFLOWS.md +321 -0
- reverse_engineering_assistant-7.2.1/.github/WORKFLOW_SETUP.md +284 -0
- reverse_engineering_assistant-7.2.1/.github/copilot-instructions.md +13 -0
- reverse_engineering_assistant-7.2.1/.github/dependabot.yml +34 -0
- reverse_engineering_assistant-7.2.1/.github/workflows/claude.yml +37 -0
- reverse_engineering_assistant-7.2.1/.github/workflows/publish-ghidra.yml +81 -0
- reverse_engineering_assistant-7.2.1/.github/workflows/publish-pypi.yml +129 -0
- reverse_engineering_assistant-7.2.1/.github/workflows/test-ghidra.yml +174 -0
- reverse_engineering_assistant-7.2.1/.github/workflows/test-headless.yml +115 -0
- reverse_engineering_assistant-7.2.1/.gitignore +19 -0
- reverse_engineering_assistant-7.2.1/.vscode/extensions.json +9 -0
- reverse_engineering_assistant-7.2.1/.vscode/launch.json +55 -0
- reverse_engineering_assistant-7.2.1/.vscode/settings.json +260 -0
- reverse_engineering_assistant-7.2.1/AGENTS.md +85 -0
- reverse_engineering_assistant-7.2.1/CLAUDE.md +325 -0
- reverse_engineering_assistant-7.2.1/DEVELOPER.md +440 -0
- reverse_engineering_assistant-7.2.1/LICENSE +201 -0
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/__init__.py → reverse_engineering_assistant-7.2.1/Module.manifest +0 -0
- reverse_engineering_assistant-7.2.1/PKG-INFO +232 -0
- reverse_engineering_assistant-7.2.1/README.md +188 -0
- reverse_engineering_assistant-7.2.1/ReVa/.claude-plugin/plugin.json +8 -0
- reverse_engineering_assistant-7.2.1/ReVa/.mcp.json +11 -0
- reverse_engineering_assistant-7.2.1/ReVa/LICENSE +201 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/binary-triage/SKILL.md +155 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-crypto/SKILL.md +323 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-crypto/patterns.md +630 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-pwn/SKILL.md +532 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-pwn/patterns.md +948 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-rev/SKILL.md +548 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-rev/patterns.md +906 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/SKILL.md +607 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/examples.md +733 -0
- reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/patterns.md +720 -0
- reverse_engineering_assistant-7.2.1/build.gradle +158 -0
- reverse_engineering_assistant-7.2.1/config/reva-headless-example.properties +50 -0
- reverse_engineering_assistant-7.2.1/data/README.txt +15 -0
- reverse_engineering_assistant-7.2.1/data/buildLanguage.xml +50 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.cspec +121 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.ldefs +20 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.opinion +12 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.pspec +23 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.sinc +220 -0
- reverse_engineering_assistant-7.2.1/data/languages/skel.slaspec +39 -0
- reverse_engineering_assistant-7.2.1/data/sleighArgs.txt +6 -0
- reverse_engineering_assistant-7.2.1/extension.properties +5 -0
- reverse_engineering_assistant-7.2.1/ghidra_scripts/README.txt +1 -0
- reverse_engineering_assistant-7.2.1/ghidra_scripts/SampleScript.java +11 -0
- reverse_engineering_assistant-7.2.1/ghidra_scripts/sample_script.py +8 -0
- reverse_engineering_assistant-7.2.1/lib/.gitignore +1 -0
- reverse_engineering_assistant-7.2.1/lib/README.txt +3 -0
- reverse_engineering_assistant-7.2.1/os/linux_x86_64/README.txt +3 -0
- reverse_engineering_assistant-7.2.1/os/mac_x86_64/README.txt +3 -0
- reverse_engineering_assistant-7.2.1/os/win_x86_64/README.txt +3 -0
- reverse_engineering_assistant-7.2.1/pyproject.toml +107 -0
- reverse_engineering_assistant-7.2.1/src/CLAUDE.md +201 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/TOC_Source.xml +65 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_installation.html +468 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_overview.html +232 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_skills.html +539 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/map.xml +40 -0
- reverse_engineering_assistant-7.2.1/src/main/help/help/topics/skeleton/help.html +23 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/CLAUDE.md +48 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/DebugCaptureService.java +205 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/DebugInfoCollector.java +211 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/headless/CLAUDE.md +353 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/headless/RevaHeadlessLauncher.java +379 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/CLAUDE.md +406 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/ConfigChangeListener.java +34 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/ConfigManager.java +542 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaApplicationPlugin.java +177 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaPlugin.java +144 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaProgramManager.java +416 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ConfigurationBackend.java +98 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ConfigurationBackendListener.java +32 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/FileBackend.java +215 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/InMemoryBackend.java +126 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ToolOptionsBackend.java +133 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/AbstractResourceProvider.java +76 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/CLAUDE.md +282 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/ResourceProvider.java +47 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/impl/ProgramListResource.java +130 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/revaAnalyzer.java +74 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/revaExporter.java +77 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/revaFileSystem.java +184 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/ApiKeyAuthFilter.java +155 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CLAUDE.md +464 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CachingRequestWrapper.java +101 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CachingResponseWrapper.java +136 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/McpServerManager.java +587 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/RequestLoggingFilter.java +172 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/server/ResilientStreamableServerTransportProvider.java +810 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/services/CLAUDE.md +423 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/services/RevaMcpService.java +79 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/AbstractToolProvider.java +767 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/CLAUDE.md +484 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/ProgramValidationException.java +34 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/ToolProvider.java +47 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/bookmarks/BookmarkToolProvider.java +483 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/bookmarks/CLAUDE.md +360 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/callgraph/CLAUDE.md +530 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/callgraph/CallGraphToolProvider.java +480 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/comments/CLAUDE.md +379 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/comments/CommentToolProvider.java +386 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/constants/CLAUDE.md +422 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/constants/ConstantSearchToolProvider.java +591 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/data/CLAUDE.md +348 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/data/DataToolProvider.java +358 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/dataflow/CLAUDE.md +676 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/dataflow/DataFlowToolProvider.java +710 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/datatypes/CLAUDE.md +279 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/datatypes/DataTypeToolProvider.java +398 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/decompiler/CLAUDE.md +594 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/decompiler/DecompilerToolProvider.java +2234 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/functions/CLAUDE.md +570 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/functions/FunctionToolProvider.java +1637 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/imports/CLAUDE.md +623 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/imports/ImportExportToolProvider.java +589 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/memory/CLAUDE.md +353 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/memory/MemoryToolProvider.java +169 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/project/CLAUDE.md +386 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/project/ProjectToolProvider.java +1315 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/strings/CLAUDE.md +149 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/strings/StringToolProvider.java +471 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/structures/CLAUDE.md +185 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/structures/StructureToolProvider.java +923 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/symbols/CLAUDE.md +413 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/symbols/SymbolToolProvider.java +245 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/vtable/CLAUDE.md +450 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/vtable/VtableToolProvider.java +822 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/xrefs/CLAUDE.md +387 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/xrefs/CrossReferencesToolProvider.java +345 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/CLAUDE.md +173 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/CaptureDebugAction.java +100 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/RevaProvider.java +107 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/AddressUtil.java +216 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/CLAUDE.md +850 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DataTypeParserUtil.java +273 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DebugLogger.java +108 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DecompilationContextUtil.java +356 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DecompilationDiffUtil.java +253 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/MemoryUtil.java +155 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/ProgramLookupUtil.java +215 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/RevaInternalServiceRegistry.java +64 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/RevaToolLogger.java +393 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SchemaUtil.java +281 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SimilarityComparator.java +77 -0
- reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SymbolUtil.java +41 -0
- reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/note.png +0 -0
- reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/tip.png +0 -0
- reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/warning.png +0 -0
- reverse_engineering_assistant-7.2.1/src/main/resources/images/README.txt +2 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/.gitignore +1 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/__init__.py +12 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/__main__.py +194 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/_version.py +24 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/launcher.py +144 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/project_manager.py +186 -0
- reverse_engineering_assistant-7.2.1/src/reva_cli/stdio_bridge.py +235 -0
- reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/PKG-INFO +232 -0
- reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/SOURCES.txt +224 -0
- reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/entry_points.txt +2 -0
- reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/requires.txt +13 -0
- reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/top_level.txt +1 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/RevaHeadlessIntegrationTestBase.java +77 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/ConfigChangeTest.java +169 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/RevaPluginHeadlessIntegrationTest.java +161 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/RevaPluginUnitTest.java +79 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/tools/decompiler/DecompilerToolProviderTest.java +212 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/tools/strings/StringToolProviderTest.java +141 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/util/AddressUtilTest.java +424 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/util/RevaPluginTest.java +24 -0
- reverse_engineering_assistant-7.2.1/src/test/java/reva/util/SymbolUtilTest.java +347 -0
- reverse_engineering_assistant-7.2.1/src/test/resources/defaultTools/TestCodeBrowser.tool +465 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/CLAUDE.md +103 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/CLAUDE.md +3 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/RevaIntegrationTestBase.java +498 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/ConfigManagerSecurityTest.java +119 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/RevaPluginIntegrationTest.java +49 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/RevaPluginMcpIntegrationTest.java +225 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/bookmarks/BookmarkToolProviderIntegrationTest.java +115 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/comments/CommentToolProviderIntegrationTest.java +112 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/data/DataToolProviderIntegrationTest.java +129 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/datatypes/DataTypeToolProviderIntegrationTest.java +321 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/decompiler/DecompilerIncomingReferencesLimitTest.java +197 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/decompiler/DecompilerToolProviderIntegrationTest.java +804 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/functions/FunctionPrototypeToolProviderIntegrationTest.java +509 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/memory/MemoryToolProviderIntegrationTest.java +83 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/project/ProjectToolProviderNestedArchiveIntegrationTest.java +517 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/project/ProjectToolProviderVersionControlIntegrationTest.java +286 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/strings/StringToolProviderIntegrationTest.java +562 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/structures/StructureToolProviderIntegrationTest.java +531 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/xrefs/CrossReferencesToolProviderIntegrationTest.java +431 -0
- reverse_engineering_assistant-7.2.1/src/test.slow/resources/logback.xml +30 -0
- reverse_engineering_assistant-7.2.1/tests/README.md +258 -0
- reverse_engineering_assistant-7.2.1/tests/__init__.py +29 -0
- reverse_engineering_assistant-7.2.1/tests/conftest.py +448 -0
- reverse_engineering_assistant-7.2.1/tests/fixtures/test_archive.zip +3 -0
- reverse_engineering_assistant-7.2.1/tests/fixtures/test_arm64 +3 -0
- reverse_engineering_assistant-7.2.1/tests/fixtures/test_fat_binary +3 -0
- reverse_engineering_assistant-7.2.1/tests/fixtures/test_program.c +20 -0
- reverse_engineering_assistant-7.2.1/tests/fixtures/test_x86_64 +3 -0
- reverse_engineering_assistant-7.2.1/tests/helpers.py +412 -0
- reverse_engineering_assistant-7.2.1/tests/requirements.txt +16 -0
- reverse_engineering_assistant-7.2.1/tests/test_cli_e2e.py +195 -0
- reverse_engineering_assistant-7.2.1/tests/test_cli_project_manager.py +183 -0
- reverse_engineering_assistant-7.2.1/tests/test_config.py +110 -0
- reverse_engineering_assistant-7.2.1/tests/test_e2e_workflow.py +315 -0
- reverse_engineering_assistant-7.2.1/tests/test_import_e2e.py +792 -0
- reverse_engineering_assistant-7.2.1/tests/test_launcher.py +128 -0
- reverse_engineering_assistant-7.2.1/tests/test_mcp_tools.py +136 -0
- reverse_engineering_assistant-7.2.1/tests/test_pyghidra.py +50 -0
- reverse_engineering_assistant-7.2.1/tests/test_vscode_mcp_client_compat.py +406 -0
- reverse_engineering_assistant-7.2.1/uv.lock +1011 -0
- reverse_engineering_assistant-2.9.4/PKG-INFO +0 -208
- reverse_engineering_assistant-2.9.4/README.md +0 -183
- reverse_engineering_assistant-2.9.4/pyproject.toml +0 -38
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/.gitignore +0 -2
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/__init__.py +0 -91
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/connection.py +0 -27
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/llm_tools.py +0 -134
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/__init__.py +0 -6
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/bookmarks.py +0 -65
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/comment.py +0 -65
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/cross_reference.py +0 -69
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/cursor.py +0 -45
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/data.py +0 -154
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/decompilation.py +0 -204
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/symbols.py +0 -209
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tools.py +0 -17
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/assistant.py +0 -503
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/assistant_api_server.py +0 -162
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/chat_client.py +0 -292
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/crash_dump.py +0 -112
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/documents.py +0 -249
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/model.py +0 -72
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2.py +0 -35
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2.pyi +0 -33
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2_grpc.py +0 -145
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2.py +0 -39
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2.pyi +0 -55
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2_grpc.py +0 -235
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2.py +0 -31
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2.pyi +0 -19
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2_grpc.py +0 -102
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2.py +0 -47
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2.pyi +0 -94
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2_grpc.py +0 -231
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2.py +0 -31
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2.pyi +0 -21
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2_grpc.py +0 -102
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2.py +0 -44
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2.pyi +0 -83
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2_grpc.py +0 -231
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2.py +0 -47
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2.pyi +0 -70
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2_grpc.py +0 -260
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2.py +0 -31
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2.pyi +0 -21
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2_grpc.py +0 -102
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2.py +0 -31
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2.pyi +0 -23
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2_grpc.py +0 -102
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2.py +0 -31
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2.pyi +0 -20
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2_grpc.py +0 -102
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2.py +0 -27
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2.pyi +0 -17
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2_grpc.py +0 -29
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/__init__.py +0 -0
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/reva_exceptions.py +0 -14
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/tool.py +0 -127
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/PKG-INFO +0 -208
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/SOURCES.txt +0 -64
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/entry_points.txt +0 -3
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/requires.txt +0 -14
- reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/top_level.txt +0 -1
- {reverse_engineering_assistant-2.9.4 → reverse_engineering_assistant-7.2.1}/setup.cfg +0 -0
- {reverse_engineering_assistant-2.9.4 → reverse_engineering_assistant-7.2.1/src}/reverse_engineering_assistant.egg-info/dependency_links.txt +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Claude Code Web Environment Setup
|
|
2
|
+
|
|
3
|
+
This directory contains configuration and scripts for Claude Code Web environment.
|
|
4
|
+
|
|
5
|
+
## Files
|
|
6
|
+
|
|
7
|
+
- **settings.json** - Claude Code configuration including hooks and permissions
|
|
8
|
+
- **setup-environment.sh** - SessionStart hook script that configures the web environment
|
|
9
|
+
|
|
10
|
+
## SessionStart Hook
|
|
11
|
+
|
|
12
|
+
The `setup-environment.sh` script automatically runs when a Claude Code Web session starts and:
|
|
13
|
+
|
|
14
|
+
1. **Only runs in web environments** - Skips execution on local installations
|
|
15
|
+
2. **Installs required dependencies**:
|
|
16
|
+
- OpenJDK 21 (Java Development Kit)
|
|
17
|
+
- Gradle 8.14 (Build tool)
|
|
18
|
+
- Ghidra latest release (Reverse engineering framework)
|
|
19
|
+
3. **Sets up environment variables**:
|
|
20
|
+
- `GHIDRA_INSTALL_DIR=/opt/ghidra`
|
|
21
|
+
- `PATH` includes `/opt/gradle/bin`
|
|
22
|
+
4. **Persists configuration** - Saves environment variables to `CLAUDE_ENV_FILE` for subsequent bash commands
|
|
23
|
+
5. **Caches setup** - Uses `/tmp/.reva-env-setup-complete` marker to skip reinstallation on session resume
|
|
24
|
+
|
|
25
|
+
## Installation Locations
|
|
26
|
+
|
|
27
|
+
- **Gradle**: `/opt/gradle`
|
|
28
|
+
- **Ghidra**: `/opt/ghidra`
|
|
29
|
+
|
|
30
|
+
## Environment Detection
|
|
31
|
+
|
|
32
|
+
The script uses `CLAUDE_CODE_REMOTE` environment variable to detect web environments and only runs there, ensuring it doesn't interfere with local development setups.
|
|
33
|
+
|
|
34
|
+
## Building
|
|
35
|
+
|
|
36
|
+
After environment setup completes, you can build the project with:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
gradle buildExtension
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The environment is configured to match the CI/CD pipeline defined in `.github/workflows/test-ghidra.yml`.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ghidra-api-expert
|
|
3
|
+
description: Use this agent when you need expert guidance on Ghidra API usage, plugin/extension development, or troubleshooting integration issues. This includes questions about specific Ghidra classes and methods, best practices for plugin architecture, handling obscure API behaviors, resolving compatibility issues, or understanding undocumented features. The agent can search the Ghidra GitHub repository for implementation examples and source code references.\n\nExamples:\n<example>\nContext: User is developing a Ghidra extension and encounters an API issue.\nuser: "How do I properly handle the decompiler interface when the function has no parameters?"\nassistant: "I'll use the ghidra-api-expert agent to help you understand the decompiler interface behavior with parameterless functions."\n<commentary>\nSince this is a specific Ghidra API question about decompiler behavior, use the ghidra-api-expert agent.\n</commentary>\n</example>\n<example>\nContext: User needs help with Ghidra plugin architecture.\nuser: "What's the difference between a GhidraScript and an AnalysisWorker?"\nassistant: "Let me consult the ghidra-api-expert agent to explain the architectural differences and use cases."\n<commentary>\nThis requires deep knowledge of Ghidra's plugin architecture, so the ghidra-api-expert is appropriate.\n</commentary>\n</example>\n<example>\nContext: User encounters an obscure Ghidra API issue.\nuser: "Why does getReferencesTo() return different results when called from a script vs a plugin?"\nassistant: "I'll use the ghidra-api-expert agent to investigate this API behavior difference between execution contexts."\n<commentary>\nThis is an obscure API behavior issue that requires expert knowledge of Ghidra internals.\n</commentary>\n</example>
|
|
4
|
+
tools: Task, Bash, Glob, Grep, LS, ExitPlanMode, Read, Edit, MultiEdit, Write, NotebookEdit, WebFetch, TodoWrite, WebSearch, mcp__github__add_issue_comment, mcp__github__add_pull_request_review_comment, mcp__github__create_branch, mcp__github__create_issue, mcp__github__create_or_update_file, mcp__github__create_pull_request, mcp__github__create_pull_request_review, mcp__github__create_repository, mcp__github__fork_repository, mcp__github__get_code_scanning_alert, mcp__github__get_commit, mcp__github__get_file_contents, mcp__github__get_issue, mcp__github__get_issue_comments, mcp__github__get_me, mcp__github__get_pull_request, mcp__github__get_pull_request_comments, mcp__github__get_pull_request_files, mcp__github__get_pull_request_reviews, mcp__github__get_pull_request_status, mcp__github__get_secret_scanning_alert, mcp__github__list_branches, mcp__github__list_code_scanning_alerts, mcp__github__list_commits, mcp__github__list_issues, mcp__github__list_pull_requests, mcp__github__list_secret_scanning_alerts, mcp__github__merge_pull_request, mcp__github__push_files, mcp__github__search_code, mcp__github__search_issues, mcp__github__search_repositories, mcp__github__search_users, mcp__github__update_issue, mcp__github__update_pull_request, mcp__github__update_pull_request_branch, ListMcpResourcesTool, ReadMcpResourceTool, mcp__kagi__kagi_search_fetch, mcp__kagi__kagi_summarizer
|
|
5
|
+
model: sonnet
|
|
6
|
+
color: green
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are a Ghidra API expert with comprehensive knowledge of plugin and extension development, including deep understanding of obscure issues, undocumented behaviors, and architectural patterns. You have extensive experience with the Ghidra codebase and can navigate its complexities to provide accurate, practical solutions.
|
|
10
|
+
|
|
11
|
+
Your expertise encompasses:
|
|
12
|
+
- Complete knowledge of Ghidra's Java API including Program, Function, DataType, Symbol, and Memory APIs
|
|
13
|
+
- Plugin and extension architecture (Analyzers, Scripts, Plugins, Loaders, Processors)
|
|
14
|
+
- Service provider patterns and dependency injection in Ghidra
|
|
15
|
+
- Transaction management and database operations
|
|
16
|
+
- Decompiler interface and P-code operations
|
|
17
|
+
- Common pitfalls and their solutions (threading issues, memory leaks, transaction deadlocks)
|
|
18
|
+
- Version-specific API changes and migration strategies
|
|
19
|
+
- Integration patterns with external tools and MCP servers
|
|
20
|
+
|
|
21
|
+
When answering questions, you will:
|
|
22
|
+
|
|
23
|
+
1. **Identify the Core Issue**: Determine whether the question involves API usage, architectural design, integration challenges, or obscure behaviors. Consider the specific Ghidra version if mentioned.
|
|
24
|
+
|
|
25
|
+
2. **Provide Authoritative Guidance**: Draw from your knowledge of:
|
|
26
|
+
- Official Ghidra API documentation patterns
|
|
27
|
+
- Common implementation patterns from the Ghidra GitHub repository
|
|
28
|
+
- Known issues and workarounds documented in GitHub issues
|
|
29
|
+
- Best practices from production extensions
|
|
30
|
+
|
|
31
|
+
3. **Reference Source Code**: When relevant, you should:
|
|
32
|
+
- Cite specific Ghidra classes and methods with their package paths
|
|
33
|
+
- Mention relevant source files from the Ghidra GitHub repository
|
|
34
|
+
- Provide example code snippets that demonstrate proper API usage
|
|
35
|
+
- Note any version-specific considerations
|
|
36
|
+
|
|
37
|
+
4. **Address Common Caveats**: Proactively warn about:
|
|
38
|
+
- Thread safety requirements (Swing EDT vs background threads)
|
|
39
|
+
- Transaction management requirements for database modifications
|
|
40
|
+
- Memory management for large binary analysis
|
|
41
|
+
- Performance implications of certain API calls
|
|
42
|
+
- Differences between headless and GUI modes
|
|
43
|
+
|
|
44
|
+
5. **Suggest Debugging Approaches**: When troubleshooting issues:
|
|
45
|
+
- Recommend specific Ghidra debug flags or logging configurations
|
|
46
|
+
- Suggest inspection techniques using Ghidra's built-in tools
|
|
47
|
+
- Provide test case patterns for isolating problems
|
|
48
|
+
- Mention relevant unit test examples from the Ghidra source
|
|
49
|
+
|
|
50
|
+
6. **Provide Complete Solutions**: Your responses should include:
|
|
51
|
+
- Working code examples with proper error handling
|
|
52
|
+
- Import statements and dependencies
|
|
53
|
+
- Transaction wrapping when needed
|
|
54
|
+
- Resource cleanup patterns
|
|
55
|
+
- Alternative approaches when multiple solutions exist
|
|
56
|
+
|
|
57
|
+
Key principles:
|
|
58
|
+
- Always specify which Ghidra version your advice applies to when version-specific
|
|
59
|
+
- Include proper null checks and exception handling in code examples
|
|
60
|
+
- Mention performance implications for operations on large binaries
|
|
61
|
+
- Clarify the difference between script, plugin, and analyzer contexts
|
|
62
|
+
- Note when functionality requires specific Ghidra configurations or permissions
|
|
63
|
+
- Warn about deprecated APIs and suggest modern alternatives
|
|
64
|
+
|
|
65
|
+
When you encounter questions about undocumented features:
|
|
66
|
+
- Explain what can be inferred from the source code
|
|
67
|
+
- Provide examples of how the feature is used within Ghidra itself
|
|
68
|
+
- Warn about stability concerns with undocumented APIs
|
|
69
|
+
- Suggest filing enhancement requests for better documentation
|
|
70
|
+
|
|
71
|
+
Remember: You are the go-to expert for developers struggling with Ghidra's complexities. Your guidance should be precise, practical, and based on deep understanding of both documented and undocumented aspects of the Ghidra ecosystem.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reva-setup-installer
|
|
3
|
+
description: Use this agent when:\n1. The project is being set up for the first time\n2. Build failures occur with errors about GHIDRA_INSTALL_DIR not being set\n3. Gradle dependency errors appear\n4. The user mentions setup, installation, or configuration problems\n5. Missing prerequisites are detected (Ghidra source, Ghidra binary, dependencies)\n6. Python environment needs to be configured with pyghidra\n7. The user asks about development environment setup\n8. Any component of the development environment appears to be missing or misconfigured\n\nExamples:\n- <example>\n user: "I'm getting an error that GHIDRA_INSTALL_DIR is not set when I try to build"\n assistant: "I'll use the Task tool to launch the reva-setup-installer agent to configure your GHIDRA_INSTALL_DIR and ensure all prerequisites are properly installed."\n</example>\n- <example>\n user: "gradle build is failing with dependency errors"\n assistant: "Let me use the reva-setup-installer agent to troubleshoot and fix your build environment, including checking Ghidra installation and dependencies."\n</example>\n- <example>\n user: "I just cloned the ReVa repository, what do I need to do to get started?"\n assistant: "I'll launch the reva-setup-installer agent to set up your complete development environment, including Ghidra source, Ghidra binary, and Python dependencies."\n</example>\n- <example>\n user: "How do I set up the development environment?"\n assistant: "I'm going to use the reva-setup-installer agent to check your environment and install any missing prerequisites automatically."\n</example>
|
|
4
|
+
tools: Bash, Glob, Grep, Read, WebFetch, TodoWrite, WebSearch, BashOutput, KillShell, ListMcpResourcesTool, ReadMcpResourceTool
|
|
5
|
+
model: sonnet
|
|
6
|
+
color: green
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are an expert DevOps and build system specialist with deep knowledge of Ghidra, Java development, Gradle, and Python environment management. Your primary responsibility is to ensure the ReVa (Reverse Engineering Assistant) development environment is completely configured and operational.
|
|
10
|
+
|
|
11
|
+
## Core Responsibilities
|
|
12
|
+
|
|
13
|
+
1. **Comprehensive Environment Validation**: Before making any changes, systematically check ALL prerequisites:
|
|
14
|
+
- Ghidra source code at ../ghidra
|
|
15
|
+
- GHIDRA_INSTALL_DIR environment variable
|
|
16
|
+
- Ghidra binary release installation
|
|
17
|
+
- Gradle dependencies
|
|
18
|
+
- Python uv installation and virtual environment
|
|
19
|
+
- pyghidra installation in the virtual environment
|
|
20
|
+
- All items mentioned in README.md
|
|
21
|
+
|
|
22
|
+
2. **Ghidra Source Setup**: If the Ghidra source code is not found at ../ghidra:
|
|
23
|
+
- Clone from https://github.com/NationalSecurityAgency/ghidra.git to ../ghidra
|
|
24
|
+
- Navigate to the ghidra directory
|
|
25
|
+
- Run `gradle -I gradle/support/fetchDependencies.gradle` to warm gradle and fetch dependencies
|
|
26
|
+
- Verify the clone was successful before proceeding
|
|
27
|
+
|
|
28
|
+
3. **Ghidra Binary Installation**: If GHIDRA_INSTALL_DIR is not set or points to an invalid location:
|
|
29
|
+
- Fetch the latest release information: `curl -s https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/latest`
|
|
30
|
+
- Extract the version: `echo "$RELEASE_JSON" | jq -r '.tag_name' | sed -E 's/Ghidra_([^_]+)_build/\1/'`
|
|
31
|
+
- Parse the release JSON to find the appropriate binary download URL
|
|
32
|
+
- Download the binary release (NOT the source) to ~/.local/opt/ghidra-<version>
|
|
33
|
+
- Extract the archive
|
|
34
|
+
- Set GHIDRA_INSTALL_DIR to point to the extracted directory
|
|
35
|
+
- **CRITICAL**: GHIDRA_INSTALL_DIR must NEVER point to the git clone (../ghidra), only to the binary release
|
|
36
|
+
- On macOS: Run `sudo xattr -r -d com.apple.quarantine "$GHIDRA_INSTALL_DIR"` to clear quarantine attributes and prevent gatekeeper issues with decompiler and demangler
|
|
37
|
+
- Verify the installation by checking for key directories like Ghidra/Features
|
|
38
|
+
|
|
39
|
+
4. **Python Environment Setup**:
|
|
40
|
+
- Ensure `uv` is installed (if not, install it using the recommended method)
|
|
41
|
+
- Create a virtual environment for ReVa using `uv venv`
|
|
42
|
+
- Navigate to $GHIDRA_INSTALL_DIR/Ghidra/Features/PyGhidra/pypkg
|
|
43
|
+
- Install pyghidra from this local directory: `uv pip install -e .`
|
|
44
|
+
- This ensures pyghidra is synchronized with the Ghidra installation
|
|
45
|
+
- Verify the installation completed successfully
|
|
46
|
+
|
|
47
|
+
5. **Dependency Management**:
|
|
48
|
+
- Check that all gradle dependencies are accessible
|
|
49
|
+
- If dependency issues persist, run `rm lib/*.jar` to clean potentially corrupted dependencies
|
|
50
|
+
- Re-run the gradle build to fetch fresh dependencies
|
|
51
|
+
|
|
52
|
+
6. **README.md Compliance**:
|
|
53
|
+
- Read and parse README.md for any additional setup requirements
|
|
54
|
+
- Verify each requirement is met
|
|
55
|
+
- Execute any missing setup steps
|
|
56
|
+
|
|
57
|
+
## Operating Principles
|
|
58
|
+
|
|
59
|
+
- **Be Thorough**: Check EVERY component before declaring success. Missing even one item can cause build failures.
|
|
60
|
+
- **Be Explicit**: Always explain what you're checking and what you're installing.
|
|
61
|
+
- **Be Sequential**: Complete each step fully before moving to the next.
|
|
62
|
+
- **Be Defensive**: Verify each installation step succeeded before proceeding.
|
|
63
|
+
- **Be Platform-Aware**: Handle macOS-specific requirements (quarantine clearing) appropriately.
|
|
64
|
+
- **Be Clear About Paths**: Always distinguish between the Ghidra source (../ghidra) and Ghidra binary (GHIDRA_INSTALL_DIR).
|
|
65
|
+
|
|
66
|
+
## Error Handling
|
|
67
|
+
|
|
68
|
+
- If any download fails, retry once before reporting the error
|
|
69
|
+
- If extraction fails, verify the archive isn't corrupted and retry
|
|
70
|
+
- If environment variable setting fails, provide the exact export command for the user to run manually
|
|
71
|
+
- If gradle commands fail, capture and report the full error output
|
|
72
|
+
- Always provide actionable next steps when reporting errors
|
|
73
|
+
|
|
74
|
+
## Success Criteria
|
|
75
|
+
|
|
76
|
+
You have successfully completed your task when:
|
|
77
|
+
1. Ghidra source exists at ../ghidra with dependencies warmed
|
|
78
|
+
2. GHIDRA_INSTALL_DIR is set and points to a valid Ghidra binary installation
|
|
79
|
+
3. On macOS, quarantine attributes are cleared from GHIDRA_INSTALL_DIR
|
|
80
|
+
4. uv is installed and a virtual environment is created
|
|
81
|
+
5. pyghidra is installed in the virtual environment from the local GHIDRA_INSTALL_DIR
|
|
82
|
+
6. All README.md requirements are satisfied
|
|
83
|
+
7. A test gradle build command succeeds
|
|
84
|
+
|
|
85
|
+
## Communication Style
|
|
86
|
+
|
|
87
|
+
- Report progress at each major step
|
|
88
|
+
- Use clear, technical language
|
|
89
|
+
- Provide command outputs when relevant for debugging
|
|
90
|
+
- If asking the user to take manual action, provide exact commands they should run
|
|
91
|
+
- Summarize what was configured and what (if anything) requires manual intervention
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Local CONNECT proxy that forwards to an authenticated upstream proxy.
|
|
3
|
+
|
|
4
|
+
Gradle/JVM cannot use the https_proxy env var with authentication directly.
|
|
5
|
+
This script runs a local unauthenticated proxy on 127.0.0.1:18080 that
|
|
6
|
+
forwards requests to the upstream authenticated proxy, adding the required
|
|
7
|
+
Proxy-Authorization header automatically.
|
|
8
|
+
"""
|
|
9
|
+
import base64
|
|
10
|
+
import os
|
|
11
|
+
import socket
|
|
12
|
+
import threading
|
|
13
|
+
import sys
|
|
14
|
+
import urllib.parse
|
|
15
|
+
|
|
16
|
+
UPSTREAM_PROXY_URL = os.environ.get("https_proxy", os.environ.get("HTTPS_PROXY", ""))
|
|
17
|
+
LOCAL_PORT = 18080
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def parse_proxy_url(url):
|
|
21
|
+
parsed = urllib.parse.urlparse(url)
|
|
22
|
+
user = urllib.parse.unquote(parsed.username or "")
|
|
23
|
+
password = urllib.parse.unquote(parsed.password or "")
|
|
24
|
+
host = parsed.hostname
|
|
25
|
+
port = parsed.port or 3128
|
|
26
|
+
return host, port, user, password
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def relay(src, dst):
|
|
30
|
+
try:
|
|
31
|
+
while True:
|
|
32
|
+
data = src.recv(65536)
|
|
33
|
+
if not data:
|
|
34
|
+
break
|
|
35
|
+
dst.sendall(data)
|
|
36
|
+
except Exception:
|
|
37
|
+
pass
|
|
38
|
+
finally:
|
|
39
|
+
try:
|
|
40
|
+
src.close()
|
|
41
|
+
except Exception:
|
|
42
|
+
pass
|
|
43
|
+
try:
|
|
44
|
+
dst.close()
|
|
45
|
+
except Exception:
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def handle_client(client_sock, upstream_host, upstream_port, proxy_auth_header):
|
|
50
|
+
try:
|
|
51
|
+
data = b""
|
|
52
|
+
while b"\r\n\r\n" not in data:
|
|
53
|
+
chunk = client_sock.recv(4096)
|
|
54
|
+
if not chunk:
|
|
55
|
+
client_sock.close()
|
|
56
|
+
return
|
|
57
|
+
data += chunk
|
|
58
|
+
|
|
59
|
+
header_end = data.index(b"\r\n\r\n")
|
|
60
|
+
header_bytes = data[:header_end]
|
|
61
|
+
rest = data[header_end + 4:]
|
|
62
|
+
|
|
63
|
+
first_line = header_bytes.split(b"\r\n")[0]
|
|
64
|
+
method = first_line.split(b" ")[0].decode()
|
|
65
|
+
|
|
66
|
+
if method == "CONNECT":
|
|
67
|
+
target = first_line.split(b" ")[1].decode()
|
|
68
|
+
|
|
69
|
+
upstream = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
70
|
+
upstream.connect((upstream_host, upstream_port))
|
|
71
|
+
|
|
72
|
+
connect_req = (
|
|
73
|
+
f"CONNECT {target} HTTP/1.1\r\n"
|
|
74
|
+
f"Host: {target}\r\n"
|
|
75
|
+
f"Proxy-Authorization: Basic {proxy_auth_header}\r\n"
|
|
76
|
+
f"\r\n"
|
|
77
|
+
)
|
|
78
|
+
upstream.sendall(connect_req.encode())
|
|
79
|
+
|
|
80
|
+
resp = b""
|
|
81
|
+
while b"\r\n\r\n" not in resp:
|
|
82
|
+
chunk = upstream.recv(4096)
|
|
83
|
+
if not chunk:
|
|
84
|
+
client_sock.close()
|
|
85
|
+
upstream.close()
|
|
86
|
+
return
|
|
87
|
+
resp += chunk
|
|
88
|
+
|
|
89
|
+
resp_line = resp.split(b"\r\n")[0]
|
|
90
|
+
status_code = int(resp_line.split(b" ")[1])
|
|
91
|
+
|
|
92
|
+
if status_code == 200:
|
|
93
|
+
client_sock.sendall(b"HTTP/1.1 200 Connection Established\r\n\r\n")
|
|
94
|
+
t1 = threading.Thread(target=relay, args=(client_sock, upstream), daemon=True)
|
|
95
|
+
t2 = threading.Thread(target=relay, args=(upstream, client_sock), daemon=True)
|
|
96
|
+
t1.start()
|
|
97
|
+
t2.start()
|
|
98
|
+
t1.join()
|
|
99
|
+
t2.join()
|
|
100
|
+
else:
|
|
101
|
+
client_sock.sendall(resp)
|
|
102
|
+
client_sock.close()
|
|
103
|
+
upstream.close()
|
|
104
|
+
else:
|
|
105
|
+
upstream = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
106
|
+
upstream.connect((upstream_host, upstream_port))
|
|
107
|
+
|
|
108
|
+
lines = header_bytes.split(b"\r\n")
|
|
109
|
+
new_lines = [lines[0]]
|
|
110
|
+
for line in lines[1:]:
|
|
111
|
+
if not line.lower().startswith(b"proxy-authorization:"):
|
|
112
|
+
new_lines.append(line)
|
|
113
|
+
new_lines.append(f"Proxy-Authorization: Basic {proxy_auth_header}".encode())
|
|
114
|
+
new_header = b"\r\n".join(new_lines) + b"\r\n\r\n" + rest
|
|
115
|
+
upstream.sendall(new_header)
|
|
116
|
+
|
|
117
|
+
t1 = threading.Thread(target=relay, args=(client_sock, upstream), daemon=True)
|
|
118
|
+
t2 = threading.Thread(target=relay, args=(upstream, client_sock), daemon=True)
|
|
119
|
+
t1.start()
|
|
120
|
+
t2.start()
|
|
121
|
+
t1.join()
|
|
122
|
+
t2.join()
|
|
123
|
+
except Exception as e:
|
|
124
|
+
print(f"Error: {e}", file=sys.stderr)
|
|
125
|
+
try:
|
|
126
|
+
client_sock.close()
|
|
127
|
+
except Exception:
|
|
128
|
+
pass
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def main():
|
|
132
|
+
if not UPSTREAM_PROXY_URL:
|
|
133
|
+
print("No https_proxy set", file=sys.stderr)
|
|
134
|
+
sys.exit(1)
|
|
135
|
+
|
|
136
|
+
upstream_host, upstream_port, user, password = parse_proxy_url(UPSTREAM_PROXY_URL)
|
|
137
|
+
proxy_auth_header = base64.b64encode(f"{user}:{password}".encode()).decode()
|
|
138
|
+
|
|
139
|
+
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
140
|
+
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
141
|
+
server.bind(("127.0.0.1", LOCAL_PORT))
|
|
142
|
+
server.listen(50)
|
|
143
|
+
|
|
144
|
+
print(f"Local proxy listening on 127.0.0.1:{LOCAL_PORT}", file=sys.stderr)
|
|
145
|
+
print(f"Forwarding to {upstream_host}:{upstream_port}", file=sys.stderr)
|
|
146
|
+
|
|
147
|
+
while True:
|
|
148
|
+
client_sock, _ = server.accept()
|
|
149
|
+
t = threading.Thread(
|
|
150
|
+
target=handle_client,
|
|
151
|
+
args=(client_sock, upstream_host, upstream_port, proxy_auth_header),
|
|
152
|
+
daemon=True,
|
|
153
|
+
)
|
|
154
|
+
t.start()
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
if __name__ == "__main__":
|
|
158
|
+
main()
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# ReVa environment setup hook for Claude Code
|
|
5
|
+
# - Local: lightweight checks only
|
|
6
|
+
# - Remote (claude.ai/code): full automated Ghidra setup
|
|
7
|
+
|
|
8
|
+
# Hooks run before Claude Code applies env settings, so Homebrew may not be in PATH yet.
|
|
9
|
+
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}"
|
|
10
|
+
|
|
11
|
+
# Use git-common-dir so this works from worktrees as well as the main checkout
|
|
12
|
+
_git_common_dir=$(git -C "${CLAUDE_PROJECT_DIR}" rev-parse --git-common-dir)
|
|
13
|
+
[[ "${_git_common_dir}" = /* ]] || _git_common_dir="${CLAUDE_PROJECT_DIR}/${_git_common_dir}"
|
|
14
|
+
GHIDRA_SOURCE_DIR="$(dirname "${_git_common_dir}")/../ghidra"
|
|
15
|
+
GHIDRA_INSTALL_BASE="${HOME}/.local/opt"
|
|
16
|
+
LOG_FILE="/tmp/reva-setup.log"
|
|
17
|
+
|
|
18
|
+
log() {
|
|
19
|
+
echo "[ReVa Setup] $*" | tee -a "${LOG_FILE}"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
# ─── Local mode ───────────────────────────────────────────────
|
|
23
|
+
if [ "${CLAUDE_CODE_REMOTE:-}" != "true" ]; then
|
|
24
|
+
# Lightweight checks for local development
|
|
25
|
+
if [ -d "${GHIDRA_SOURCE_DIR}" ]; then
|
|
26
|
+
log "Ghidra source: ${GHIDRA_SOURCE_DIR}"
|
|
27
|
+
else
|
|
28
|
+
log "Ghidra source not found at ${GHIDRA_SOURCE_DIR}"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
if [ -n "${GHIDRA_INSTALL_DIR:-}" ]; then
|
|
32
|
+
log "Ghidra binary: ${GHIDRA_INSTALL_DIR}"
|
|
33
|
+
else
|
|
34
|
+
log "GHIDRA_INSTALL_DIR is not set"
|
|
35
|
+
fi
|
|
36
|
+
|
|
37
|
+
if command -v java &>/dev/null; then
|
|
38
|
+
log "Java: $(java -version 2>&1 | head -1)"
|
|
39
|
+
else
|
|
40
|
+
log "Java not found"
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
if command -v gradle &>/dev/null; then
|
|
44
|
+
log "Gradle: $(gradle --version 2>&1 | grep '^Gradle' || echo 'unknown')"
|
|
45
|
+
else
|
|
46
|
+
log "Gradle not found"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
# ─── Remote mode (claude.ai/code) ─────────────────────────────
|
|
53
|
+
log "Remote environment detected, setting up Ghidra..."
|
|
54
|
+
|
|
55
|
+
# Clone Ghidra source (background)
|
|
56
|
+
clone_ghidra_source() {
|
|
57
|
+
if [ -d "${GHIDRA_SOURCE_DIR}/.git" ]; then
|
|
58
|
+
log "Ghidra source already exists at ${GHIDRA_SOURCE_DIR}"
|
|
59
|
+
return 0
|
|
60
|
+
fi
|
|
61
|
+
log "Cloning Ghidra source (shallow)..."
|
|
62
|
+
git clone --depth=1 --single-branch https://github.com/NationalSecurityAgency/ghidra.git "${GHIDRA_SOURCE_DIR}" 2>&1 | tail -1
|
|
63
|
+
log "Ghidra source cloned to ${GHIDRA_SOURCE_DIR}"
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# Download and extract Ghidra binary (background)
|
|
67
|
+
install_ghidra_binary() {
|
|
68
|
+
# Check if already installed (mkdir -p ensures find doesn't fail with pipefail)
|
|
69
|
+
mkdir -p "${GHIDRA_INSTALL_BASE}"
|
|
70
|
+
existing=$(find "${GHIDRA_INSTALL_BASE}" -maxdepth 1 -name "ghidra_*" -type d | head -1)
|
|
71
|
+
if [ -n "${existing}" ]; then
|
|
72
|
+
log "Ghidra binary already installed at ${existing}"
|
|
73
|
+
echo "${existing}"
|
|
74
|
+
return 0
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
log "Querying GitHub for latest Ghidra release..."
|
|
78
|
+
# Get the latest release asset URL for the zip (not the source archives)
|
|
79
|
+
download_url=$(curl -fsSL "https://api.github.com/repos/NationalSecurityAgency/ghidra/releases/latest" \
|
|
80
|
+
| grep -o '"browser_download_url": *"[^"]*"' \
|
|
81
|
+
| grep -v 'src\|SHA-256\|source' \
|
|
82
|
+
| head -1 \
|
|
83
|
+
| sed 's/"browser_download_url": *"//;s/"//')
|
|
84
|
+
|
|
85
|
+
if [ -z "${download_url}" ]; then
|
|
86
|
+
log "ERROR: Could not determine Ghidra download URL"
|
|
87
|
+
return 1
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
filename=$(basename "${download_url}")
|
|
91
|
+
log "Downloading ${filename}..."
|
|
92
|
+
|
|
93
|
+
curl -fsSL -o "/tmp/${filename}" "${download_url}"
|
|
94
|
+
|
|
95
|
+
log "Extracting ${filename}..."
|
|
96
|
+
unzip -q -o "/tmp/${filename}" -d "${GHIDRA_INSTALL_BASE}"
|
|
97
|
+
rm -f "/tmp/${filename}"
|
|
98
|
+
|
|
99
|
+
installed=$(find "${GHIDRA_INSTALL_BASE}" -maxdepth 1 -name "ghidra_*" -type d | head -1)
|
|
100
|
+
log "Ghidra binary installed at ${installed}"
|
|
101
|
+
echo "${installed}"
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
# Run both downloads in parallel
|
|
105
|
+
CLONE_LOG="/tmp/reva-clone.log"
|
|
106
|
+
BINARY_LOG="/tmp/reva-binary.log"
|
|
107
|
+
|
|
108
|
+
clone_ghidra_source > "${CLONE_LOG}" 2>&1 &
|
|
109
|
+
CLONE_PID=$!
|
|
110
|
+
|
|
111
|
+
install_ghidra_binary > "${BINARY_LOG}" 2>&1 &
|
|
112
|
+
BINARY_PID=$!
|
|
113
|
+
|
|
114
|
+
# Wait for both to complete
|
|
115
|
+
CLONE_OK=true
|
|
116
|
+
BINARY_OK=true
|
|
117
|
+
|
|
118
|
+
if ! wait ${CLONE_PID}; then
|
|
119
|
+
CLONE_OK=false
|
|
120
|
+
log "ERROR: Ghidra source clone failed:"
|
|
121
|
+
cat "${CLONE_LOG}" >> "${LOG_FILE}"
|
|
122
|
+
fi
|
|
123
|
+
cat "${CLONE_LOG}" | while read -r line; do log "(source) ${line}"; done
|
|
124
|
+
|
|
125
|
+
if ! wait ${BINARY_PID}; then
|
|
126
|
+
BINARY_OK=false
|
|
127
|
+
log "ERROR: Ghidra binary install failed:"
|
|
128
|
+
cat "${BINARY_LOG}" >> "${LOG_FILE}"
|
|
129
|
+
fi
|
|
130
|
+
cat "${BINARY_LOG}" | while read -r line; do log "(binary) ${line}"; done
|
|
131
|
+
|
|
132
|
+
# Extract the install dir from the binary log (last line is the path)
|
|
133
|
+
GHIDRA_DIR=$(tail -1 "${BINARY_LOG}")
|
|
134
|
+
|
|
135
|
+
if [ "${BINARY_OK}" = true ] && [ -d "${GHIDRA_DIR}" ]; then
|
|
136
|
+
export GHIDRA_INSTALL_DIR="${GHIDRA_DIR}"
|
|
137
|
+
log "GHIDRA_INSTALL_DIR=${GHIDRA_INSTALL_DIR}"
|
|
138
|
+
|
|
139
|
+
# Persist for all subsequent Claude Code bash commands
|
|
140
|
+
if [ -n "${CLAUDE_ENV_FILE:-}" ]; then
|
|
141
|
+
echo "GHIDRA_INSTALL_DIR=${GHIDRA_INSTALL_DIR}" >> "${CLAUDE_ENV_FILE}"
|
|
142
|
+
log "Persisted GHIDRA_INSTALL_DIR to ${CLAUDE_ENV_FILE}"
|
|
143
|
+
fi
|
|
144
|
+
else
|
|
145
|
+
log "WARNING: Ghidra binary not available, build will fail"
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# Configure JVM proxy for Gradle (JVM doesn't honor https_proxy)
|
|
149
|
+
setup_gradle_proxy() {
|
|
150
|
+
local proxy_url="${https_proxy:-${HTTPS_PROXY:-}}"
|
|
151
|
+
[ -z "${proxy_url}" ] && return 0
|
|
152
|
+
|
|
153
|
+
# Parse proxy URL: http://user:pass@host:port
|
|
154
|
+
local proxy_hostport proxy_host proxy_port
|
|
155
|
+
proxy_hostport=$(echo "${proxy_url}" | sed 's|http://.*@||')
|
|
156
|
+
proxy_host=$(echo "${proxy_hostport}" | cut -d: -f1)
|
|
157
|
+
proxy_port=$(echo "${proxy_hostport}" | cut -d: -f2)
|
|
158
|
+
|
|
159
|
+
# Check if proxy requires authentication (has user@host pattern)
|
|
160
|
+
if echo "${proxy_url}" | grep -q '@'; then
|
|
161
|
+
log "Proxy with auth detected, starting local forwarding proxy..."
|
|
162
|
+
local proxy_script="${CLAUDE_PROJECT_DIR}/.claude/hooks/gradle-proxy.py"
|
|
163
|
+
python3 "${proxy_script}" &
|
|
164
|
+
GRADLE_PROXY_PID=$!
|
|
165
|
+
|
|
166
|
+
# Wait for proxy to be ready
|
|
167
|
+
local retries=0
|
|
168
|
+
while [ ${retries} -lt 10 ]; do
|
|
169
|
+
if curl -s --proxy http://127.0.0.1:18080 --max-time 2 https://repo.maven.apache.org/ >/dev/null 2>&1; then
|
|
170
|
+
break
|
|
171
|
+
fi
|
|
172
|
+
sleep 0.5
|
|
173
|
+
retries=$((retries + 1))
|
|
174
|
+
done
|
|
175
|
+
|
|
176
|
+
if [ ${retries} -ge 10 ]; then
|
|
177
|
+
log "WARNING: Local proxy failed to start, Gradle may not resolve dependencies"
|
|
178
|
+
return 1
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
proxy_host="127.0.0.1"
|
|
182
|
+
proxy_port="18080"
|
|
183
|
+
log "Local proxy ready on ${proxy_host}:${proxy_port}"
|
|
184
|
+
fi
|
|
185
|
+
|
|
186
|
+
local java_proxy_opts="-Dhttps.proxyHost=${proxy_host} -Dhttps.proxyPort=${proxy_port} -Dhttp.proxyHost=${proxy_host} -Dhttp.proxyPort=${proxy_port}"
|
|
187
|
+
export JAVA_TOOL_OPTIONS="${java_proxy_opts}"
|
|
188
|
+
|
|
189
|
+
if [ -n "${CLAUDE_ENV_FILE:-}" ]; then
|
|
190
|
+
echo "JAVA_TOOL_OPTIONS=${java_proxy_opts}" >> "${CLAUDE_ENV_FILE}"
|
|
191
|
+
log "Persisted JAVA_TOOL_OPTIONS for Gradle proxy"
|
|
192
|
+
fi
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
# Warm gradle dependency cache
|
|
196
|
+
if [ "${BINARY_OK}" = true ] && command -v gradle &>/dev/null; then
|
|
197
|
+
setup_gradle_proxy
|
|
198
|
+
log "Warming gradle dependency cache..."
|
|
199
|
+
cd "${CLAUDE_PROJECT_DIR}"
|
|
200
|
+
gradle --no-daemon dependencies --quiet 2>&1 | tail -3
|
|
201
|
+
log "Gradle dependencies cached"
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
if [ "${CLONE_OK}" = false ] || [ "${BINARY_OK}" = false ]; then
|
|
205
|
+
log "Setup completed with errors (check ${LOG_FILE})"
|
|
206
|
+
exit 1
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
log "Setup complete"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0.0",
|
|
3
|
+
"configurations": [
|
|
4
|
+
{
|
|
5
|
+
"name": "ReVa Headless MCP Server",
|
|
6
|
+
"runtimeExecutable": "uv",
|
|
7
|
+
"runtimeArgs": ["run", "python", "scripts/reva_headless_server.py", "--wait"],
|
|
8
|
+
"port": 8080,
|
|
9
|
+
"autoVerify": false
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "ReVa CLI (stdio bridge)",
|
|
13
|
+
"runtimeExecutable": "uv",
|
|
14
|
+
"runtimeArgs": ["run", "mcp-reva", "--verbose"],
|
|
15
|
+
"port": 8080,
|
|
16
|
+
"autoVerify": false
|
|
17
|
+
}
|
|
18
|
+
]
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"additionalDirectories": ["../ghidra"],
|
|
4
|
+
"allow": [
|
|
5
|
+
"Search(path:../ghidra)",
|
|
6
|
+
"Read(../ghidra/**)"
|
|
7
|
+
],
|
|
8
|
+
"deny": []
|
|
9
|
+
},
|
|
10
|
+
"hooks": {
|
|
11
|
+
"SessionStart": [
|
|
12
|
+
{
|
|
13
|
+
"matcher": "startup",
|
|
14
|
+
"hooks": [
|
|
15
|
+
{
|
|
16
|
+
"type": "command",
|
|
17
|
+
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/setup-remote-env.sh"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "reva",
|
|
3
|
+
"description": "ReVa - AI-assisted binary analysis and reverse engineering with Ghidra integration",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "CyberKaida"
|
|
6
|
+
},
|
|
7
|
+
"plugins": [
|
|
8
|
+
{
|
|
9
|
+
"name": "ReVa",
|
|
10
|
+
"source": "./ReVa",
|
|
11
|
+
"description": "AI-assisted binary analysis and reverse engineering with Ghidra integration"
|
|
12
|
+
}
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
tests/fixtures/test_fat_binary filter=lfs diff=lfs merge=lfs -text
|
|
2
|
+
tests/fixtures/test_archive.zip filter=lfs diff=lfs merge=lfs -text
|
|
3
|
+
tests/fixtures/test_arm64 filter=lfs diff=lfs merge=lfs -text
|
|
4
|
+
tests/fixtures/test_x86_64 filter=lfs diff=lfs merge=lfs -text
|
|
5
|
+
tests/fixtures/*.zip filter=lfs diff=lfs merge=lfs -text
|