From 3680b94d179b9bd8f07ae81292f165287bf584d6 Mon Sep 17 00:00:00 2001 From: Jonathan Herrewijnen Date: Sat, 7 Sep 2024 21:41:17 +0200 Subject: [PATCH] Adding initial setup for function_extractor from binary files, (for use in graph networking later on) --- .vscode/launch.json | 24 +++ debug.py | 7 +- herrewebpy/firmware_forensics/__init__.py | 1 + .../firmware_forensics/function_extractor.py | 160 ++++++++++++++++++ requirements.txt | 8 +- sample_data/firmwares/S7_BL31.bin | Bin 0 -> 147456 bytes 6 files changed, 196 insertions(+), 4 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 herrewebpy/firmware_forensics/__init__.py create mode 100644 herrewebpy/firmware_forensics/function_extractor.py create mode 100644 sample_data/firmwares/S7_BL31.bin diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..71f426b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,24 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "FF_FunctionExtractor", + "type": "debugpy", + "request": "launch", + "program": "herrewebpy/firmware_forensics/function_extractor.py", + "args": [ + "--binary", + "sample_data/firmwares/S7_BL31.bin", + "--architecture", + "ARM_AARCH64", + "--endian", + "little", + ], + "console": "integratedTerminal", + "justMyCode": false + } + ] +} \ No newline at end of file diff --git a/debug.py b/debug.py index e022498..555e15d 100644 --- a/debug.py +++ b/debug.py @@ -1,2 +1,5 @@ -from herrewebpy.bioinformatics import sequence_alignment -sequence_alignment.SequenceAlignment(['aa', 'bb', 'cc'],['bb','aa','cc'], ['1','2','3'], ['1','2','3']) \ No newline at end of file +#from herrewebpy.bioinformatics import sequence_alignment +#sequence_alignment.SequenceAlignment(['aa', 'bb', 'cc'],['bb','aa','cc'], ['1','2','3'], ['1','2','3']) + +from herrewebpy.firmware_forensics import function_extractor +function_extractor.FunctionExtractor('', 'ARM_AARCH64') \ No newline at end of file diff --git a/herrewebpy/firmware_forensics/__init__.py b/herrewebpy/firmware_forensics/__init__.py new file mode 100644 index 0000000..b974282 --- /dev/null +++ b/herrewebpy/firmware_forensics/__init__.py @@ -0,0 +1 @@ +from . import * \ No newline at end of file diff --git a/herrewebpy/firmware_forensics/function_extractor.py b/herrewebpy/firmware_forensics/function_extractor.py new file mode 100644 index 0000000..67cb9fe --- /dev/null +++ b/herrewebpy/firmware_forensics/function_extractor.py @@ -0,0 +1,160 @@ +import argparse +import sys +from capstone import * +from capstone.arm64 import ARM64_OP_IMM +from tqdm import tqdm +import pandas as pd +from herrewebpy import logger + +class ARM_AARCH32_Parser: + def __init__(self, binary_bytes): + self.binary_bytes = binary_bytes + self.functions = [] + + def extract_functions(self): + # Extract functions from ARM AARCH32 binary. Not implemented yet. + return NotImplemented + + +class ARM_AARCH64_Parser: + def __init__(self, binary_bytes, start_address=0x0): + self.binary_bytes = binary_bytes + self.start_address = start_address + self.functions = [] + + def extract_functions(self, df, endian): + if endian == 'big': + md = Cs(CS_ARCH_ARM64, CS_MODE_ARM | CS_MODE_BIG_ENDIAN) + else: + md = Cs(CS_ARCH_ARM64, CS_MODE_ARM) + + md.detail = True + + instructions = list(md.disasm(self.binary_bytes, self.start_address)) + func_start = None + func_name = None + seen_functions = set() + call_stack = [] + + for offset in tqdm(range(0, len(self.binary_bytes), 4), desc="Scanning binary for functions"): + instruction_bytes = self.binary_bytes[offset:offset+4] + if len(instruction_bytes) < 4: + continue + + try: + instruction = next(md.disasm(instruction_bytes, offset), None) + if instruction is None: + continue + except Exception: + continue + + if func_start is None: + if instruction.mnemonic in ['stp', 'sub'] and 'sp' in instruction.op_str: + func_start = instruction.address + func_name = f"func_{func_start:x}" + seen_functions.add(func_start) + new_row = pd.DataFrame([{ + 'FUNC_ADDRESS': func_name, + 'LOCATION': func_start, + 'REFERENCES': [] + }]) + df = pd.concat([df, new_row], ignore_index=True) + + if instruction.mnemonic in ['ret', 'bx'] and instruction.op_str == 'lr': + func_start = None + func_name = None + + if instruction.mnemonic in ['bl', 'blx']: + if len(instruction.operands) > 0 and instruction.operands[0].type == ARM64_OP_IMM: + target_address = instruction.operands[0].imm + if not df.empty: + df.at[df.index[-1], 'REFERENCES'].append(f"func_{target_address:x}") + + if target_address not in seen_functions: + call_stack.append(target_address) + + return df + + def process_function(self, start_address, df, md, seen_functions, call_stack): + if start_address in seen_functions: + return + + seen_functions.add(start_address) + func_start = start_address + func_name = f"func_{start_address:x}" + references = [] + + for instruction in md.disasm(self.binary_bytes[start_address:], start_address): + if instruction.mnemonic in ['ret', 'bx'] and instruction.op_str == 'lr': + new_row = pd.DataFrame([{ + 'FUNC_ADDRESS': func_name, + 'LOCATION': func_start, + 'REFERENCES': references + }]) + df = pd.concat([df, new_row], ignore_index=True) + break + + if instruction.mnemonic in ['bl', 'blx']: + target_address = instruction.operands[0].imm + references.append(f"func_{target_address:x}") + if target_address not in seen_functions: + call_stack.append(target_address) + + return df + +class FunctionExtractor: + def __init__(self, binary, architecture, endian): + self.binary = binary + self.architecture = architecture.upper() + self.endian = endian + self.dataframe = pd.DataFrame(columns=['FUNC_ADDRESS', 'LOCATION', 'REFERENCES']) + self.extract_functions() + + def binary_bytes(self): + with open(self.binary, 'rb') as f: + return f.read() + + def extract_functions(self): + binary_bytes = self.binary_bytes() + + if self.architecture == 'ARM_AARCH32': + self.parser = ARM_AARCH32_Parser(binary_bytes) + self.functions = self.parser.extract_functions() + elif self.architecture == 'ARM_AARCH64': + self.parser = ARM_AARCH64_Parser(binary_bytes) + self.dataframe = self.parser.extract_functions(self.dataframe, self.endian) + else: + logger.error('Architecture not supported: ' + self.architecture) + return + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Extract functions from firmware binaries.') + parser.add_argument('--binary', help='The binary file to extract functions from.', required=True, type=str) + parser.add_argument('--output', help='The output file to write the functions to.', required=False, type=str) + parser.add_argument( + '--architecture', + help='The architecture of the binary. Use: ARM_AARCH64, ARM_AARCH32, etc.', + required=True, + type=str, + choices=['ARM_AARCH64', 'ARM_AARCH32'] + ) + parser.add_argument( + '--endian', + help='The endianness of the binary. Use: little, big.', + required=True, + type=str, + choices=['little', 'big'] + ) + args = parser.parse_args() + + logger.info('Extracting functions from binary: ' + args.binary, 'using architecture: ' + args.architecture.upper()) + + df = FunctionExtractor(args.binary, args.architecture, args.endian) + + if not args.output: + args.output = args.binary + '.functions' + + with open(args.output, 'w') as f: + df.dataframe.to_csv(f, index=False) + + sys.path.append('.') diff --git a/requirements.txt b/requirements.txt index 74c894b..7a8035d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,10 @@ pandas numpy tensorflow -sklearn +scikit-learn seaborn -scikit-learn \ No newline at end of file +scikit-learn +capstone +keystone +plotly +BioPython \ No newline at end of file diff --git a/sample_data/firmwares/S7_BL31.bin b/sample_data/firmwares/S7_BL31.bin new file mode 100644 index 0000000000000000000000000000000000000000..72d4b2992c417704797a5a3e297e99893627c58a GIT binary patch literal 147456 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 literal 0 HcmV?d00001