Skip to content

Instantly share code, notes, and snippets.

View RobinDavid's full-sized avatar

Robin David RobinDavid

View GitHub Profile
@RobinDavid
RobinDavid / mk_strings.py
Created January 7, 2025 21:12
Try creating strings whenever possible in the given range in IDA
import ida_bytes
from ida_idaapi import BADADDR
import ida_nalt
def mk_strings(ea: int, end: int = BADADDR):
addr = ea
while True:
addr = ida_bytes.next_unknown(addr, end)
if addr == end:
@RobinDavid
RobinDavid / extract-pixmap.py
Created November 14, 2024 22:50
Extract the first page as a PNG file.
import fitz # PyMuPDF
import sys
from pathlib import Path
def extract_png_from_pdf(pdf_file, output_path):
# Ouvrir le fichier PDF
pdf_document = fitz.open(pdf_file)
# Sélectionner la première page
first_page = pdf_document[0]
@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")