# jaysenlestari/ctf architecture

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

- Interactive diagram: https://gitdiagram.com/jaysenlestari/ctf
- Repository: https://github.com/jaysenlestari/ctf

## Overview

Jay’s CTF Playground is an archive of nine cybersecurity challenges, not a single application. Its principal participant workflow is to obtain a challenge’s public artifact, investigate or exploit it, and recover a flag; the README describes public assets and intended solutions, while implementations vary by challenge. The graph preserves the documented crypto, forensics, and web branches, with extra detail for sampled web runtimes. Unexcerpted challenge internals are represented only at their existing directory paths; their internal flow is not inferred.

Main entry points: [`challanges/web/dark-side-of-asteroid/src/app.py`](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/dark-side-of-asteroid/src/app.py) (Challenge App), [`challanges/crypto/baby-leaked`](https://github.com/jaysenlestari/ctf/tree/master/challanges/crypto/baby-leaked) (Baby Leaked), [`challanges/web/Cryptweb/src/app.py`](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/src/app.py) (Challenge App), [`challanges/web/Cryptweb/bot/bot.js`](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/bot/bot.js) (Admin Browser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_crypto["Cryptography"]
  node_baby["Baby Leaked"]
  node_baby_service["RSA Challenge<br/>[chall.py]"]
  node_baby_solver["RSA Solver<br/>[solver.py]"]
end

subgraph group_forensics["Digital Forensics"]
  node_dear_bf["Dear bf"]
  node_mimpi["mimpi"]
  node_p_info["p-info"]
  node_hulk["hulk"]
  node_nyawit["nyawit"]
  node_update_required["update-required"]
end

subgraph group_web["Web Exploitation"]
  node_cryptweb["Cryptweb"]
  node_cryptweb_app["Challenge App<br/>[app.py]"]
  node_cryptweb_db[("SQLite Data<br/>[app.py]")]
  node_bot_service["Bot Service<br/>[index.js]"]
  node_browser_bot["Admin Browser<br/>[bot.js]"]
  node_asteroid["Dark Side Asteroid"]
  node_asteroid_app["Challenge App<br/>[app.py]"]
  node_asteroid_db[("Asteroid Database<br/>[init_db.py]")]
end

node_participant(("Participant"))

node_participant -->|"gets public assets"| node_baby
node_participant -->|"gets public assets"| node_dear_bf
node_participant -->|"gets public assets"| node_mimpi
node_participant -->|"gets public assets"| node_p_info
node_participant -->|"gets public assets"| node_hulk
node_participant -->|"gets public assets"| node_nyawit
node_participant -->|"gets public assets"| node_update_required
node_participant -->|"exploits challenge"| node_cryptweb
node_participant -->|"exploits challenge"| node_asteroid
node_baby -->|"runs challenge"| node_baby_service
node_baby_solver -->|"queries service"| node_baby_service
node_bot_service -->|"invokes bot"| node_browser_bot
node_browser_bot -.->|"visits configured URL"| node_cryptweb_app
node_asteroid_app -->|"initializes database"| node_asteroid_db
node_asteroid_app -->|"reads and writes"| node_asteroid_db
node_cryptweb_app -->|"reads and writes"| node_cryptweb_db

click node_baby "https://github.com/jaysenlestari/ctf/tree/master/challanges/crypto/baby-leaked"
click node_baby_service "https://github.com/jaysenlestari/ctf/blob/master/challanges/crypto/baby-leaked/public/chall.py"
click node_baby_solver "https://github.com/jaysenlestari/ctf/blob/master/challanges/crypto/baby-leaked/writeup/solver.py"
click node_dear_bf "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/Dear%20bf"
click node_mimpi "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/mimpi"
click node_p_info "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/p-info"
click node_hulk "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/hulk"
click node_nyawit "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/nyawit"
click node_update_required "https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/update-required"
click node_cryptweb "https://github.com/jaysenlestari/ctf/tree/master/challanges/web/Cryptweb"
click node_cryptweb_app "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/src/app.py"
click node_cryptweb_db "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/src/app.py"
click node_bot_service "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/bot/index.js"
click node_browser_bot "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/bot/bot.js"
click node_asteroid "https://github.com/jaysenlestari/ctf/tree/master/challanges/web/dark-side-of-asteroid"
click node_asteroid_app "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/dark-side-of-asteroid/src/app.py"
click node_asteroid_db "https://github.com/jaysenlestari/ctf/blob/master/challanges/web/dark-side-of-asteroid/src/init_db.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_baby,node_baby_service,node_baby_solver toneBlue
class node_dear_bf,node_mimpi,node_p_info,node_hulk,node_nyawit,node_update_required toneAmber
class node_cryptweb,node_cryptweb_app,node_cryptweb_db,node_bot_service,node_browser_bot,node_asteroid,node_asteroid_app,node_asteroid_db toneMint
class node_participant toneIndigo
```

## Components

### Cryptography

- [Baby Leaked](https://github.com/jaysenlestari/ctf/tree/master/challanges/crypto/baby-leaked): `challanges/crypto/baby-leaked`
- [RSA Challenge](https://github.com/jaysenlestari/ctf/blob/master/challanges/crypto/baby-leaked/public/chall.py): `challanges/crypto/baby-leaked/public/chall.py`
- [RSA Solver](https://github.com/jaysenlestari/ctf/blob/master/challanges/crypto/baby-leaked/writeup/solver.py): `challanges/crypto/baby-leaked/writeup/solver.py`

### Digital Forensics

- [Dear bf](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/Dear%20bf): `challanges/forensics/Dear bf`
- [mimpi](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/mimpi): `challanges/forensics/mimpi`
- [p-info](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/p-info): `challanges/forensics/p-info`
- [hulk](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/hulk): `challanges/forensics/hulk`
- [nyawit](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/nyawit): `challanges/forensics/nyawit`
- [update-required](https://github.com/jaysenlestari/ctf/tree/master/challanges/forensics/update-required): `challanges/forensics/update-required`

### Web Exploitation

- [Cryptweb](https://github.com/jaysenlestari/ctf/tree/master/challanges/web/Cryptweb): `challanges/web/Cryptweb`
- [Challenge App](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/src/app.py): `challanges/web/Cryptweb/src/app.py`
- [SQLite Data](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/src/app.py): `challanges/web/Cryptweb/src/app.py`
- [Bot Service](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/bot/index.js): `challanges/web/Cryptweb/bot/index.js`
- [Admin Browser](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/Cryptweb/bot/bot.js): `challanges/web/Cryptweb/bot/bot.js`
- [Dark Side Asteroid](https://github.com/jaysenlestari/ctf/tree/master/challanges/web/dark-side-of-asteroid): `challanges/web/dark-side-of-asteroid`
- [Challenge App](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/dark-side-of-asteroid/src/app.py): `challanges/web/dark-side-of-asteroid/src/app.py`
- [Asteroid Database](https://github.com/jaysenlestari/ctf/blob/master/challanges/web/dark-side-of-asteroid/src/init_db.py): `challanges/web/dark-side-of-asteroid/src/init_db.py`

### Other components

- **Participant**

## Connections

- Participant → Baby Leaked: gets public assets (evidence: `README.md`)
- Participant → Dear bf: gets public assets (evidence: `README.md`)
- Participant → mimpi: gets public assets (evidence: `README.md`)
- Participant → p-info: gets public assets (evidence: `README.md`)
- Participant → hulk: gets public assets (evidence: `README.md`)
- Participant → nyawit: gets public assets (evidence: `README.md`)
- Participant → update-required: gets public assets (evidence: `README.md`)
- Participant → Cryptweb: exploits challenge (evidence: `README.md`)
- Participant → Dark Side Asteroid: exploits challenge (evidence: `README.md`)
- Baby Leaked → RSA Challenge: runs challenge (evidence: `challanges/crypto/baby-leaked/public/chall.py`)
- RSA Solver → RSA Challenge: queries service (evidence: `challanges/crypto/baby-leaked/writeup/solver.py`)
- Bot Service → Admin Browser: invokes bot (evidence: `challanges/web/Cryptweb/bot/index.js`)
- Admin Browser → Challenge App: visits configured URL
- Challenge App → Asteroid Database: initializes database (evidence: `challanges/web/dark-side-of-asteroid/src/app.py`)
- Challenge App → Asteroid Database: reads and writes (evidence: `challanges/web/dark-side-of-asteroid/src/app.py`)
- Challenge App → SQLite Data: reads and writes (evidence: `challanges/web/Cryptweb/src/app.py`)
