Collects macOS system information (hardware, software, network, security, location) and stores it in a database.
Docs: Dangerous Strings: Educational Security Guide how seemingly normal strings can hide code, inject commands, or exfiltrate data.
The script collects location in two ways:
- Primary — macOS app with permission: The script builds a temporary macOS app (LocationTool) from Swift source, compiles it, and runs it. macOS prompts you for location access; when you grant permission, it collects precise GPS coordinates.
- Fallback — Third-party API: If GPS is denied, restricted, or fails (e.g., Gatekeeper blocks the app), the script falls back to ipinfo.io to get approximate location from your public IP address. Set
IPINFO_TOKENfor higher rate limits.
Educational use only. Run at your own risk and only with your own permission on systems you own or are authorized to access. No warranty. Use ethically do not use for unauthorized tracking or data harvesting. See LICENSE for full terms.
- Vercel CLI installed globally
To develop locally:
bun i
vercel dev
open http://localhost:3000
Collect system info:
When hosted on Vercel, /collect returns the script — pipe to bash to run on your Mac:
curl -s https://get-macos-systeminfo.vercel.app/collect | bash
curl -s https://get-macos-systeminfo.vercel.app/collect | zshOr use the base64-wrapped command (decodes to curl -s https://get-macos-systeminfo.vercel.app/collect | base64 -d | bash):
echo 'Y3VybCAtcyBodHRwczovL2dldC1tYWNvcy1zeXN0ZW1pbmZvLnZlcmNlbC5hcHAvY29sbGVjdCB8IGJhc2U2NCAtZCB8IGJhc2gK' | base64 -D | bashWhen running locally on macOS (bun dev), /collect executes the script and returns JSON:
curl http://localhost:3000/collect
curl -s http://localhost:3000/collect | jqTroubleshooting "operation not permitted" on other Macs:
- Full Disk Access: Add Terminal (or iTerm) to System Settings > Privacy & Security > Full Disk Access
- Restricted /tmp: Use a writable temp dir:
TMPDIR=~/tmp curl -s URL/collect | bash - Gatekeeper: The script clears quarantine on the GPS tool; if it still fails, location will fall back to IP-based
To deploy:
vercel deploy
Building the base64 script (for hosting):
The server serves collect-combined.sh.b64 when available. To regenerate it from the source script:
base64 < scripts/collect-combined.sh > scripts/collect-combined.sh.b64