Skip to content

Instantly share code, notes, and snippets.

View RobinDavid's full-sized avatar

Robin David RobinDavid

View GitHub Profile
@RobinDavid
RobinDavid / pls.py
Created August 30, 2020 17:46
SMT formula very hard to solve, even though its size is rather small
#!/usr/bin/env python3
import z3
a = z3.BitVec("a", 8)
b = z3.BitVec("b", 8)
c = z3.BitVec("c", 8)
d = z3.BitVec("d", 8)
e = z3.BitVec("e", 8)
solver = z3.SolverFor("QF_BV")
@RobinDavid
RobinDavid / tokenize_line.py
Created June 28, 2020 18:36
Tokenize a given line as provided by IDA
import ida_lines
import ida_kernwin
from enum import Enum
def tokenize_line(line):
COLOR_ON = "\x01"
COLOR_OFF = "\x02"
blacklist = ["SCOLOR_ON", "SCOLOR_OFF", "SCOLOR_ESC", "SCOLOR_INV", "SCOLOR_UTF8", "SCOLOR_FG_MAX"]
tag_mapping = Enum("TagMapping", {x: getattr(ida_lines, x) for x in dir(ida_lines) if (x.startswith("SCOLOR_") and x not in blacklist)})
@RobinDavid
RobinDavid / get_prob_ida.py
Created April 28, 2020 10:58
Getting all problems in IDA Pro
import ida_ida
import ida_problems
import ida_idaapi
from enum import IntEnum
PrType = IntEnum("PrType", {x: getattr(ida_problems, x) for x in dir(ida_problems) if x.startswith("PR_") and x!="PR_END"})
problems = {}
@RobinDavid
RobinDavid / ida_snapshot_iter.py
Created April 10, 2020 21:52
IDA Pro iteratively restore all snapshots
import ida_kernwin
import ida_loader
ss = ida_loader.snapshot_t()
ida_loader.build_snapshot_tree(ss)
ccs = list(ss.children)
def callback(param1, param2):
@RobinDavid
RobinDavid / sum_share_size.py
Created August 8, 2019 15:37
Sum the size of all the shared libraries for a given dynamic ELF
#!/usr/bin/env python3
import sys
from pathlib import Path
import lddwrap
from hurry.filesize import size
def get_shared_size(filepath):
deps = lddwrap.list_dependencies(Path(filepath))
tot_size = 0
for d in deps:
@RobinDavid
RobinDavid / deadline_exec.py
Created March 29, 2018 14:52
Launch a function in a proces with a timeout on the execution time.
from multiprocessing import Process, Queue
def deadline(timeout, f, *args):
queue = Queue() #using to get the result
def subproc_function(queue, f, *args):
res = f(*args)
queue.put(res)
proc = Process(target=subproc_function, args=(queue, f) +args) #creation of a process calling longfunction with the specified arguments
proc.start() #lauching the processus on another thread
try:
res = queue.get(timeout=timeout) #getting the resultat under 1 second or stop
@RobinDavid
RobinDavid / connect_kernel_client.py
Created March 23, 2018 15:25
Connecting programmatically (in python) to an existing jupyter kernel (from its file)
file = "/run/user/1000/jupyter/kernel-7365.json"
from jupyter_client.blocking import BlockingKernelClient
client = BlockingKernelClient(connection_file=file)
client.load_connection_file()
client.start_channels()
@RobinDavid
RobinDavid / wiki_first_image.py
Created June 12, 2017 16:06
Download the first image of a wikipedia article
import sys
import lxml.html
from path import Path
import wikipedia
import requests
def dl_image(search_str):
page = wikipedia.page(search_str)
html = lxml.html.fromstring(page.html())
imgs = html.xpath("//img")
@RobinDavid
RobinDavid / screenshot_webpage.py
Last active May 26, 2017 09:50
Take a webpage screenshot
from selenium import webdriver
import sys
url_input = ("file://" if not sys.argv[1].startswith("http") else "") + sys.argv[1]
image_output = sys.argv[2]
driver = webdriver.Chrome() # or PhantomJS() not to open a windows (require phantomjs)
driver.get(url_input)
if driver.save_screenshot(image_output):
print("Save ok !")
@RobinDavid
RobinDavid / bin_diff.sh
Last active April 26, 2017 21:46
Binary diffing two files
#!/bin/zsh
#require zsh and colordiff (credits: https://superuser.com/questions/125376/how-do-i-compare-binary-files-in-linux)
diff -y <(xxd $1) <(xxd $2) | colordiff