Skip to main content

AI-powered CLI tool to analyze Apple crash files

Project description

โšก Sandevistan

AI-augmented Apple security research toolkit

Sandevistan augments your security research with AI-powered tools for analyzing Apple crash reports, tracking security updates, and more.

sandy analyze crash.ips      # AI-powered crash analysis
sandy scrape                 # Fetch Apple security updates
# โœจ Powered by Google Gemini Flash

๐ŸŽฏ Why Sandevistan?

Like the Cyberpunk cyberware it's named after, Sandevistan augments your capabilitiesโ€”letting you process security data at machine speed.

Challenge How Sandevistan Helps
๐Ÿ˜ต Crash logs are cryptic ๐Ÿ“– AI translates IPS files to plain English
โฐ Tracking updates is tedious ๐Ÿ”„ Auto-scrape Apple security advisories
๐Ÿค” CVE details scattered ๐Ÿ“Š Structured data export (JSON/CSV/SQLite)
๐Ÿ“š Need deep Apple internals knowledge ๐Ÿค– AI handles the technical analysis

๐Ÿš€ Quick Start

๐Ÿ“ฆ Installation

macOS (Homebrew):

brew tap Dil4rd/sandevistan
brew install sandevistan

Cross-platform (uvx - recommended):

uvx sandevistan  # or 'sandy' for short

Alternative (pipx):

pipx install sandevistan

๐Ÿ”‘ Setup (one-time)

sandy config --api-key YOUR_GOOGLE_API_KEY

๐Ÿ”— Get your free API key: Google AI Studio


๐Ÿ”ง Features

Note: Both sandevistan and sandy commands work identically. Examples below use sandy for brevity.

๐Ÿง  Crash Analysis

Analyze Apple IPS crash files with AI-powered explanations.

# Single file
sandy analyze crash.ips

# Entire folder
sandy analyze ~/Library/Logs/DiagnosticReports/

When multiple files are found, you'll get an interactive menu:

Found 3 IPS files in ./crashes:
  [0] All files
  [1] AppCrash_2024-01-15.ips
  [2] KernelPanic_2024-01-16.ips
  [3] SegFault_2024-01-17.ips

Select files to analyze (e.g., "1,3" or "0" for all): _

What you get:

  • โœ… What crashed โ€” Process, thread, and component that failed
  • โœ… Why it crashed โ€” Root cause in plain English
  • โœ… Key details โ€” Exception types, addresses, and code symbols

๐Ÿ” Security Updates Scraper

Scrape Apple's security updates and CVE data into structured formats.

# Scrape to all formats (JSON, CSV, SQLite)
sandy scrape

# Specific format(s)
sandy scrape -f json
sandy scrape -f json -f csv

# Custom output filename
sandy scrape -o security_updates

# Fast mode (skip detailed CVE scraping)
sandy scrape --skip-advisories

Output includes:

  • ๐Ÿ“‹ Security update metadata (date, OS, version, URL)
  • ๐Ÿ› CVE entries with descriptions
  • ๐Ÿ”— Links to full advisories

โš™๏ธ Configuration

sandy config --show                # ๐Ÿ“‹ View current settings
sandy config --path                # ๐Ÿ“‚ Show config location
sandy config --api-key YOUR_KEY    # ๐Ÿ” Update API key
sandy config --model gemini-2.0    # ๐Ÿค– Change AI model
sandy config --delay 2.0           # โฑ๏ธ Set scraper rate limit

๐Ÿ“ Example Output

Crash Analysis

Analyzing file: MyApp_2024-01-15.ips
Using model: gemini-2.0-flash-exp
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

**What crashed:** MyApp (process) crashed in the main thread

**Why it crashed:** Null pointer dereference - The app attempted to access
memory at address 0x0, which is not a valid memory location.

**Key technical details:**
- Exception Type: EXC_BAD_ACCESS (SIGSEGV)
- Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
- Crashed Thread: 0 (Main thread)
- Relevant Frame: MyApp`-[MyViewController buttonTapped:] + 42

Security Updates Scrape

Scraping Apple security updates...
Found 156 security updates
Fetching advisory details... [โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ] 100%
Exported to: security_updates.json, security_updates.csv, security_updates.db

๐Ÿ› ๏ธ Development

Local development

# Clone the repo
git clone https://github.com/Dil4rd/sandevistan.git
cd sandevistan

# Run without installation
uvx --from . sandy --help

# Install in editable mode
uv pip install -e .

Requirements

  • ๐Ÿ Python 3.11+
  • ๐Ÿ”‘ Google API key (free tier available)
  • ๐Ÿ“ฆ uv package manager (install here)

๐Ÿ—๏ธ Architecture

Built with modern Python tools for speed and reliability:

  • ๐Ÿง  AI Engine: Google Gemini Flash (fast, accurate analysis)
  • ๐Ÿ”„ Workflow: LangGraph (structured multi-step pipelines)
  • โš™๏ธ CLI: Click (user-friendly command interface)
  • ๐Ÿ“ฆ Package Manager: uv (blazing fast dependency resolution)

๐Ÿ—บ๏ธ Roadmap

Future augmentations planned:

  • IPS explannation caching for efficient token reuse
  • IPS deduplication
  • Incremental security updates scrape
  • Advanced analytics of security udpates

๐Ÿค Contributing

Found a bug? Have an idea? Contributions are welcome!

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

๐Ÿ“„ License

MIT License - see LICENSE file for details


๐Ÿ™ Acknowledgments


โšก Augment your Apple security research

Get Started โ€ข Report Bug โ€ข Request Feature

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sandevistan-0.3.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sandevistan-0.3.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file sandevistan-0.3.0.tar.gz.

File metadata

  • Download URL: sandevistan-0.3.0.tar.gz
  • Upload date:
  • Size: 17.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sandevistan-0.3.0.tar.gz
Algorithm Hash digest
SHA256 540b751ec9565608ea561bc0615393f8d82631d3efad99e89624d40bbb365cce
MD5 1929b8c32fdef3e0d32b887b49976a09
BLAKE2b-256 24151c1dfa87c6acf5607f44295e9ee672f78dec709fdcffacdc89d8ac68d267

See more details on using hashes here.

Provenance

The following attestation bundles were made for sandevistan-0.3.0.tar.gz:

Publisher: pypi-publish.yml on Dil4rd/sandevistan

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sandevistan-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: sandevistan-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sandevistan-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2ea17592617a64397dcd19eccb4072f3fc0abc54a4114f8697fefb2555d717d8
MD5 0ddab88517a67f334d6408f73d3aaa3e
BLAKE2b-256 72197b38b6b67225526459c97a7be1c33b8586d450980cc46f0b5ad319cf85f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for sandevistan-0.3.0-py3-none-any.whl:

Publisher: pypi-publish.yml on Dil4rd/sandevistan

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page