以下是一份常用的 Binary Ninja Python API 汇总,包括常用的 BinaryView、Function、BasicBlock 等类及其属性和方法的介绍。这份总结提供了一些常用的 API,以便您更好地开始使用 Binary Ninja。

BinaryView

BinaryView 类是 Binary Ninja 中的最核心类之一,它提供了对二进制文件的访问和分析功能。以下是该类的一些重要属性和方法:

属性

  • BinaryView.file.filename: 获取二进制文件的文件名。
  • BinaryView.start: int: 获取二进制文件的起始地址。
  • BinaryView.arch: Architecture: 获取二进制文件的架构。
  • BinaryView.entry_point: int: 获取二进制文件的入口点地址。
  • BinaryView.view: BinaryView: 获取当前 BinaryView 实例的原始 BinaryView 实例。

方法

  • BinaryView.get_functions_containing(addr: int) -> Generator[Function, None, None]: 获取包含给定地址的函数列表。
  • BinaryView.get_sections_at(addr: int) -> Sequence[Section]: 获取在给定地址处的所有节(section)。
  • BinaryView.platform: Optional[Platform]: 获取二进制文件的操作系统平台。
  • BinaryView.get_symbol_by_raw_name(name: str) -> Optional[Symbol]: 根据符号名称获取符号对象 Symbol。

Symbol

Symbol 类表示二进制文件中的符号。以下是该类的一些重要属性和方法:

属性

  • Symbol.type: SymbolType: 表示符号类型的枚举值(例如函数、变量等)。
  • Symbol.name: str: 表示符号名称的字符串。
  • Symbol.address: int: 表示符号地址的整数值。

方法

  • Symbol.is_function() -> bool: 如果符号表示函数返回 True,否则返回 False。
  • Symbol.is_imported() -> bool: 如果符号是引入的(也称为内部符号)返回 True,否则返回 False。
  • Symbol.is_exported() -> bool: 如果符号是导出的(也称为外部符号)返回 True,否则返回 False。

Function

Function 类表示二进制文件中的一个函数。以下是该类的一些重要属性和方法:

属性

  • Function.name: str: 获取函数名称的字符串。
  • Function.address: int: 获取函数起始地址的整数值。
  • Function.view: BinaryView: 获取当前 Function 实例所属的 BinaryView 实例。
  • Function.return_type: Type: 获取函数的返回类型的字符串。
  • Function.calling_convention: CallingConvention: 获取函数的调用约定的枚举类型。

方法

  • Function.get_high_level_il() -> Optional[HighLevelILFunction]: 获取函数的高级 IL(HLIL)对象 HighLevelILFunction。
  • Function.get_basic_blocks(): -> Generator[BasicBlock, None, None]: 获取函数的所有基本块 BasicBlock。

BasicBlock

BasicBlock 类表示一个函数中的基本块。以下是该类的一些重要属性和方法:

属性

  • BasicBlock.start: int: 获取基本块的起始地址的整数值。
  • BasicBlock.end: int: 获取基本块的结束地址的整数值。
  • BasicBlock.function: Function: 获取当前 BasicBlock 实例所属的 Function 实例。

方法

  • BasicBlock.get_disassembly_text(format: DisassemblyTextLineType) -> List[DisassemblyTextLine]: 获取基本块的反汇编文本。
  • BasicBlock.get_presumed_line_number() -> int: 根据当前机器码的地址获取行号。

HighLevelILOperation

HighLevelILOperation 枚举类型表示 HLIL 中支持的所有操作类型。以下是一些常见的操作类型:

  • HighLevelILOperation.HLIL_CALL: HLIL 函数调用操作
  • HighLevelILOperation.HLIL_BRANCH: HLIL 条件分支操作
  • HighLevelILOperation.HLIL_RET: HLIL 函数返回操作

HighLevelILInstruction

HighLevelILInstruction 类表示 HLIL 中的一条指令。以下是该类的一些重要属性和方法:

属性

  • HighLevelILInstruction.operation: HighLevelILOperation: 获取当前指令的操作类型。
  • HighLevelILInstruction.params: Tuple[int]: 获取当前 HLIL 指令的操作数的列表。
  • HighLevelILInstruction.size: Optional[int]: 获取当前 HLIL 指令的大小(字节数)。

方法

  • HighLevelILInstruction.get_raw(): -> ILInstruction: 获取原始的 IL 指令 ILInstruction。

BinaryReader

BinaryReader 类允许您读取二进制数据,例如以特定字节顺序(大端或小端顺序)读取数据。以下是该类的一些重要属性和方法:

属性

  • BinaryReader.view: BinaryView: 获取 BinaryReader 类的 BinaryView 实例。
  • BinaryReader.endianness: Endianness: 获取当前 BinaryReader 实例的字节顺序。
  • BinaryReader.offset: int: 获取当前要读取的流的偏移量。

方法

  • BinaryReader.read(type: str) -> Any: 读取给定类型(例如 “int”、“short”、“long” 等)的数据。
  • BinaryReader.seek(offset: int) -> None: 设置当前读取的流的偏移位置给定的偏移地址。

BinaryWriter

BinaryWriter 类允许您根据二进制数据格式将数据写入二进制文件或内存中。以下是该类的一些重要属性和方法:

属性:

  • BinaryWriter.view: BinaryView: 获取当前 BinaryWriter 实例的 BinaryView 实例。
  • BinaryWriter.endianness: Endianness: 获取当前 BinaryWriter 实例的字节顺序。
  • BinaryWriter.offset: int: 获取当前要写入数据的偏移位置。

方法:

  • BinaryWriter.write(type: str, data: Any) -> int: 将给定类型(例如 “int”、“short”、“long” 等)的数据写入文件或内存中。
  • BinaryWriter.seek(offset: int) -> None: 将当前要写入数据的偏移位置设置为给定的偏移地址。

参考文档