summaryrefslogtreecommitdiff
path: root/python/collaboration/examples
diff options
context:
space:
mode:
authorJosh Ferrell <josh@vector35.com>2025-08-27 21:02:59 -0400
committerAlexander Taylor <alex@vector35.com>2025-11-04 22:09:16 -0500
commit5ab92a703fe01634e086cbf278dc8ca36c438a54 (patch)
tree8d3e7341ffa1e896cb51afe075ba32ea0d330ec8 /python/collaboration/examples
parentae1dbe7e69e3a1d5cc69fa5362fba1b85ba5b6b8 (diff)
Add auto downloading of project file dependencies, clean up download APIs
Diffstat (limited to 'python/collaboration/examples')
-rw-r--r--python/collaboration/examples/download_everything.py14
-rw-r--r--python/collaboration/examples/multitool.py2
-rw-r--r--python/collaboration/examples/sync_test.py30
3 files changed, 20 insertions, 26 deletions
diff --git a/python/collaboration/examples/download_everything.py b/python/collaboration/examples/download_everything.py
index ef804e39..61199daa 100644
--- a/python/collaboration/examples/download_everything.py
+++ b/python/collaboration/examples/download_everything.py
@@ -19,7 +19,6 @@
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
-from pathlib import Path
import sys
import binaryninja
@@ -40,18 +39,13 @@ def main():
# Pull every file from every project
for project in remote.projects:
for file in project.files:
- bndb_path = file.default_path
- print(f"{project.name}/{file.name} BNDB at {bndb_path}")
+ print(f"{project.name}/{file.name} BNDB at {file.default_path}")
try:
- metadata: binaryninja.FileMetadata = file.download_to_bndb(bndb_path)
-
- for v in metadata.existing_views:
- if v == 'Raw':
- continue
- bv = metadata.get_view_of_type(v)
+ file.download()
+ with binaryninja.load(file.core_file) as bv:
# Show the entry point to demonstrate we have pulled the analyzed file
- print(f"{project.name}/{file.name} {v} Entrypoint @ 0x{bv.entry_point:08x}")
+ print(f"{project.name}/{file.name} {bv.view_type} Entrypoint @ 0x{bv.entry_point:08x}")
except InterruptedError as e:
# In case of ^C
raise e
diff --git a/python/collaboration/examples/multitool.py b/python/collaboration/examples/multitool.py
index 313e537b..6195fe32 100644
--- a/python/collaboration/examples/multitool.py
+++ b/python/collaboration/examples/multitool.py
@@ -237,7 +237,7 @@ def main():
print(f"Unknown File: {args.name}")
sys.exit(1)
with TqdmProgress(desc="", leave=False) as t:
- file.download(lambda cur, max: t.progress(cur, max))
+ file.download_contents(lambda cur, max: t.progress(cur, max))
print_file_info(file)
elif args.file_command == "delete":
file = project.get_file_by_name(args.name)
diff --git a/python/collaboration/examples/sync_test.py b/python/collaboration/examples/sync_test.py
index 31b4518a..fdebe8c3 100644
--- a/python/collaboration/examples/sync_test.py
+++ b/python/collaboration/examples/sync_test.py
@@ -56,27 +56,27 @@ def main():
project_dir = Path(file.default_path).parent
print(f'Snapshots: {[snapshot.id for snapshot in file.snapshots]}')
- bv = binaryninja.load(file.default_path)
- view_type = bv.view_type
- assert collaboration.RemoteFile.get_for_bv(bv) == file
+ with binaryninja.load(file.default_path) as bv:
+ assert collaboration.RemoteFile.get_for_bv(bv) == file
+ assert bv.entry_function is not None, "Failed to get binary entry function"
- print(f'Setting entry function at 0x{bv.entry_function.start:08x} name to \'entry_function\'')
- bv.entry_function.name = 'entry_function'
- bv.file.save_auto_snapshot()
+ print(f'Setting entry function at 0x{bv.entry_function.start:08x} name to \'entry_function\'')
+ bv.entry_function.name = 'entry_function'
+ bv.file.save_auto_snapshot()
- file.sync(bv, lambda conflicts: False)
- print(f'Snapshots: {[snapshot.id for snapshot in file.snapshots]}')
+ file.sync(bv, lambda conflicts: False)
+ print(f'Snapshots: {[snapshot.id for snapshot in file.snapshots]}')
- # Try deleting the bndb, redownload and see if the function name is preserved
- bv.file.close()
+ # Delete the bndb, redownload and see if the function name is preserved
Path(file.default_path).unlink()
print(f'Redownloading {project.name}/{file.name}...')
- metadata = file.download_to_bndb()
- bv = metadata.get_view_of_type(view_type)
- print(f'Entry function name: {bv.entry_function.name}')
- assert bv.entry_function.name == 'entry_function'
- bv.file.close()
+ file.download()
+ with binaryninja.load(file.core_file) as bv:
+ assert bv.entry_function is not None, "Failed to get binary entry function after redownload"
+
+ print(f'Entry function name: {bv.entry_function.name}')
+ assert bv.entry_function.name == 'entry_function'
finally:
# Clean up