summaryrefslogtreecommitdiff
path: root/python/examples
diff options
context:
space:
mode:
Diffstat (limited to 'python/examples')
-rwxr-xr-xpython/examples/cli_dis.py71
-rwxr-xr-xpython/examples/cli_lift.py90
2 files changed, 161 insertions, 0 deletions
diff --git a/python/examples/cli_dis.py b/python/examples/cli_dis.py
new file mode 100755
index 00000000..09870bac
--- /dev/null
+++ b/python/examples/cli_dis.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+#
+# command-line BinaryNinja disassembler
+#
+# BinaryNinja multiplatform version of Z0MBIE's PE_STAT for opcode frequency
+# statistics http://z0mbie.dreamhosters.com/opcodes.html
+#
+# Copyright (c) 2020 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import sys
+import binaryninja
+
+GREEN = '\x1B[32m'
+NORMAL = '\x1B[0m'
+
+if not sys.argv[2:]:
+ print('usage: %s <arch> <bytes>' % sys.argv[0])
+ print('examples:')
+ print(' eg: %s aarch64 ff 43 00 d1' % sys.argv[0])
+ print(' eg: %s armv7 14 d0 4d e2' % sys.argv[0])
+ print(' eg: %s armv7eb 14 d0 4d e2' % sys.argv[0])
+ print(' eg: %s mips32 27 bd ff f0' % sys.argv[0])
+ print(' eg: %s mipsel32 f0 ff bd 27' % sys.argv[0])
+ print(' eg: %s ppc 93 e1 ff fc' % sys.argv[0])
+ print(' eg: %s ppc_le fc ff e1 93' % sys.argv[0])
+ print(' eg: %s thumb2 85 b0' % sys.argv[0])
+ print(' eg: %s thumb2eb b0 85' % sys.argv[0])
+ print(' eg: %s x86 55' % sys.argv[0])
+ print(' eg: %s x86_64 55' % sys.argv[0])
+ print('')
+ print('architectures:')
+ print('\t' + '\n\t'.join(map(lambda x: x.name, list(binaryninja.Architecture))))
+ sys.exit(-1)
+
+# divide arguments
+archName = sys.argv[1]
+bytesList = sys.argv[2:]
+
+# parse byte arguments
+data = b''.join(list(map(lambda x: int(x,16).to_bytes(1,'big'), bytesList)))
+
+# disassemble
+arch = binaryninja.Architecture[archName]
+toksAndLen = arch.get_instruction_text(data, 0)
+if not toksAndLen or toksAndLen[1]==0:
+ print('disassembly failed')
+ sys.exit(-1)
+
+# report
+toks = toksAndLen[0]
+strs = map(lambda x: x.text, toks)
+print(GREEN, ''.join(strs), NORMAL)
+
diff --git a/python/examples/cli_lift.py b/python/examples/cli_lift.py
new file mode 100755
index 00000000..70371dcc
--- /dev/null
+++ b/python/examples/cli_lift.py
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+#
+# command-line BinaryNinja lifter
+#
+# BinaryNinja multiplatform version of Z0MBIE's PE_STAT for opcode frequency
+# statistics http://z0mbie.dreamhosters.com/opcodes.html
+#
+# Copyright (c) 2020 Vector 35 Inc
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+# IN THE SOFTWARE.
+
+import sys
+import binaryninja
+from binaryninja import core
+from binaryninja import binaryview
+from binaryninja import lowlevelil
+
+RED = '\x1B[31m'
+NORMAL = '\x1B[0m'
+
+def traverse_IL(il, indent):
+ if isinstance(il, lowlevelil.LowLevelILInstruction):
+ print('\t'*indent + il.operation.name)
+
+ for o in il.operands:
+ traverse_IL(o, indent+1)
+
+ else:
+ print('\t'*indent + str(il))
+
+if __name__ == '__main__':
+
+ if not sys.argv[2:]:
+ print('usage: %s <platform> <bytes>' % sys.argv[0])
+ print('')
+ print('examples:')
+ print(' eg: %s linux-armv7 14 d0 4d e2 01 20 a0 e1 00 30 a0 e1 00 c0 a0 e3' % sys.argv[0])
+ print('')
+ print('platforms:')
+ print('\t' + '\n\t'.join(map(str, list(binaryninja.Platform))))
+
+ sys.exit(-1)
+
+ # divide arguments
+ platName = sys.argv[1]
+ archName = platName.split('-')[1]
+ bytesList = sys.argv[2:]
+
+ # parse byte arguments
+ data = b''.join(list(map(lambda x: int(x,16).to_bytes(1,'big'), bytesList)))
+
+ plat = binaryninja.Platform[platName]
+ bv = binaryview.BinaryView.new(data)
+ bv.platform = plat
+
+ bv.add_function(0, plat=plat)
+
+# print('print all the functions, their basic blocks, and their mc instructions')
+# for func in bv.functions:
+# print(repr(func))
+# for block in func:
+# print("\t{0}".format(block))
+# for insn in block:
+# print("\t\t{0}".format(insn))
+
+ print(RED)
+ for func in bv.functions:
+ #print(repr(func))
+ for block in func.low_level_il:
+ #print("\t{0}".format(block))
+ for insn in block:
+ traverse_IL(insn, 0)
+ print(NORMAL)
+