Skip to content

Commit 85a4473

Browse files
committed
fix: analysis sync
1 parent 3bde1dc commit 85a4473

5 files changed

Lines changed: 19 additions & 15 deletions

File tree

reai_toolkit/features/choose_source/choose_source.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import revengai
22
from reai_toolkit.utils import get_sha256
33
from reai_toolkit.utils.core.sync import AnalysisSyncService
4+
from reai_toolkit.features.configuration.config import Config
45
from binaryninja import BinaryView, log_info, log_error
56

67
class ChooseSource:
7-
def __init__(self, config):
8-
self.config = config
8+
def __init__(self, config: Config):
9+
self.config: Config = config
910

1011
self.sync_service = AnalysisSyncService(config)
1112

reai_toolkit/features/configuration/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from reai_toolkit.utils import get_sha256
44
from binaryninja.interaction import InteractionHandler
55
from binaryninja import Settings, log_info, log_error, BinaryView
6+
from reai_toolkit.utils.core.sync import AnalysisSyncService
67

78

89
class Config:
@@ -145,6 +146,7 @@ def init_config(self, bv: BinaryView):
145146
self.binary_id = all_analyses[self.sha256]["binary_id"]
146147
self.analysis_id = all_analyses[self.sha256]["analysis_id"]
147148
self.model_id = all_analyses[self.sha256]["model_id"]
149+
AnalysisSyncService(self).sync_analysis_data(analysis_id=self.analysis_id, bv=bv)
148150
else:
149151
log_info(f"RevEng.AI | Binary not found in saved configurations, searching in RevEng.AI...")
150152
with revengai.ApiClient(self.api_config) as api_client:
@@ -156,6 +158,7 @@ def init_config(self, bv: BinaryView):
156158
self.binary_id = api_response.data.results[0].binary_id
157159
self.analysis_id = api_response.data.results[0].analysis_id
158160
self.model_id = api_response.data.results[0].model_id
161+
AnalysisSyncService(self).sync_analysis_data(analysis_id=self.analysis_id, bv=bv)
159162
log_info(f"RevEng.AI | Binary found in RevEng.AI, binary_id: {self.binary_id}")
160163
self.set_current_info(self.binary_id, self.analysis_id, self.model_id)
161164

reai_toolkit/features/upload/upload.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ def upload_binary(self, bv: BinaryView, options: dict):
9595

9696
log_info(f"RevEng.AI | Analysis started successfully. Analysis ID: {analysis_result.data.analysis_id}, Binary ID: {analysis_result.data.binary_id}")
9797

98-
PeriodicChecker().start_checking(bv, analysis_result.data.analysis_id, analysis_result.data.binary_id, self.config.set_current_info, self.config.api_config)
98+
PeriodicChecker(self.config).start_checking(bv, analysis_result.data.analysis_id, analysis_result.data.binary_id, self.config.set_current_info, self.config.api_config)
9999

100100
return True, "Analysis started successfully."
101101

reai_toolkit/utils/core/sync.py

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ class AnalysisSyncService:
77

88
sdk_config: Configuration
99

10-
def __init__(self, sdk_config: Configuration):
11-
self.sdk_config = sdk_config
10+
def __init__(self, config):
11+
self.config = config
12+
self.sdk_config = config.api_config
1213

1314
def _get_current_base_address(self, bv) -> int:
1415
return bv.start
@@ -46,7 +47,6 @@ def _fetch_function_map(self, analysis_id: int) -> FunctionMapping:
4647
analysis_id=analysis_id
4748
)
4849
func_map = function_map.data.function_maps
49-
self.safe_put_function_mapping(func_map=func_map)
5050
return func_map
5151

5252
def _match_functions(
@@ -108,15 +108,9 @@ def sync_analysis_data(
108108
"""
109109
Syncs the analysis data until completion or failure.
110110
"""
111-
response = self.api_request_returning(
112-
fn=lambda: self._fetch_function_map(analysis_id=analysis_id)
113-
)
114-
115-
if not response.success:
116-
self.call_callback(generic_return=response)
117-
return
111+
response = self._fetch_function_map(analysis_id=analysis_id)
118112

119-
function_mapping: FunctionMapping = response.data
113+
function_mapping: FunctionMapping = response
120114

121115
self._match_functions(func_map=function_mapping, bv=bv)
122116

reai_toolkit/utils/monitoring/process_binary_monitor.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@
66
from requests.exceptions import RequestException
77
from PySide6.QtWidgets import QMessageBox
88
from PySide6.QtCore import QObject, Signal
9+
from reai_toolkit.utils.core.sync import AnalysisSyncService
910

1011
class PeriodicChecker(QObject):
1112
update_text_signal = Signal(object, str)
13+
sync_service: AnalysisSyncService
1214

13-
def __init__(self):
15+
def __init__(self, config):
1416
super().__init__()
1517
self._current_timer: Optional[Timer] = None
1618
self.number_of_clicks = 0
1719
self.update_text_signal.connect(self._update_text_slot)
20+
self.sync_service = AnalysisSyncService(config)
1821

1922
def _update_text_slot(self, callback, text):
2023
"""Slot that runs in the main thread to safely update UI"""
@@ -62,6 +65,9 @@ def _worker(bv: BinaryView, bid: int, aid: int):
6265
)
6366
model_id = analysis_details.data.model_id
6467
callback(bid, aid, model_id)
68+
69+
self.sync_service.sync_analysis_data(analysis_id=aid, bv=bv)
70+
6571
log_info(f"RevEng.AI | Analysis completed with status: {status} for Binary ID: {bid} | Analysis ID: {aid} | Model ID: {model_id}")
6672
except RequestException as ex:
6773
log_error(f"RevEng.AI | Error getting binary analysis status: {str(ex)}")

0 commit comments

Comments
 (0)