symbolic-execution-tools

Solve CTF reversing challenges using angr, Z3, and Unicorn Engine symbolic execution.

Updated Jun 5, 2026
One-click install
npx skills add https://github.com/lNwNl/Praxis --skill symbolic-execution-tools-lnwnl
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: symbolic-execution-tools
Source: https://github.com/lNwNl/Praxis/tree/main/skills/_disabled/symbolic-execution-tools
Command: npx skills add https://github.com/lNwNl/Praxis --skill symbolic-execution-tools-lnwnl

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires angr, z3-solver, unicorn, capstone, keystone-engine.

What problem does it solve? Reversing CTF binaries by hand is slow and error-prone, and base models often generate broken angr scripts with incorrect state initialization or missing libc hooks. This Skill provides a structured playbook for symbolic execution and constraint solving so you can recover flags, keys, and bypass checks systematically. ## Core Features & Use Cases - angr Automation: Complete pipeline patterns covering entry/blank/full-init states, symbolic stdin/argv/file inputs, SimProcedure hooking for scanf, strcmp, printf, and path-explosion management with Veritesting, DFS, and Unicorn hybrid execution. - Z3 Constraint Solving: BitVec-based patterns for serial key validation, XOR key recovery, systems of linear equations, and optimization problems. - Unicorn Emulation: Code-region emulation with memory and instruction hooks for unpacking shellcode, decrypting strings, and brute-forcing short keys. - 15 Ready-to-Use Recipes: The companion ANGR_COOKBOOK.md provides drop-in script templates for common challenge patterns including multi-stage binaries, flag-format constraints, and rand() replacement. - Use Case: Given a CTF binary that checks a 32-character flag via stdin, load the symbolic stdin recipe, constrain bytes to printable ASCII, explore to the success address, and extract the flag with solver.eval. ## Quick Start Ask the agent to solve the reversing challenge binary at ./challenge using angr symbolic execution with the success message as the find target.

Frequently Asked Questions about symbolic-execution-tools

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I solve a CTF reversing challenge with angr?▼

Create an angr.Project with auto_load_libs=False, build an entry_state with a symbolic claripy bitvector as stdin, constrain bytes to printable ASCII, then call simgr.explore with find and avoid addresses. Extract the solution with found[0].solver.eval on the symbolic variable.

angr vs Z3 vs Unicorn: which tool for binary analysis?▼

Use Z3 for pure math or equation systems without a binary, angr for binaries with control flow that need path exploration, and Unicorn for fast emulation of specific code regions like decryption routines. Combine angr with Unicorn for mostly-concrete execution paths.

How do I handle symbolic input from argv or files in angr?▼

For argv, use full_init_state with a claripy bitvector in the args list. For file input, create an angr.SimFile with symbolic content and pass it through the fs parameter of entry_state. Both patterns are covered in the cookbook recipes.

Why does angr hang or run out of memory on my binary?▼

Path explosion from loops or many conditional branches is the usual cause. Add avoid addresses for dead ends, constrain the input space, hook complex functions with SimProcedures, or switch to DFS or Veritesting exploration techniques.

How do I hook library functions like scanf or strcmp in angr?▼

Define a custom angr.SimProcedure subclass implementing run(), then register it with proj.hook_symbol for the target function name. You can also hook by address with @proj.hook(addr, length=N) to skip or replace specific code blocks.

When should I not use symbolic execution for reversing?▼

Avoid it when binaries have unbounded symbolic memory reads, heavy non-linear constraints that make Z3 return unknown, or kernel and firmware code requiring full OS awareness. In those cases use Qiling for system emulation or manual debugger-based analysis.