diff options
Diffstat (limited to 'scripts/install_api.py')
| -rwxr-xr-x | scripts/install_api.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/scripts/install_api.py b/scripts/install_api.py new file mode 100755 index 00000000..53679ba5 --- /dev/null +++ b/scripts/install_api.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# +# Thanks to @withzombies for letting us adapt his script +# + +import sys +import os +from site import getsitepackages, getusersitepackages, check_enableusersite + +try: + import binaryninja + print("Binary Ninja API already Installed") + sys.exit(1) +except ImportError: + pass + +if sys.platform.startswith("linux"): + userpath = os.path.expanduser("~/.binaryninja") + lastrun = os.path.join(userpath, "lastrun") + if os.path.isfile(lastrun): + lastrunpath = open(lastrun).read().strip() + api_path = os.path.join(lastrunpath, "python") + print("Found install folder of {}".format(api_path)) + else: + print("Running on linux, but ~/.binaryninja/lastrun does not exist") + sys.exit(0) +elif sys.platform == "darwin": + api_path = "/Applications/Binary Ninja.app/Contents/Resources/python" +else: + # Windows + api_path = "r'C:\Program Files\Vector35\BinaryNinja\python'" + + +def validate_path(path): + try: + os.stat(path) + except OSError: + return False + + old_path = sys.path + sys.path.append(path) + + try: + from binaryninja import core_version + print("Found Binary Ninja core version: {}".format(core_version)) + except ImportError: + sys.path = old_path + return False + + return True + + +while not validate_path(api_path): + print("\nBinary Ninja not found. Please provide the path to Binary " + \ + "Ninja's install directory: \n [{}] : ".format(api_path)) + + new_path = sys.stdin.readline().strip() + if len(new_path) == 0: + print("\nInvalid path") + continue + + if not new_path.endswith('python'): + new_path = os.path.join(new_path, 'python') + + api_path = new_path + +if ( len(sys.argv) > 1 and sys.argv[1].lower() == "root" ): + #write to root site + install_path = getsitepackages()[0] + if not os.access(install_path, os.W_OK): + print("Root install specified but cannot write to {}".format(install_path)) + sys.exit(1) +else: + if check_enableusersite(): + install_path = getusersitepackages() + if not os.path.exists(install_path): + os.makedirs(install_path) + else: + print("Warning, trying to write to user site packages, but check_enableusersite fails.") + sys.exit(1) + +binaryninja_pth_path = os.path.join(install_path, 'binaryninja.pth') +open(binaryninja_pth_path, 'wb').write(api_path) + +print("Binary Ninja API installed using {}".format(binaryninja_pth_path)) |
