From 9a171fadabeb6e5dc96a17cdc3c73a544932b7d1 Mon Sep 17 00:00:00 2001 From: Giulio De Pasquale Date: Wed, 15 Feb 2023 12:50:28 -0800 Subject: [PATCH] Formatting --- script.py | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/script.py b/script.py index ce92165..fe5a48e 100755 --- a/script.py +++ b/script.py @@ -12,35 +12,42 @@ from typing import List, Dict parser = argparse.ArgumentParser() parser.add_argument("file", help="File to analyze") -parser.add_argument("-d", "--debug", help="Enable debug mode", action = "store_true", default = False) +parser.add_argument( + "-d", "--debug", help="Enable debug mode", action="store_true", default=False +) args = parser.parse_args() + class WrappedBin: def __init__(self, filename: str): self.angr: angr.Project = angr.Project(filename) -""" -Interface -""" + class Analysis: def __init__(self, target: WrappedBin): self.target = target - + def name(self) -> str: pass + def execute(self): pass - def __get_relevant_vars__(self) -> Dict: + def __get_relevant_vars__(self) -> Dict: # get all attributes of the instance instance_vars = vars(self) # filter out attributes that belong to the parent class - return {k: str(v) for k, v in instance_vars.items() if not k.startswith("__") and k != "target"} + return { + k: str(v) + for k, v in instance_vars.items() + if not k.startswith("__") and k != "target" + } def __json_dumps__(self) -> str: return json.dumps(self.__get_relevant_vars__()) - + + class AnalysisManager: def __init__(self, target: WrappedBin, tasks: List[Analysis] = []): self.target: WrappedBin = target @@ -54,46 +61,47 @@ class AnalysisManager: def run_tasks(self): n_tasks = len(self.tasks) - + print("Starting analyses...") - + for n, t in enumerate(self.tasks): print(f"\t[{n + 1}/{n_tasks}] Running {t.name()}") - + ret = t.execute() if ret: print(ret) - + print("Done") class LoaderFacts(Analysis): def name(self) -> str: return "Loader Facts" - + def execute(self): self.sections: Regions = self.target.angr.loader.all_objects[0].sections self.aslr: bool = self.target.angr.loader.aslr return self.__json_dumps__() - + def main(): if not os.path.exists(args.file): print("File does not exist") exit(1) target = WrappedBin(args.file) - tasks = [ LoaderFacts ] + tasks = [LoaderFacts] am = AnalysisManager(target, tasks) am.run_tasks() if args.debug: embed() - + return + if __name__ == "__main__": main()