Untitled
unknown
plain_text
6 months ago
1.6 kB
3
Indexable
import angr def find_call_paths(cfg, start_func, target_func_addr, path=None, paths=None): if path is None: path = [] if paths is None: paths = [] # Dodaj funkcję do aktualnej ścieżki path = path + [start_func] # Jeśli dotarliśmy do funkcji docelowej, dodajemy ścieżkę do wyników if start_func.addr == target_func_addr: paths.append(path) return paths # Przechodzimy przez następców (następne funkcje wywołane przez start_func) for succ in cfg.get_successors(start_func): if succ not in path: # Unikamy cykli find_call_paths(cfg, succ, target_func_addr, path, paths) return paths def main(): # Ścieżka do pliku binarnego binary_path = "/path/to/binary" # Załaduj projekt angr proj = angr.Project(binary_path, auto_load_libs=False) # Tworzenie CFG cfg = proj.analyses.CFGFast() # Znalezienie adresu funkcji docelowej target_func_name = "target_function_name" # Zmień na nazwę funkcji docelowej target_func_addr = proj.loader.find_symbol(target_func_name).rebased_addr # Tworzenie listy ścieżek do funkcji docelowej paths = [] for func in cfg.functions.values(): if func.addr != target_func_addr: # Omijamy samą funkcję docelową jako punkt startowy paths.extend(find_call_paths(cfg, func, target_func_addr)) # Wypisanie wyników for idx, path in enumerate(paths): print(f"Ścieżka {idx + 1}:") for func in path: print(f" -> {func.name}") print("") if __name__ == "__main__": main()
Editor is loading...
Leave a Comment