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.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()