Formatting

This commit is contained in:
Giulio De Pasquale 2023-02-15 12:50:28 -08:00
parent d0036e0a44
commit 9a171fadab

View File

@ -12,35 +12,42 @@ from typing import List, Dict
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("file", help="File to analyze") 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() args = parser.parse_args()
class WrappedBin: class WrappedBin:
def __init__(self, filename: str): def __init__(self, filename: str):
self.angr: angr.Project = angr.Project(filename) self.angr: angr.Project = angr.Project(filename)
"""
Interface
"""
class Analysis: class Analysis:
def __init__(self, target: WrappedBin): def __init__(self, target: WrappedBin):
self.target = target self.target = target
def name(self) -> str: def name(self) -> str:
pass pass
def execute(self): def execute(self):
pass pass
def __get_relevant_vars__(self) -> Dict: def __get_relevant_vars__(self) -> Dict:
# get all attributes of the instance # get all attributes of the instance
instance_vars = vars(self) instance_vars = vars(self)
# filter out attributes that belong to the parent class # 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: def __json_dumps__(self) -> str:
return json.dumps(self.__get_relevant_vars__()) return json.dumps(self.__get_relevant_vars__())
class AnalysisManager: class AnalysisManager:
def __init__(self, target: WrappedBin, tasks: List[Analysis] = []): def __init__(self, target: WrappedBin, tasks: List[Analysis] = []):
self.target: WrappedBin = target self.target: WrappedBin = target
@ -54,46 +61,47 @@ class AnalysisManager:
def run_tasks(self): def run_tasks(self):
n_tasks = len(self.tasks) n_tasks = len(self.tasks)
print("Starting analyses...") print("Starting analyses...")
for n, t in enumerate(self.tasks): for n, t in enumerate(self.tasks):
print(f"\t[{n + 1}/{n_tasks}] Running {t.name()}") print(f"\t[{n + 1}/{n_tasks}] Running {t.name()}")
ret = t.execute() ret = t.execute()
if ret: if ret:
print(ret) print(ret)
print("Done") print("Done")
class LoaderFacts(Analysis): class LoaderFacts(Analysis):
def name(self) -> str: def name(self) -> str:
return "Loader Facts" return "Loader Facts"
def execute(self): def execute(self):
self.sections: Regions = self.target.angr.loader.all_objects[0].sections self.sections: Regions = self.target.angr.loader.all_objects[0].sections
self.aslr: bool = self.target.angr.loader.aslr self.aslr: bool = self.target.angr.loader.aslr
return self.__json_dumps__() return self.__json_dumps__()
def main(): def main():
if not os.path.exists(args.file): if not os.path.exists(args.file):
print("File does not exist") print("File does not exist")
exit(1) exit(1)
target = WrappedBin(args.file) target = WrappedBin(args.file)
tasks = [ LoaderFacts ] tasks = [LoaderFacts]
am = AnalysisManager(target, tasks) am = AnalysisManager(target, tasks)
am.run_tasks() am.run_tasks()
if args.debug: if args.debug:
embed() embed()
return return
if __name__ == "__main__": if __name__ == "__main__":
main() main()