Skip to content

Commit

Permalink
rename builder.update to bootstrap so that builder.optimize's semanti…
Browse files Browse the repository at this point in the history
…c meaning is clearer
  • Loading branch information
Kyle-Kyle committed Feb 11, 2025
1 parent 3f48c75 commit 19dfe53
Show file tree
Hide file tree
Showing 12 changed files with 23 additions and 27 deletions.
21 changes: 10 additions & 11 deletions angrop/chain_builder/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,19 +159,18 @@ def set_badbytes(self, badbytes):
def set_roparg_filler(self, roparg_filler):
self.roparg_filler = roparg_filler

def update(self):
self._reg_mover.update()
self._reg_setter.update()
self._mem_writer.update()
self._mem_changer.update()
self._func_caller.update()
def bootstrap(self):
self._reg_mover.bootstrap()
self._reg_setter.bootstrap()
self._mem_writer.bootstrap()
self._mem_changer.bootstrap()
self._func_caller.bootstrap()
if self._sys_caller:
self._sys_caller.update()
self._pivot.update()
self._shifter.update()
self._sys_caller.bootstrap()
self._pivot.bootstrap()
self._shifter.bootstrap()

self._reg_mover.advanced_update()
self._reg_setter.advanced_update()
self._reg_setter.optimize()

# should also be able to do execve by providing writable memory
# todo pass values to setregs as symbolic variables
4 changes: 2 additions & 2 deletions angrop/chain_builder/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -371,14 +371,14 @@ def _filter_gadgets(self, gadgets):
return bests

@abstractmethod
def update(self):
def bootstrap(self):
"""
update the builder based on current gadgets to bootstrap a functional builder
"""
raise NotImplementedError("each Builder class should have an `update` method!")

@abstractmethod
def advanced_update(self):
def optimize(self):
"""
improve the capability of this builder using other builders
"""
Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/func_caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def __init__(self, chain_builder):
platform=self.project.simos.name if self.project.simos is not None else None,
)(self.project.arch)

def update(self):
def bootstrap(self):
cc = self._cc
self._func_jmp_gadgets = set()
for g in self.chain_builder.gadgets:
Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/mem_changer.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def __init__(self, chain_builder):
self._mem_change_gadgets = None
self._mem_add_gadgets = None

def update(self):
def bootstrap(self):
self._mem_change_gadgets = self._get_all_mem_change_gadgets(self.chain_builder.gadgets)
self._mem_add_gadgets = self._get_all_mem_add_gadgets()

Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/mem_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def __init__(self, chain_builder):
self._mem_write_gadgets: set = None # type: ignore
self._good_mem_write_gadgets: set = None # type: ignore

def update(self):
def bootstrap(self):
self._mem_write_gadgets = self._get_all_mem_write_gadgets(self.chain_builder.gadgets)
self._good_mem_write_gadgets = set()

Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/pivot.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def __init__(self, chain_builder):
super().__init__(chain_builder)
self._pivot_gadgets: list = None # type: ignore

def update(self):
def bootstrap(self):
self._pivot_gadgets = self.filter_gadgets(self.chain_builder.pivot_gadgets)

def pivot(self, thing):
Expand Down
5 changes: 1 addition & 4 deletions angrop/chain_builder/reg_mover.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,11 @@ def __init__(self, chain_builder):
self._reg_moving_blocks = None
self._graph = None

def update(self):
def bootstrap(self):
reg_moving_gadgets = self.filter_gadgets(self.chain_builder.gadgets)
self._reg_moving_blocks = {g for g in reg_moving_gadgets if g.self_contained}
self._build_move_graph()

def advanced_update(self):
pass

def _build_move_graph(self):
self._graph = nx.DiGraph()
graph = self._graph
Expand Down
4 changes: 2 additions & 2 deletions angrop/chain_builder/reg_setter.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def _insert_to_reg_dict(self, gs):
lst = self._reg_setting_dict[reg]
self._reg_setting_dict[reg] = sorted(lst, key=lambda x: x.stack_change)

def update(self):
def bootstrap(self):
self._reg_setting_gadgets = self.filter_gadgets(self.chain_builder.gadgets)

# update reg_setting_dict
Expand All @@ -61,7 +61,7 @@ def update(self):

self.hard_chain_cache = {}

def advanced_update(self):
def optimize(self):
# now we have a functional RegSetter, check whether we can do better

# first, TODO: see whether we can use reg_mover to set hard-registers
Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/shifter.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def __init__(self, chain_builder):

self.shift_gadgets = None

def update(self):
def bootstrap(self):
self.shift_gadgets = self.filter_gadgets(self.chain_builder.gadgets)

def verify_shift(self, chain, length, preserve_regs):
Expand Down
2 changes: 1 addition & 1 deletion angrop/chain_builder/sys_caller.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def __init__(self, chain_builder):
def supported_os(os):
return "unix" in os.lower()

def update(self):
def bootstrap(self):
self.syscall_gadgets = self.filter_gadgets(self.chain_builder.syscall_gadgets)

def filter_gadgets(self, gadgets) -> list: # pylint: disable=no-self-use
Expand Down
2 changes: 1 addition & 1 deletion angrop/rop.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def _screen_gadgets(self):
self.chain_builder.gadgets = self.rop_gadgets
self.chain_builder.pivot_gadgets = self.pivot_gadgets
self.chain_builder.syscall_gadgets = self.syscall_gadgets
self.chain_builder.update()
self.chain_builder.bootstrap()

def analyze_addr(self, addr):
"""
Expand Down
2 changes: 1 addition & 1 deletion tests/test_find_gadgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ def test_gadget_filtering():
rop = proj.analyses.ROP(fast_mode=False, only_check_near_rets=False, is_thumb=True)
rop.analyze_gadget(0x42bca5)
rop.analyze_gadget(0x42c3c1)
rop.chain_builder.update()
rop.chain_builder.bootstrap()
assert len(rop.chain_builder._reg_setter._reg_setting_gadgets) == 1

def test_aarch64_svc():
Expand Down

0 comments on commit 19dfe53

Please sign in to comment.