Skip to content

Instantly share code, notes, and snippets.

# Untested, but could be used to generate a script to annotate a binary for GDB
# Run this script inside of the snippet editor to create a shell script
output = "#!/bin/bash\n"
for sym in bv.get_symbols():
flags = ",global"
if sym.type == SymbolType.FunctionSymbol:
flags += ",function"
output += f"objcopy input --add-symbol {sym.name}=.text:{hex(sym.address)}{flags} output; mv output input;\n"
outputfile = get_save_filename_input("script command")
if outputfile:
# Copyright (c) 2022 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
@psifertex
psifertex / copy-types.py
Last active April 7, 2022 15:45
copy types from one open binary ninja tab to another
#copy types -- cannot be run as a snippet. Copy into console switch tabs, run again
if 'saved_types' in globals() or 'saved_types' in locals():
log_info("Adding types...")
for t in saved_types:
bv.define_user_type(t[0], t[1])
del saved_types
else:
log_info("Copying types...")
saved_types = [ (x, bv.types[x]) for x in bv.type_names if not bv.is_type_auto_defined(x) ]
# SEE: https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/make_code.py
@psifertex
psifertex / resumes.js
Last active January 21, 2022 17:51
google apps script to save/sort incoming resumes
function processResumes()
{
/* Configuration */
var labelToSave = 'Resumes';
var labelToMarkSaved = 'Resumes/Saved';
var labelBroken = 'Resumes/Saved/Broken';
var resumeFolderID = 'INSERTYOURFOLDERIDHERE';
// Folder ID can be found just by browsing to the folder in google drive
/* Configuration Goes Here */
@psifertex
psifertex / transform.py
Created April 21, 2021 17:15
example transform API plugin for Binary Ninja
from binaryninja import Transform
from binaryninja.enums import TransformType
class HASHA(Transform):
name = 'HASHA'
long_name = 'ALWAYS RETURN A'
transform_type = TransformType.HashTransform
def perform_decode(self, data, params):
return b"AAAAA"
@psifertex
psifertex / gist:04f673069c10ee16a97e420e26228863
Created April 7, 2021 21:38
append to setters pydoc in a class decorator
We couldn’t find that file to show.
#############################################################################
##
## Copyright (C) 2017 The Qt Company Ltd.
## Contact: http://www.qt.io/licensing/
##
## This file is part of the Qt for Python examples of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:BSD$
## You may use this file under the terms of the BSD license as follows:
@psifertex
psifertex / public-slack.md
Last active September 22, 2020 20:36
Notes on running a "public" slack

My recommended settings for setting up a slack that you plan to allow public access to. Methods for adding public users include third-party utilities like slackin (https://github.com/emedvedev/slackin-extended) which enable active user badges, or simpler methods such as using the Share Invite Link from slack itself.

SUPER IMPORTANT

If you only do two things, make it these two: Make sure to disable all app integrations. There's a bunch that aren't secure for public slacks. Either deny all, or require review by an admin: https://YOURSLACK.slack.com/apps/manage/permissions Second, disable email in the profile view: https://binaryninja.slack.com/admin/settings#display_email_addresses

The reset are optional settings that may or may not be required depending on the slack:

@psifertex
psifertex / batch.py
Created May 25, 2020 21:01
simple batch processing script
#!/usr/bin/env python3
from binaryninja import *
import glob, sys, os
if len(sys.argv) > 1:
path = sys.argv[1:]
else:
path = ["/bin/ls"]
for arg in path:
for f in [x for x in glob.glob(arg) if os.path.isfile(x) and os.access(x, os.R_OK)]: