# devploit/geminihunter architecture

> Architecture diagram of the GitHub repository devploit/geminihunter, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/devploit/geminihunter
- Repository: https://github.com/devploit/geminihunter

## Overview

geminiHunter is an active scanner for exposed Google Gemini API keys in web assets, archived content, and Android packages. The principal flow is CLI inputs → discovery or supplied keys → extraction/deduplication → validation and optional 403 bypass → intelligence gathering for working keys → reports and curl evidence. The graph preserves the documented discovery and reporting capabilities; unsampled wiring is included only where the README or sampled orchestrator supports it.

Main entry points: [`src/geminihunter/pipeline.py`](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/pipeline.py) (Scan pipeline), [`src/geminihunter/network/session.py`](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/network/session.py) (HTTP session), [`src/geminihunter/cli.py`](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/cli.py) (CLI inputs), [`src/geminihunter/validation/validator.py`](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/validation/validator.py) (Key validation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Entry and orchestration"]
  node_cli["CLI inputs<br/>[cli.py]"]
  node_config["Scan configuration<br/>[config.py]"]
  node_pipeline["Scan pipeline<br/>[pipeline.py]"]
end

subgraph group_discovery["Source discovery"]
  node_crawler["Web crawler<br/>[crawler.py]"]
  node_apk["Android scanner<br/>[apk.py]"]
  node_wayback["Wayback assets<br/>[wayback.py]"]
  node_sourcemaps["Source maps<br/>[sourcemaps.py]"]
  node_webpack["Webpack chunks<br/>[webpack.py]"]
  node_urlfinder["URL discovery<br/>[urlfinder.py]"]
end

subgraph group_assessment["Key assessment"]
  node_extractor["Key extraction<br/>[extractor.py]"]
  node_validator["Key validation<br/>[validator.py]"]
  node_bypass["403 bypass engine<br/>[bypass.py]"]
  node_recon["Key intelligence<br/>[recon.py]"]
  node_session["HTTP session<br/>[session.py]"]
  node_models["Scan result models<br/>[models.py]"]
end

subgraph group_reporting["Results and evidence"]
  node_console["Terminal report<br/>[console.py]"]
  node_json["JSON report<br/>[json_out.py]"]
  node_evidence["Curl evidence<br/>[evidence.py]"]
end

node_user(("Scanner operator"))
node_web(("Web targets"))
node_android(("APK or XAPK"))
node_google(("Google Gemini API"))

node_user -->|"provides inputs"| node_cli
node_cli -->|"builds config"| node_config
node_cli -->|"starts scan"| node_pipeline
node_web -->|"target input"| node_pipeline
node_android -->|"package input"| node_pipeline
node_pipeline -->|"crawls targets"| node_crawler
node_pipeline -->|"scans packages"| node_apk
node_pipeline -->|"fetches archives"| node_wayback
node_pipeline -->|"follows maps"| node_sourcemaps
node_pipeline -->|"finds chunks"| node_webpack
node_pipeline -->|"finds URLs"| node_urlfinder
node_crawler -->|"fetches assets"| node_session
node_wayback -->|"fetches archives"| node_session
node_pipeline -->|"extracts keys"| node_extractor
node_pipeline -->|"validates keys"| node_validator
node_validator -->|"probes 403s"| node_bypass
node_validator -->|"sends requests"| node_session
node_recon -->|"sends probes"| node_session
node_pipeline -->|"gathers intelligence"| node_recon
node_session -->|"API requests"| node_google
node_pipeline -->|"builds results"| node_models
node_pipeline -->|"renders results"| node_console
node_pipeline -->|"writes report"| node_json
node_pipeline -->|"generates commands"| node_evidence
node_evidence -->|"reproduction requests"| node_google

click node_cli "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/cli.py"
click node_config "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/config.py"
click node_pipeline "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/pipeline.py"
click node_crawler "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/crawler.py"
click node_apk "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/apk.py"
click node_wayback "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/wayback.py"
click node_sourcemaps "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/sourcemaps.py"
click node_webpack "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/webpack.py"
click node_urlfinder "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/urlfinder.py"
click node_extractor "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/extraction/extractor.py"
click node_validator "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/validation/validator.py"
click node_bypass "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/validation/bypass.py"
click node_recon "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/intelligence/recon.py"
click node_session "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/network/session.py"
click node_models "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/models.py"
click node_console "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/console.py"
click node_json "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/json_out.py"
click node_evidence "https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/evidence.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_cli,node_config,node_pipeline toneBlue
class node_crawler,node_apk,node_wayback,node_sourcemaps,node_webpack,node_urlfinder toneAmber
class node_extractor,node_validator,node_bypass,node_recon,node_session,node_models,node_google toneMint
class node_console,node_json,node_evidence toneRose
class node_user,node_web,node_android toneIndigo
```

## Components

### Entry and orchestration

- [CLI inputs](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/cli.py): `src/geminihunter/cli.py`
- [Scan configuration](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/config.py): `src/geminihunter/config.py`
- [Scan pipeline](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/pipeline.py): `src/geminihunter/pipeline.py`

### Source discovery

- [Web crawler](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/crawler.py): `src/geminihunter/discovery/crawler.py`
- [Android scanner](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/apk.py): `src/geminihunter/discovery/apk.py`
- [Wayback assets](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/wayback.py): `src/geminihunter/discovery/wayback.py`
- [Source maps](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/sourcemaps.py): `src/geminihunter/discovery/sourcemaps.py`
- [Webpack chunks](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/webpack.py): `src/geminihunter/discovery/webpack.py`
- [URL discovery](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/discovery/urlfinder.py): `src/geminihunter/discovery/urlfinder.py`

### Key assessment

- [Key extraction](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/extraction/extractor.py): `src/geminihunter/extraction/extractor.py`
- [Key validation](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/validation/validator.py): `src/geminihunter/validation/validator.py`
- [403 bypass engine](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/validation/bypass.py): `src/geminihunter/validation/bypass.py`
- [Key intelligence](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/intelligence/recon.py): `src/geminihunter/intelligence/recon.py`
- [HTTP session](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/network/session.py): `src/geminihunter/network/session.py`
- [Scan result models](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/models.py): `src/geminihunter/models.py`

### Results and evidence

- [Terminal report](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/console.py): `src/geminihunter/output/console.py`
- [JSON report](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/json_out.py): `src/geminihunter/output/json_out.py`
- [Curl evidence](https://github.com/devploit/geminihunter/blob/main/src/geminihunter/output/evidence.py): `src/geminihunter/output/evidence.py`

### Other components

- **Scanner operator**
- **Web targets**
- **APK or XAPK**
- **Google Gemini API**

## Connections

- Scanner operator → CLI inputs: provides inputs
- CLI inputs → Scan configuration: builds config
- CLI inputs → Scan pipeline: starts scan
- Web targets → Scan pipeline: target input
- APK or XAPK → Scan pipeline: package input
- Scan pipeline → Web crawler: crawls targets
- Scan pipeline → Android scanner: scans packages
- Scan pipeline → Wayback assets: fetches archives
- Scan pipeline → Source maps: follows maps
- Scan pipeline → Webpack chunks: finds chunks
- Scan pipeline → URL discovery: finds URLs
- Web crawler → HTTP session: fetches assets
- Wayback assets → HTTP session: fetches archives
- Scan pipeline → Key extraction: extracts keys
- Scan pipeline → Key validation: validates keys
- Key validation → 403 bypass engine: probes 403s
- Key validation → HTTP session: sends requests
- Key intelligence → HTTP session: sends probes
- Scan pipeline → Key intelligence: gathers intelligence
- HTTP session → Google Gemini API: API requests
- Scan pipeline → Scan result models: builds results
- Scan pipeline → Terminal report: renders results
- Scan pipeline → JSON report: writes report
- Scan pipeline → Curl evidence: generates commands
- Curl evidence → Google Gemini API: reproduction requests
