Progress, autoanalysis, and update for Qt 6.4

This commit is contained in:
Audrey 2022-11-17 16:52:36 -07:00
parent 6984798640
commit 4e03ca0ac4
3 changed files with 23 additions and 10 deletions

View File

@ -31,7 +31,9 @@ class TypeTapperAnalysis(angr.Analysis):
def _analyze_active_flow(self):
node: CFGNode
for node in self._cfg.graph.nodes():
for i, node in enumerate(self._cfg.graph.nodes()):
progress = i / len(self._cfg.graph) * 100
self._update_progress(progress, "Analyzing " + str(node))
block: Block = node.block
if block is not None:
self._engine.handle_vex_block(block.vex)
@ -42,6 +44,7 @@ class TypeTapperAnalysis(angr.Analysis):
proc.analyze(node.addr)
def _analyze_passive_flow(self):
self._update_progress(99.99, "Analyzing passive flow")
queue = OrderedDict()
for block_addr in self.manager.block_info.keys():
queue[block_addr] = None

View File

@ -219,7 +219,7 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
qnode.setSelected(True)
for other_qnode in self.qnodes:
other_qnode.setAcceptHoverEvents(False)
other_qnode.setAcceptedMouseButtons(Qt.MouseButton.NoButton | 0)
other_qnode.setAcceptedMouseButtons(Qt.MouseButton.NoButton | Qt.MouseButton.NoButton)
if qnode is other_qnode:
other_qnode.setOpacity(0.8)
else:
@ -273,7 +273,7 @@ class HierarchicalGraphWidget(QZoomableDraggableGraphicsView):
def end_expand(self, accepted_qnode: Optional['PropChartHG']=None):
for qnode in self.qnodes:
qnode.setAcceptHoverEvents(True)
qnode.setAcceptedMouseButtons(Qt.MouseButton.AllButtons | 0)
qnode.setAcceptedMouseButtons(Qt.MouseButton.AllButtons | Qt.MouseButton.AllButtons)
qnode.setOpacity(1)
for edge in self.qedges:
edge.setOpacity(1)

View File

@ -1,6 +1,8 @@
import threading
from typing import Optional
from angr.analyses.decompiler.structured_codegen.c import CVariable
from angrmanagement.data.jobs.job import Job
from angrmanagement.plugins import BasePlugin
from angrmanagement.ui.views import CodeView
@ -15,14 +17,12 @@ class TypeTapper(BasePlugin):
super().__init__(workspace)
self.kp: Optional[TypeTapperManager] = None
MENU_BUTTONS = ["TypeTapper initial analysis"]
def handle_project_initialization(self):
threading.Thread(target=self._startup).start()
def handle_click_menu(self, idx):
assert idx == 0
cfg = self.workspace.main_instance.cfg
tt = self.workspace.main_instance.project.analyses[TypeTapperAnalysis](cfg)
self.kp = tt.manager
self._start(self.kp.lookup_reg(0x4144a5, "rdi"))
def _startup(self):
self.workspace.main_instance.join_all_jobs(0.200)
self.workspace.main_instance.add_job(TypeTapperStartupJob(self))
def build_context_menu_node(self, node):
# this is bad lol
@ -56,3 +56,13 @@ class TypeTapper(BasePlugin):
)
self.workspace.add_view(view)
self.workspace.raise_view(view)
class TypeTapperStartupJob(Job):
def __init__(self, plugin: TypeTapper, **kwargs):
super().__init__("TypeTapper", **kwargs)
self.plugin = plugin
def _run(self, inst):
cfg = inst.cfg
tt = inst.project.analyses[TypeTapperAnalysis](cfg, progress_callback=self._progress_callback)
self.plugin.kp = tt.manager