Skip to content

Instantly share code, notes, and snippets.

View widberg's full-sized avatar
🚰
Hydrating

widberg widberg

🚰
Hydrating
View GitHub Profile
// The Witness Console Command Runner Frida Agent
// Usage:
// launch the game with "frida -l "the_witness_console.js" -f witness64_d3d11.exe"
// * Run print_commands() in the frida repl to print registered command names. (the help command
// doesn't list them all)
// * Run something like cmd("command argument0 argument1") to run commands.
// Some commands I tried:
// * The "go" command accepts marker names, run print_gotos() to print a list of marker names the
// game knows about, they don't all have names.
// * If you are clicked into a panel and drawing a line "solve_panel" will print out a shit tonne of
#!/usr/bin/env python3
# A Little To The Left Save Editor
# Usage: python3 a_little_to_the_left_save_editor.py decrypt save1.json save1_decrypted.json
# Usage: python3 a_little_to_the_left_save_editor.py encrypt save1_decrypted.json save1.json
# See https://www.pcgamingwiki.com/wiki/A_Little_to_the_Left for save file locations
# Backup your save file before using this script
import argparse
import json
SHIFT = 11
#!/usr/bin/env python3
# Monster Prom Save Editor
# Usage: python3 monster_prom_save_editor.py decrypt 76561198083837418_GameProgress.xml 76561198083837418_GameProgress_decrypted.xml
# Usage: python3 monster_prom_save_editor.py encrypt 76561198083837418_GameProgress_decrypted.xml 76561198083837418_GameProgress.xml
# See https://www.pcgamingwiki.com/wiki/Monster_Prom for save file locations
# Backup your save file before using this script
import argparse
import base64
import xml.etree.ElementTree as ET
@widberg
widberg / find-compressed-data.py
Created May 24, 2025 01:01 — forked from nstarke/find-compressed-data.py
Find Compressed Data without Compression Header
#!/usr/bin/env python3
#
# find-compressed-data.py
#
# A small script to bruteforce embedded compressed data that might not have a header
# Useful for raw binary firmware images that do not contain a standard
# binary header (ELF, PE, MACH-O).
#
# I included a limt on size at 16KB because this has a tendency to create
"""
This script converts BMFONT FNT XML files to [bff](https://github.com/widberg/bff) Fonts_Z JSON files.
It was originally posted in the [Zouna Underground Discord](https://discord.gg/CQgMNbYeUR) by Ahmed Khaled.
"""
import json
import xml.etree.ElementTree as ET
import os
import sys
import tkinter as tk

The Mighty Quest for Epic Loot Offline Build Instructions

This is a guide for building MQELOffline_cpp and all of its dependencies on Windows.

Please join the Zouna Underground Discord if this interests you.

Prerequisites

You will need a recent version of CMake and Visual Studio 2022. You will also need to download a recent version of ninja and make sure ninja.exe is available in the PATH. Finally, download and install a recent version of Win32 OpenSSL (NOT Light) from Shining Light Productions Win32/Win64 OpenSSL Page and make sure the dlls are installed to the Windows system directory or /bin is added to the PATH. After everything is installe

<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="42">
<CheatEntries>
<CheatEntry>
<ID>0</ID>
<Description>"LOD Auto Assemble script"</Description>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
alloc(newmem,2048)
label(returnhere)
// Empty descriptors have their offset set to 1 + the size of the file and all other fields are zero
struct Desctiptor {
u32 magic;
u32 offset;
u32 capacity;
u32 size;
u32 is_used;
u32 zero;
u8 data[capacity] @ offset;
#!/usr/bin/env python3
# Titan Souls Save File Hash Calculator
# Usage: python3 titan_souls_hash.py "C:\Program Files (x86)\Steam\steamapps\common\Titan Souls\data\SAVE\X.txt" --update
# See https://www.pcgamingwiki.com/wiki/Titan_Souls for alternative save file locations
# Backup your save file before using this script
import argparse
import hashlib
HASH_TEXT_SIZE = 32
from ghidra.program.model.listing import Data
from ghidra.program.model.address import GenericAddress
import re, ctypes
def normalize_name(sym):
return re.sub(r"[^a-zA-Z0-9_]", "_", sym.getName(True))
symbol_table = currentProgram.getSymbolTable()