Skip to content

Commit bb8d841

Browse files
committed
feat: view analysis in portal option
1 parent 22db22d commit bb8d841

4 files changed

Lines changed: 35 additions & 2 deletions

File tree

reai_toolkit/features/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from reai_toolkit.features.view_function_in_portal import ViewFunctionInPortalFeature
88
from reai_toolkit.features.ai_decompiler import AIDecompilerFeature
99
from reai_toolkit.features.detach import DetachAnalysisFeature
10+
from reai_toolkit.features.view_analysis import ViewAnalysisFeature
1011
__all__ = [
1112
'ConfigurationFeature',
1213
'UploadFeature',
@@ -17,4 +18,5 @@
1718
'ViewFunctionInPortalFeature',
1819
'AIDecompilerFeature'
1920
'DetachAnalysisFeature'
21+
'ViewAnalysisFeature'
2022
]

reai_toolkit/features/detach/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def __init__(self, config=None):
99

1010
def register(self):
1111
PluginCommand.register(
12-
"RevEng.AI\\Analysis\\\u200b\u200bDetach Analysis",
12+
"RevEng.AI\\Analysis\\\u200b\u200b\u200bDetach Analysis",
1313
"Detach from the current RevEng.AI analysis",
1414
self.verify_detach,
1515
self.is_valid
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from reai_toolkit.utils import BaseAuthFeature
2+
from binaryninja import PluginCommand, log_info, BinaryView
3+
from binaryninja.interaction import InteractionHandler
4+
5+
class ViewAnalysisFeature(BaseAuthFeature):
6+
def __init__(self, config=None):
7+
super().__init__(config)
8+
9+
def register(self):
10+
PluginCommand.register(
11+
"RevEng.AI\\Analysis\\\u200b\u200bView Analysis",
12+
"View the current analysis in the RevEng.AI portal",
13+
self.open_analysis,
14+
self.is_valid
15+
)
16+
17+
def open_analysis(self, bv: BinaryView):
18+
url = f"{self.config.portal_url}/analyses/{self.config.binary_id}"
19+
20+
if url:
21+
log_info(f"RevEng.AI | Opening analysis in browser: {url}")
22+
InteractionHandler().open_url(url)
23+
else:
24+
log_info("RevEng.AI | No URL configured for viewing analysis")
25+
26+
def is_valid(self, bv: BinaryView):
27+
return self.config.is_configured == True and self.config.analysis_id is not None
28+

reai_toolkit/revengai.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
from reai_toolkit.features import ViewFunctionInPortalFeature
99
from reai_toolkit.features import AIDecompilerFeature
1010
from reai_toolkit.features import DetachAnalysisFeature
11+
from reai_toolkit.features import ViewAnalysisFeature
1112
class RevengAIPlugin:
1213
def __init__(self):
1314
log_info("RevEng.AI | Initializing plugin")
@@ -20,6 +21,7 @@ def __init__(self):
2021
self.view_function_in_portal_feature = ViewFunctionInPortalFeature(self.config_feature.get_config())
2122
self.ai_decompiler_feature = AIDecompilerFeature(self.config_feature.get_config())
2223
self.detach_analysis_feature = DetachAnalysisFeature(self.config_feature.get_config())
24+
self.view_analysis_feature = ViewAnalysisFeature(self.config_feature.get_config())
2325
self._register_features()
2426

2527
def _register_features(self):
@@ -32,4 +34,5 @@ def _register_features(self):
3234
self.match_current_function_feature.register()
3335
self.view_function_in_portal_feature.register()
3436
self.ai_decompiler_feature.register()
35-
self.detach_analysis_feature.register()
37+
self.detach_analysis_feature.register()
38+
self.view_analysis_feature.register()

0 commit comments

Comments
 (0)