Last active
August 24, 2022 19:15
-
-
Save alexander-hanel/982b66bade6e32f9259b9b7f55aea322 to your computer and use it in GitHub Desktop.
Explore Binary Ninja's Python API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import logging | |
logging.basicConfig() | |
logging.getLogger().setLevel(logging.DEBUG) | |
file_name = "" | |
try: | |
import binaryninja | |
logging.debug("BinaryNinja has been imported") | |
except ModuleNotFoundError: | |
logging.critical("BinaryNinja module is not installed.") | |
exit() | |
with binaryninja.open_view(file_name) as bv: | |
print("bv.address_comments, %s" % (bv.address_comments)) | |
print("bv.address_size, %s" % (bv.address_size)) | |
print("bv.allocated_ranges, %s" % (bv.allocated_ranges)) | |
print("bv.analysis_changed, %s" % (bv.analysis_changed)) | |
print("bv.analysis_info, %s" % (bv.analysis_changed)) | |
print("bv.analysis_progress, %s" % (bv.analysis_progress)) | |
print("bv.arch %s " % (bv.arch)) | |
print("bv.available_view_types %s" % (bv.available_view_types)) | |
print("bv.basic_blocks, type: Generator") | |
for cc, gg in enumerate(bv.basic_blocks): | |
print("\tbasic block:", gg) | |
print ("\tbasic block instances:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.data_tags, %s" % (bv.data_tags)) | |
print("bv.data_vars, %s" % (bv.data_vars)) | |
print("bv.end, %s" % (bv.end)) | |
print("bv.endianness, %s" % (bv.endianness)) | |
print("bv.entry_function, %s" % (bv.entry_function)) | |
print("bv.entry_point, %s" % (bv.entry_point)) | |
print("bv.executable, %s" % (bv.executable)) | |
# print("dir(bv.file), %s ") % (dir(bv.file)) | |
# print("bv.file.filename, %s" % (bv.file.filename)) | |
print("bv.functions, %s" % (bv.functions)) | |
for cc, gg in enumerate(bv.functions): | |
print("\tfunctions:", gg) | |
print ("\tfunctions instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.global_pointer_value, %s" % (bv.global_pointer_value)) | |
print("bv.has_data_variables, %s" % (bv.has_data_variables)) | |
print("bv.has_database, %s" % (bv.has_database)) | |
print("bv.has_functions, %s" % (bv.has_functions)) | |
print("bv.has_symbols, %s" % (bv.has_symbols)) | |
print("bv.hlil_basic_blocks, %s" % (bv.hlil_basic_blocks)) | |
print("v.hlil_basic_blocks, %s" % (bv.hlil_basic_blocks)) | |
print("bv.hlil_instructions, %s" % (bv.hlil_instructions)) | |
print("bv.instructions, %s" % (bv.instructions)) | |
print("bv.linear_disassembly, %s" % (bv.linear_disassembly)) | |
for cc, gg in enumerate(bv.linear_disassembly): | |
print("\tlinear_disassembly:", gg) | |
print ("\tlinear_disassembly instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.llil_basic_blocks, %s" % (bv.llil_basic_blocks)) | |
for cc, gg in enumerate(bv.llil_basic_blocks): | |
print("\tllil_basic_blocks:", gg) | |
print ("\tllil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.llil_instructions, %s" % (bv.llil_basic_blocks)) | |
for cc, gg in enumerate(bv.llil_basic_blocks): | |
print("\tllil_basic_blocks:", gg) | |
print ("\tllil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.long_name, %s" % (bv.long_name)) | |
print("bv.llil_instructions, %s" % (bv.llil_instructions)) | |
for cc, gg in enumerate(bv.llil_instructions): | |
print("\tllil_instructions:", gg) | |
print ("\tllil_instructions instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.long_name, %s" % (bv.long_name)) | |
print("bv.max_function_size_for_analysis, %s" % (bv.max_function_size_for_analysis)) | |
print("bv.mlil_basic_blocks, %s" % (bv.mlil_basic_blocks)) | |
for cc, gg in enumerate(bv.mlil_basic_blocks): | |
print("\tmlil_basic_blocks:", gg) | |
print ("\tmlil_basic_blocks instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.mlil_instructions, %s" % (bv.mlil_instructions)) | |
for cc, gg in enumerate(bv.llil_basic_blocks): | |
print("\tmlil_instructions:", gg) | |
print ("\tmlil_instructions instance:", [tt for tt in dir(gg) if "__" not in tt]) | |
if cc == 3: | |
break | |
print("bv.modified), %s" % (bv.modified)) | |
print("bv.name, %s" % (bv.name)) | |
print("bv.namespaces, %s" % (bv.namespaces)) | |
print("bv.new_auto_function_analysis_suppressed, %s" % (bv.new_auto_function_analysis_suppressed)) | |
# print("bv.next_address, %s" % (bv.next_address)) | |
# print("bv.notifications, %s" % (bv.notifications)) | |
print("bv.offset, %s" % (bv.offset)) | |
print("bv.parameters_for_analysis, %s" % (bv.parameters_for_analysis)) | |
print("bv.parent_view, %s" % (bv.parent_view)) | |
print("bv.platform, %s" % (bv.platform)) | |
print("bv.registered_view_type, %s" % (bv.registered_view_type)) | |
print("bv.relocatable, %s" % (bv.relocatable)) | |
print("bv.relocation_ranges, %s" % (bv.relocation_ranges)) | |
print("bv.saved, %s" % (bv.saved)) | |
print("bv.sections, %s" % (bv.sections)) | |
print("v.segments), %s" % (bv.segments)) | |
print("bv.session_data, %s" % (bv.session_data)) | |
print("bv.start, 0x%x" % (bv.start)) | |
print("bv.strings, %s" % (bv.strings)) | |
print("bv.symbols, %s" % (bv.symbols)) | |
print("bv.tag_types, %s" % (bv.tag_types)) | |
print("bv.type_libraries, %s" % (bv.type_libraries)) | |
print("bv.type_names, %s" % (bv.type_names)) | |
print("bv.types, %s" % (bv.types)) | |
print("bv.view_type, %s" % (bv.view_type)) |
References
Access SSA
>>> xxx = bv.get_function_at(plat=bv.platform, addr=here)
>>> xxx.mlil.ssa_form
<mlil func: x86_64@0x140008870>
Basic Blocks
for block in current_function.basic_blocks:
print("%d -> 0x%x" % (block.index+1, block.start))
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Output