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.
Files changed (289) hide show
  1. reverse_engineering_assistant-7.2.1/.claude/README.md +42 -0
  2. reverse_engineering_assistant-7.2.1/.claude/agents/ghidra-api-expert.md +71 -0
  3. reverse_engineering_assistant-7.2.1/.claude/agents/reva-setup-installer.md +91 -0
  4. reverse_engineering_assistant-7.2.1/.claude/hooks/gradle-proxy.py +158 -0
  5. reverse_engineering_assistant-7.2.1/.claude/hooks/setup-remote-env.sh +209 -0
  6. reverse_engineering_assistant-7.2.1/.claude/launch.json +19 -0
  7. reverse_engineering_assistant-7.2.1/.claude/settings.json +23 -0
  8. reverse_engineering_assistant-7.2.1/.claude-plugin/marketplace.json +14 -0
  9. reverse_engineering_assistant-7.2.1/.continue/docs/new-doc-1.yaml +6 -0
  10. reverse_engineering_assistant-7.2.1/.continue/docs/new-doc.yaml +6 -0
  11. reverse_engineering_assistant-7.2.1/.gitattributes +5 -0
  12. reverse_engineering_assistant-7.2.1/.github/CI_WORKFLOWS.md +321 -0
  13. reverse_engineering_assistant-7.2.1/.github/WORKFLOW_SETUP.md +284 -0
  14. reverse_engineering_assistant-7.2.1/.github/copilot-instructions.md +13 -0
  15. reverse_engineering_assistant-7.2.1/.github/dependabot.yml +34 -0
  16. reverse_engineering_assistant-7.2.1/.github/workflows/claude.yml +37 -0
  17. reverse_engineering_assistant-7.2.1/.github/workflows/publish-ghidra.yml +81 -0
  18. reverse_engineering_assistant-7.2.1/.github/workflows/publish-pypi.yml +129 -0
  19. reverse_engineering_assistant-7.2.1/.github/workflows/test-ghidra.yml +174 -0
  20. reverse_engineering_assistant-7.2.1/.github/workflows/test-headless.yml +115 -0
  21. reverse_engineering_assistant-7.2.1/.gitignore +19 -0
  22. reverse_engineering_assistant-7.2.1/.vscode/extensions.json +9 -0
  23. reverse_engineering_assistant-7.2.1/.vscode/launch.json +55 -0
  24. reverse_engineering_assistant-7.2.1/.vscode/settings.json +260 -0
  25. reverse_engineering_assistant-7.2.1/AGENTS.md +85 -0
  26. reverse_engineering_assistant-7.2.1/CLAUDE.md +325 -0
  27. reverse_engineering_assistant-7.2.1/DEVELOPER.md +440 -0
  28. reverse_engineering_assistant-7.2.1/LICENSE +201 -0
  29. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/__init__.py → reverse_engineering_assistant-7.2.1/Module.manifest +0 -0
  30. reverse_engineering_assistant-7.2.1/PKG-INFO +232 -0
  31. reverse_engineering_assistant-7.2.1/README.md +188 -0
  32. reverse_engineering_assistant-7.2.1/ReVa/.claude-plugin/plugin.json +8 -0
  33. reverse_engineering_assistant-7.2.1/ReVa/.mcp.json +11 -0
  34. reverse_engineering_assistant-7.2.1/ReVa/LICENSE +201 -0
  35. reverse_engineering_assistant-7.2.1/ReVa/skills/binary-triage/SKILL.md +155 -0
  36. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-crypto/SKILL.md +323 -0
  37. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-crypto/patterns.md +630 -0
  38. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-pwn/SKILL.md +532 -0
  39. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-pwn/patterns.md +948 -0
  40. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-rev/SKILL.md +548 -0
  41. reverse_engineering_assistant-7.2.1/ReVa/skills/ctf-rev/patterns.md +906 -0
  42. reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/SKILL.md +607 -0
  43. reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/examples.md +733 -0
  44. reverse_engineering_assistant-7.2.1/ReVa/skills/deep-analysis/patterns.md +720 -0
  45. reverse_engineering_assistant-7.2.1/build.gradle +158 -0
  46. reverse_engineering_assistant-7.2.1/config/reva-headless-example.properties +50 -0
  47. reverse_engineering_assistant-7.2.1/data/README.txt +15 -0
  48. reverse_engineering_assistant-7.2.1/data/buildLanguage.xml +50 -0
  49. reverse_engineering_assistant-7.2.1/data/languages/skel.cspec +121 -0
  50. reverse_engineering_assistant-7.2.1/data/languages/skel.ldefs +20 -0
  51. reverse_engineering_assistant-7.2.1/data/languages/skel.opinion +12 -0
  52. reverse_engineering_assistant-7.2.1/data/languages/skel.pspec +23 -0
  53. reverse_engineering_assistant-7.2.1/data/languages/skel.sinc +220 -0
  54. reverse_engineering_assistant-7.2.1/data/languages/skel.slaspec +39 -0
  55. reverse_engineering_assistant-7.2.1/data/sleighArgs.txt +6 -0
  56. reverse_engineering_assistant-7.2.1/extension.properties +5 -0
  57. reverse_engineering_assistant-7.2.1/ghidra_scripts/README.txt +1 -0
  58. reverse_engineering_assistant-7.2.1/ghidra_scripts/SampleScript.java +11 -0
  59. reverse_engineering_assistant-7.2.1/ghidra_scripts/sample_script.py +8 -0
  60. reverse_engineering_assistant-7.2.1/lib/.gitignore +1 -0
  61. reverse_engineering_assistant-7.2.1/lib/README.txt +3 -0
  62. reverse_engineering_assistant-7.2.1/os/linux_x86_64/README.txt +3 -0
  63. reverse_engineering_assistant-7.2.1/os/mac_x86_64/README.txt +3 -0
  64. reverse_engineering_assistant-7.2.1/os/win_x86_64/README.txt +3 -0
  65. reverse_engineering_assistant-7.2.1/pyproject.toml +107 -0
  66. reverse_engineering_assistant-7.2.1/src/CLAUDE.md +201 -0
  67. reverse_engineering_assistant-7.2.1/src/main/help/help/TOC_Source.xml +65 -0
  68. reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_installation.html +468 -0
  69. reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_overview.html +232 -0
  70. reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/ReVa_skills.html +539 -0
  71. reverse_engineering_assistant-7.2.1/src/main/help/help/topics/ReVa/map.xml +40 -0
  72. reverse_engineering_assistant-7.2.1/src/main/help/help/topics/skeleton/help.html +23 -0
  73. reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/CLAUDE.md +48 -0
  74. reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/DebugCaptureService.java +205 -0
  75. reverse_engineering_assistant-7.2.1/src/main/java/reva/debug/DebugInfoCollector.java +211 -0
  76. reverse_engineering_assistant-7.2.1/src/main/java/reva/headless/CLAUDE.md +353 -0
  77. reverse_engineering_assistant-7.2.1/src/main/java/reva/headless/RevaHeadlessLauncher.java +379 -0
  78. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/CLAUDE.md +406 -0
  79. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/ConfigChangeListener.java +34 -0
  80. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/ConfigManager.java +542 -0
  81. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaApplicationPlugin.java +177 -0
  82. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaPlugin.java +144 -0
  83. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/RevaProgramManager.java +416 -0
  84. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ConfigurationBackend.java +98 -0
  85. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ConfigurationBackendListener.java +32 -0
  86. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/FileBackend.java +215 -0
  87. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/InMemoryBackend.java +126 -0
  88. reverse_engineering_assistant-7.2.1/src/main/java/reva/plugin/config/ToolOptionsBackend.java +133 -0
  89. reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/AbstractResourceProvider.java +76 -0
  90. reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/CLAUDE.md +282 -0
  91. reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/ResourceProvider.java +47 -0
  92. reverse_engineering_assistant-7.2.1/src/main/java/reva/resources/impl/ProgramListResource.java +130 -0
  93. reverse_engineering_assistant-7.2.1/src/main/java/reva/revaAnalyzer.java +74 -0
  94. reverse_engineering_assistant-7.2.1/src/main/java/reva/revaExporter.java +77 -0
  95. reverse_engineering_assistant-7.2.1/src/main/java/reva/revaFileSystem.java +184 -0
  96. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/ApiKeyAuthFilter.java +155 -0
  97. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CLAUDE.md +464 -0
  98. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CachingRequestWrapper.java +101 -0
  99. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/CachingResponseWrapper.java +136 -0
  100. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/McpServerManager.java +587 -0
  101. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/RequestLoggingFilter.java +172 -0
  102. reverse_engineering_assistant-7.2.1/src/main/java/reva/server/ResilientStreamableServerTransportProvider.java +810 -0
  103. reverse_engineering_assistant-7.2.1/src/main/java/reva/services/CLAUDE.md +423 -0
  104. reverse_engineering_assistant-7.2.1/src/main/java/reva/services/RevaMcpService.java +79 -0
  105. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/AbstractToolProvider.java +767 -0
  106. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/CLAUDE.md +484 -0
  107. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/ProgramValidationException.java +34 -0
  108. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/ToolProvider.java +47 -0
  109. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/bookmarks/BookmarkToolProvider.java +483 -0
  110. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/bookmarks/CLAUDE.md +360 -0
  111. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/callgraph/CLAUDE.md +530 -0
  112. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/callgraph/CallGraphToolProvider.java +480 -0
  113. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/comments/CLAUDE.md +379 -0
  114. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/comments/CommentToolProvider.java +386 -0
  115. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/constants/CLAUDE.md +422 -0
  116. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/constants/ConstantSearchToolProvider.java +591 -0
  117. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/data/CLAUDE.md +348 -0
  118. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/data/DataToolProvider.java +358 -0
  119. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/dataflow/CLAUDE.md +676 -0
  120. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/dataflow/DataFlowToolProvider.java +710 -0
  121. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/datatypes/CLAUDE.md +279 -0
  122. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/datatypes/DataTypeToolProvider.java +398 -0
  123. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/decompiler/CLAUDE.md +594 -0
  124. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/decompiler/DecompilerToolProvider.java +2234 -0
  125. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/functions/CLAUDE.md +570 -0
  126. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/functions/FunctionToolProvider.java +1637 -0
  127. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/imports/CLAUDE.md +623 -0
  128. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/imports/ImportExportToolProvider.java +589 -0
  129. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/memory/CLAUDE.md +353 -0
  130. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/memory/MemoryToolProvider.java +169 -0
  131. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/project/CLAUDE.md +386 -0
  132. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/project/ProjectToolProvider.java +1315 -0
  133. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/strings/CLAUDE.md +149 -0
  134. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/strings/StringToolProvider.java +471 -0
  135. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/structures/CLAUDE.md +185 -0
  136. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/structures/StructureToolProvider.java +923 -0
  137. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/symbols/CLAUDE.md +413 -0
  138. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/symbols/SymbolToolProvider.java +245 -0
  139. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/vtable/CLAUDE.md +450 -0
  140. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/vtable/VtableToolProvider.java +822 -0
  141. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/xrefs/CLAUDE.md +387 -0
  142. reverse_engineering_assistant-7.2.1/src/main/java/reva/tools/xrefs/CrossReferencesToolProvider.java +345 -0
  143. reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/CLAUDE.md +173 -0
  144. reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/CaptureDebugAction.java +100 -0
  145. reverse_engineering_assistant-7.2.1/src/main/java/reva/ui/RevaProvider.java +107 -0
  146. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/AddressUtil.java +216 -0
  147. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/CLAUDE.md +850 -0
  148. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DataTypeParserUtil.java +273 -0
  149. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DebugLogger.java +108 -0
  150. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DecompilationContextUtil.java +356 -0
  151. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/DecompilationDiffUtil.java +253 -0
  152. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/MemoryUtil.java +155 -0
  153. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/ProgramLookupUtil.java +215 -0
  154. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/RevaInternalServiceRegistry.java +64 -0
  155. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/RevaToolLogger.java +393 -0
  156. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SchemaUtil.java +281 -0
  157. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SimilarityComparator.java +77 -0
  158. reverse_engineering_assistant-7.2.1/src/main/java/reva/util/SymbolUtil.java +41 -0
  159. reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/note.png +0 -0
  160. reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/tip.png +0 -0
  161. reverse_engineering_assistant-7.2.1/src/main/resources/help/shared/warning.png +0 -0
  162. reverse_engineering_assistant-7.2.1/src/main/resources/images/README.txt +2 -0
  163. reverse_engineering_assistant-7.2.1/src/reva_cli/.gitignore +1 -0
  164. reverse_engineering_assistant-7.2.1/src/reva_cli/__init__.py +12 -0
  165. reverse_engineering_assistant-7.2.1/src/reva_cli/__main__.py +194 -0
  166. reverse_engineering_assistant-7.2.1/src/reva_cli/_version.py +24 -0
  167. reverse_engineering_assistant-7.2.1/src/reva_cli/launcher.py +144 -0
  168. reverse_engineering_assistant-7.2.1/src/reva_cli/project_manager.py +186 -0
  169. reverse_engineering_assistant-7.2.1/src/reva_cli/stdio_bridge.py +235 -0
  170. reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/PKG-INFO +232 -0
  171. reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/SOURCES.txt +224 -0
  172. reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/entry_points.txt +2 -0
  173. reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/requires.txt +13 -0
  174. reverse_engineering_assistant-7.2.1/src/reverse_engineering_assistant.egg-info/top_level.txt +1 -0
  175. reverse_engineering_assistant-7.2.1/src/test/java/reva/RevaHeadlessIntegrationTestBase.java +77 -0
  176. reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/ConfigChangeTest.java +169 -0
  177. reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/RevaPluginHeadlessIntegrationTest.java +161 -0
  178. reverse_engineering_assistant-7.2.1/src/test/java/reva/plugin/RevaPluginUnitTest.java +79 -0
  179. reverse_engineering_assistant-7.2.1/src/test/java/reva/tools/decompiler/DecompilerToolProviderTest.java +212 -0
  180. reverse_engineering_assistant-7.2.1/src/test/java/reva/tools/strings/StringToolProviderTest.java +141 -0
  181. reverse_engineering_assistant-7.2.1/src/test/java/reva/util/AddressUtilTest.java +424 -0
  182. reverse_engineering_assistant-7.2.1/src/test/java/reva/util/RevaPluginTest.java +24 -0
  183. reverse_engineering_assistant-7.2.1/src/test/java/reva/util/SymbolUtilTest.java +347 -0
  184. reverse_engineering_assistant-7.2.1/src/test/resources/defaultTools/TestCodeBrowser.tool +465 -0
  185. reverse_engineering_assistant-7.2.1/src/test.slow/CLAUDE.md +103 -0
  186. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/CLAUDE.md +3 -0
  187. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/RevaIntegrationTestBase.java +498 -0
  188. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/ConfigManagerSecurityTest.java +119 -0
  189. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/RevaPluginIntegrationTest.java +49 -0
  190. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/plugin/RevaPluginMcpIntegrationTest.java +225 -0
  191. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/bookmarks/BookmarkToolProviderIntegrationTest.java +115 -0
  192. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/comments/CommentToolProviderIntegrationTest.java +112 -0
  193. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/data/DataToolProviderIntegrationTest.java +129 -0
  194. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/datatypes/DataTypeToolProviderIntegrationTest.java +321 -0
  195. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/decompiler/DecompilerIncomingReferencesLimitTest.java +197 -0
  196. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/decompiler/DecompilerToolProviderIntegrationTest.java +804 -0
  197. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/functions/FunctionPrototypeToolProviderIntegrationTest.java +509 -0
  198. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/memory/MemoryToolProviderIntegrationTest.java +83 -0
  199. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/project/ProjectToolProviderNestedArchiveIntegrationTest.java +517 -0
  200. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/project/ProjectToolProviderVersionControlIntegrationTest.java +286 -0
  201. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/strings/StringToolProviderIntegrationTest.java +562 -0
  202. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/structures/StructureToolProviderIntegrationTest.java +531 -0
  203. reverse_engineering_assistant-7.2.1/src/test.slow/java/reva/tools/xrefs/CrossReferencesToolProviderIntegrationTest.java +431 -0
  204. reverse_engineering_assistant-7.2.1/src/test.slow/resources/logback.xml +30 -0
  205. reverse_engineering_assistant-7.2.1/tests/README.md +258 -0
  206. reverse_engineering_assistant-7.2.1/tests/__init__.py +29 -0
  207. reverse_engineering_assistant-7.2.1/tests/conftest.py +448 -0
  208. reverse_engineering_assistant-7.2.1/tests/fixtures/test_archive.zip +3 -0
  209. reverse_engineering_assistant-7.2.1/tests/fixtures/test_arm64 +3 -0
  210. reverse_engineering_assistant-7.2.1/tests/fixtures/test_fat_binary +3 -0
  211. reverse_engineering_assistant-7.2.1/tests/fixtures/test_program.c +20 -0
  212. reverse_engineering_assistant-7.2.1/tests/fixtures/test_x86_64 +3 -0
  213. reverse_engineering_assistant-7.2.1/tests/helpers.py +412 -0
  214. reverse_engineering_assistant-7.2.1/tests/requirements.txt +16 -0
  215. reverse_engineering_assistant-7.2.1/tests/test_cli_e2e.py +195 -0
  216. reverse_engineering_assistant-7.2.1/tests/test_cli_project_manager.py +183 -0
  217. reverse_engineering_assistant-7.2.1/tests/test_config.py +110 -0
  218. reverse_engineering_assistant-7.2.1/tests/test_e2e_workflow.py +315 -0
  219. reverse_engineering_assistant-7.2.1/tests/test_import_e2e.py +792 -0
  220. reverse_engineering_assistant-7.2.1/tests/test_launcher.py +128 -0
  221. reverse_engineering_assistant-7.2.1/tests/test_mcp_tools.py +136 -0
  222. reverse_engineering_assistant-7.2.1/tests/test_pyghidra.py +50 -0
  223. reverse_engineering_assistant-7.2.1/tests/test_vscode_mcp_client_compat.py +406 -0
  224. reverse_engineering_assistant-7.2.1/uv.lock +1011 -0
  225. reverse_engineering_assistant-2.9.4/PKG-INFO +0 -208
  226. reverse_engineering_assistant-2.9.4/README.md +0 -183
  227. reverse_engineering_assistant-2.9.4/pyproject.toml +0 -38
  228. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/.gitignore +0 -2
  229. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/__init__.py +0 -91
  230. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/connection.py +0 -27
  231. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/llm_tools.py +0 -134
  232. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/__init__.py +0 -6
  233. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/bookmarks.py +0 -65
  234. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/comment.py +0 -65
  235. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/cross_reference.py +0 -69
  236. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/cursor.py +0 -45
  237. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/data.py +0 -154
  238. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/decompilation.py +0 -204
  239. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tool_box/symbols.py +0 -209
  240. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/api_server_tools/re_tools.py +0 -17
  241. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/assistant.py +0 -503
  242. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/assistant_api_server.py +0 -162
  243. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/chat_client.py +0 -292
  244. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/crash_dump.py +0 -112
  245. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/documents.py +0 -249
  246. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/model.py +0 -72
  247. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2.py +0 -35
  248. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2.pyi +0 -33
  249. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaBookmark_pb2_grpc.py +0 -145
  250. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2.py +0 -39
  251. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2.pyi +0 -55
  252. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaChat_pb2_grpc.py +0 -235
  253. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2.py +0 -31
  254. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2.pyi +0 -19
  255. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaComment_pb2_grpc.py +0 -102
  256. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2.py +0 -47
  257. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2.pyi +0 -94
  258. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaData_pb2_grpc.py +0 -231
  259. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2.py +0 -31
  260. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2.pyi +0 -21
  261. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetCursor_pb2_grpc.py +0 -102
  262. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2.py +0 -44
  263. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2.pyi +0 -83
  264. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetDecompilation_pb2_grpc.py +0 -231
  265. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2.py +0 -47
  266. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2.pyi +0 -70
  267. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaGetSymbols_pb2_grpc.py +0 -260
  268. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2.py +0 -31
  269. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2.pyi +0 -21
  270. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHandshake_pb2_grpc.py +0 -102
  271. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2.py +0 -31
  272. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2.pyi +0 -23
  273. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaHeartbeat_pb2_grpc.py +0 -102
  274. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2.py +0 -31
  275. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2.pyi +0 -20
  276. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaReferences_pb2_grpc.py +0 -102
  277. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2.py +0 -27
  278. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2.pyi +0 -17
  279. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/RevaVariable_pb2_grpc.py +0 -29
  280. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/protocol/__init__.py +0 -0
  281. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/reva_exceptions.py +0 -14
  282. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant/tool.py +0 -127
  283. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/PKG-INFO +0 -208
  284. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/SOURCES.txt +0 -64
  285. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/entry_points.txt +0 -3
  286. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/requires.txt +0 -14
  287. reverse_engineering_assistant-2.9.4/reverse_engineering_assistant.egg-info/top_level.txt +0 -1
  288. {reverse_engineering_assistant-2.9.4 → reverse_engineering_assistant-7.2.1}/setup.cfg +0 -0
  289. {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,6 @@
1
+ name: New doc
2
+ version: 0.0.1
3
+ schema: v1
4
+ docs:
5
+ - name: New docs
6
+ startUrl: https://docs.continue.dev
@@ -0,0 +1,6 @@
1
+ name: Model Context Protocol Java
2
+ version: 0.0.1
3
+ schema: v1
4
+ docs:
5
+ - name: MCP
6
+ startUrl: https://modelcontextprotocol.io/sdk/java/mcp-overview
@@ -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