pwn 0.5.615 → 0.5.617

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +24 -10
  3. data/bin/pwn +47 -2
  4. data/bin/pwn_gqrx_scanner +75 -18
  5. data/documentation/Diagrams.md +123 -40
  6. data/documentation/General-PWN-Usage.md +50 -30
  7. data/documentation/Home.md +78 -51
  8. data/documentation/How-PWN-Works.md +59 -57
  9. data/documentation/Installation.md +53 -28
  10. data/documentation/What-is-PWN.md +51 -32
  11. data/documentation/Why-PWN.md +41 -11
  12. data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
  13. data/documentation/diagrams/build.sh +20 -0
  14. data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
  15. data/documentation/diagrams/code-scanning-sast.svg +139 -79
  16. data/documentation/diagrams/dot/_THEME.md +27 -0
  17. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  18. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
  19. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  20. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
  21. data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
  22. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  23. data/documentation/diagrams/dot/driver-framework.dot +36 -14
  24. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  25. data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
  26. data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
  27. data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
  28. data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
  29. data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
  30. data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
  31. data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
  32. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
  33. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
  34. data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
  35. data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
  36. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  37. data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
  38. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  39. data/documentation/diagrams/dot/web-application-testing.dot +45 -23
  40. data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
  41. data/documentation/diagrams/driver-framework.svg +87 -66
  42. data/documentation/diagrams/fuzzing-workflow.svg +128 -115
  43. data/documentation/diagrams/history-to-drivers.svg +84 -82
  44. data/documentation/diagrams/memory-skills-detailed.svg +167 -119
  45. data/documentation/diagrams/network-infra-testing.svg +146 -84
  46. data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
  47. data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
  48. data/documentation/diagrams/plugin-ecosystem.svg +225 -121
  49. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
  50. data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
  51. data/documentation/diagrams/reporting-pipeline.svg +128 -68
  52. data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
  53. data/documentation/diagrams/sessions-cron-automation.svg +112 -68
  54. data/documentation/diagrams/web-application-testing.svg +136 -100
  55. data/documentation/diagrams/zero-day-research-flow.svg +116 -112
  56. data/git_commit.sh +1 -1
  57. data/lib/pwn/ai/agent/assembly.rb +1 -1
  58. data/lib/pwn/ai/agent/btc.rb +1 -1
  59. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  60. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  61. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  62. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  63. data/lib/pwn/ai/agent/introspection.rb +91 -0
  64. data/lib/pwn/ai/agent/learning.rb +6 -4
  65. data/lib/pwn/ai/agent/loop.rb +15 -0
  66. data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
  67. data/lib/pwn/ai/agent/sast.rb +1 -1
  68. data/lib/pwn/ai/agent/swarm.rb +437 -0
  69. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  70. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  71. data/lib/pwn/ai/agent/tools/learning.rb +108 -0
  72. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  73. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  74. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  75. data/lib/pwn/ai/agent/tools/skills.rb +30 -0
  76. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  77. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  78. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  79. data/lib/pwn/ai/agent.rb +3 -0
  80. data/lib/pwn/ai/anthropic.rb +19 -4
  81. data/lib/pwn/ai.rb +0 -1
  82. data/lib/pwn/config.rb +10 -23
  83. data/lib/pwn/cron.rb +16 -7
  84. data/lib/pwn/plugins/repl.rb +90 -281
  85. data/lib/pwn/sdr/decoder/base.rb +251 -0
  86. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  87. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  88. data/lib/pwn/sdr/decoder.rb +1 -0
  89. data/lib/pwn/sdr/gqrx.rb +446 -65
  90. data/lib/pwn/version.rb +1 -1
  91. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  92. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  93. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  94. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  95. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  96. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  97. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  98. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  99. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  100. data/third_party/pwn_rdoc.jsonl +178 -33
  101. metadata +27 -3
  102. data/lib/pwn/ai/introspection.rb +0 -76
@@ -1,21 +1,43 @@
1
- digraph "PWN Reverse Engineering Flow" {
2
- rankdir=TB;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_RE" {
2
+ graph [
3
+ label=<<B>Reverse Engineering &amp; Binary Exploitation</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">pwn-asm · Assembly · XXD · FFI · Radare2 banners</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Binary [label="Binary / Firmware\n(ELF, PE, APK,\nSerial devices)", shape=box];
6
- RE [label="RE Tools\n(XXD, Assembly,\nStrings, objdump,\nRadare/Ghidra via shell)"];
7
- PWNRE [label="PWN::Plugins::\nAssembly, XXD,\nSerial, BusPirate"];
8
- Analysis [label="Analysis\n(Deobfuscate, patch,\nidentify vulns)", shape=ellipse];
9
- FuzzRE [label="Targeted Fuzzing"];
10
- ExploitRE [label="Craft Exploit\n(ROP, shellcode)"];
11
- Test [label="Validate in REPL"];
13
+ Bin [label="🔎 Binary / Firmware", fillcolor="#7dd3fc"];
12
14
 
13
- Binary -> RE;
14
- RE -> PWNRE;
15
- PWNRE -> Analysis;
16
- Analysis -> FuzzRE;
17
- Analysis -> ExploitRE;
18
- FuzzRE -> ExploitRE;
19
- ExploitRE -> Test;
20
- Test -> Binary [label="re-analyze"];
15
+ subgraph cluster_static {
16
+ label="Static"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ XXD [label="Plugins::XXD\nhex dump / patch", fillcolor="#6ee7b7"];
19
+ BDBA [label="BlackDuckBinaryAnalysis\nSBOM · CVE match", fillcolor="#6ee7b7"];
20
+ }
21
+ subgraph cluster_disasm {
22
+ label="Disassemble"; fontcolor="#fde68a"; style=rounded;
23
+ color="#a16207"; bgcolor="#422006";
24
+ Asm [label="Plugins::Assembly\nopcodes ↔ asm\nmulti-arch", fillcolor="#fcd34d"];
25
+ PwnAsm [label="pwn-asm REPL\nmultiline shellcode", fillcolor="#fcd34d"];
26
+ }
27
+ subgraph cluster_dyn {
28
+ label="Dynamic"; fontcolor="#fecaca"; style=rounded;
29
+ color="#b91c1c"; bgcolor="#450a0a";
30
+ FFI [label="PWN::FFI::Stdio\nnative calls", fillcolor="#fda4af"];
31
+ Fuzz [label="Plugins::Fuzz\ntargeted crashes", fillcolor="#fda4af"];
32
+ }
33
+ Xpl [label="Exploit PoC\nMetasploit module", fillcolor="#c4b5fd"];
34
+
35
+ Bin -> XXD [color="#38bdf8"];
36
+ Bin -> BDBA [color="#38bdf8"];
37
+ XXD -> Asm [color="#f59e0b"];
38
+ BDBA -> PwnAsm [color="#f59e0b"];
39
+ Asm -> FFI [color="#fb7185"];
40
+ PwnAsm -> Fuzz [color="#fb7185"];
41
+ FFI -> Xpl [color="#a78bfa"];
42
+ Fuzz -> Xpl [color="#a78bfa"];
21
43
  }
@@ -0,0 +1,45 @@
1
+ digraph "PWN_SDR" {
2
+ graph [
3
+ label=<<B>PWN::SDR — Software-Defined Radio &amp; RF Hacking</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">GQRX · FlipperZero · RFIDler · SonMicro · FrequencyAllocation</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ RF [label="📡 RF Spectrum", fillcolor="#fda4af"];
14
+
15
+ subgraph cluster_hw {
16
+ label="Hardware"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ SDRhw [label="RTL-SDR / HackRF\n(via GQRX)", fillcolor="#6ee7b7"];
19
+ Flipper [label="SDR::FlipperZero", fillcolor="#6ee7b7"];
20
+ RFID [label="SDR::RFIDler\nSonMicroRFID", fillcolor="#6ee7b7"];
21
+ }
22
+ subgraph cluster_ctrl {
23
+ label="Control"; fontcolor="#fde68a"; style=rounded;
24
+ color="#a16207"; bgcolor="#422006";
25
+ GQRX [label="SDR::GQRX\nremote control · scan\nspectrum snapshot", fillcolor="#fcd34d"];
26
+ Freq [label="SDR::FrequencyAllocation\nband lookup", fillcolor="#fcd34d"];
27
+ Scan [label="bin/pwn_gqrx_scanner\nfast · iterative", fillcolor="#fcd34d"];
28
+ }
29
+ subgraph cluster_dec {
30
+ label="Decode"; fontcolor="#ddd6fe"; style=rounded;
31
+ color="#6d28d9"; bgcolor="#2e1065";
32
+ Dec [label="SDR::Decoder::*\ndemod · protocol", fillcolor="#c4b5fd"];
33
+ Obs [label="extro_observe\nrecord signal intel", fillcolor="#c4b5fd"];
34
+ }
35
+
36
+ RF -> SDRhw [color="#fb7185"];
37
+ RF -> Flipper [color="#fb7185"];
38
+ RF -> RFID [color="#fb7185"];
39
+ SDRhw -> GQRX [color="#f59e0b"];
40
+ Flipper -> Freq [color="#f59e0b"];
41
+ RFID -> Scan [color="#f59e0b"];
42
+ GQRX -> Dec [color="#a78bfa"];
43
+ Freq -> Dec [color="#a78bfa"];
44
+ Scan -> Obs [color="#a78bfa"];
45
+ }
@@ -1,17 +1,44 @@
1
- digraph "PWN Sessions, Cron & Scheduled Automation" {
2
- rankdir=TB;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
1
+ digraph "PWN_SessionsCron" {
2
+ graph [
3
+ label=<<B>Sessions Cron Swarm — Cross-Session Continuity</B>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.5, ranksep=1.3,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
4
12
 
5
- Agent [label="pwn-ai Agent / REPL"];
6
- Sessions [label="PWN::Sessions\n(record/replay,\ntranscripts)", shape=cylinder, fillcolor=lightyellow];
7
- Cron [label="PWN::Cron\n(scheduled tasks)", shape=ellipse, fillcolor=lightcoral];
8
- Drivers [label="Drivers &\nBin Scripts"];
9
- Memory [label="PWN::Memory", shape=cylinder, fillcolor=lightyellow];
13
+ Now [label="pwn-ai\n(interactive turn)", fillcolor="#7dd3fc"];
10
14
 
11
- Agent -> Sessions [label="save / load"];
12
- Cron -> Drivers [label="invoke on schedule"];
13
- Cron -> Agent [label="run autonomous pwn-ai jobs"];
14
- Drivers -> Agent [label="orchestrate"];
15
- Sessions -> Memory [label="persist key facts"];
16
- Memory -> Cron [label="use recalled context\nfor jobs"];
15
+ subgraph cluster_p {
16
+ label="~/.pwn/"; fontcolor="#fde68a"; style=rounded;
17
+ color="#a16207"; bgcolor="#422006";
18
+ Sess [label="sessions/<id>.jsonl", shape=cylinder, fillcolor="#fcd34d"];
19
+ Cron [label="cron/jobs.yml", shape=cylinder, fillcolor="#fcd34d"];
20
+ Swarm [label="swarm/<id>/bus.jsonl",shape=cylinder, fillcolor="#fcd34d"];
21
+ }
22
+ {rank=same; Sess; Cron; Swarm}
23
+
24
+ subgraph cluster_later {
25
+ label="Later / Elsewhere"; fontcolor="#ddd6fe"; style=rounded;
26
+ color="#6d28d9"; bgcolor="#2e1065";
27
+ Reflect [label="learning_reflect\n(session_id)", fillcolor="#c4b5fd"];
28
+ Fire [label="crontab → PWN::Cron.run", fillcolor="#c4b5fd"];
29
+ Resume [label="agent_debate\n(swarm_id: ...)", fillcolor="#c4b5fd"];
30
+ }
31
+ {rank=same; Reflect; Fire; Resume}
32
+
33
+ Next [label="Next pwn-ai session\ncontext restored", fillcolor="#7dd3fc"];
34
+
35
+ Now -> Sess [label="append", color="#f59e0b"];
36
+ Now -> Cron [label="cron_create", color="#f59e0b"];
37
+ Now -> Swarm [label="agent_ask", color="#f59e0b"];
38
+ Sess -> Reflect [color="#a78bfa"];
39
+ Cron -> Fire [color="#a78bfa"];
40
+ Swarm -> Resume [color="#a78bfa"];
41
+ Reflect -> Next [color="#38bdf8"];
42
+ Fire -> Next [color="#38bdf8"];
43
+ Resume -> Next [color="#38bdf8"];
17
44
  }
@@ -0,0 +1,70 @@
1
+ digraph "PWN_Swarm" {
2
+ graph [
3
+ label=<<B>PWN::AI::Agent::Swarm — Native Multi-Agent Orchestration</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">personas · ask · debate · broadcast · shared bus (no daemon)</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=TB, splines=spline, nodesep=0.65, ranksep=1.0,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true, compound=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=11, style="filled,rounded",
9
+ shape=box, penwidth=1.4, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
12
+
13
+ /* L0 ─ orchestrator */
14
+ Orchestrator [label="👤 Orchestrator\n(you, in pwn-ai)", fillcolor="#7dd3fc"];
15
+
16
+ /* L1 ─ swarm verbs */
17
+ subgraph cluster_verbs {
18
+ label="Swarm Verbs (toolset: swarm)"; fontcolor="#ddd6fe";
19
+ style=rounded; color="#6d28d9"; bgcolor="#2e1065"; penwidth=2;
20
+ Spawn [label="agent_spawn\ndefine persona", fillcolor="#c4b5fd"];
21
+ Ask [label="agent_ask\n1 turn → 1 persona", fillcolor="#c4b5fd"];
22
+ Debate [label="agent_debate\nround-robin critique", fillcolor="#c4b5fd"];
23
+ Broadcast [label="agent_broadcast\nfan-out ensemble", fillcolor="#c4b5fd"];
24
+ }
25
+ {rank=same; Spawn; Ask; Debate; Broadcast}
26
+
27
+ /* L2 ─ personas */
28
+ subgraph cluster_personas {
29
+ label="Personas (each = full PWN::AI::Agent::Loop)"; fontcolor="#a7f3d0";
30
+ style=rounded; color="#047857"; bgcolor="#022c22"; penwidth=2;
31
+ Red [label="🔴 red_team\nengine: grok\ntoolsets: terminal,pwn", fillcolor="#6ee7b7"];
32
+ Blue [label="🔵 blue_team\nengine: anthropic\ntoolsets: pwn,extro", fillcolor="#6ee7b7"];
33
+ Recon [label="🛰 recon\nengine: ollama\ntoolsets: terminal,memory", fillcolor="#6ee7b7"];
34
+ Xpl [label="💥 exploit_dev\nengine: openai\ntoolsets: pwn,skills", fillcolor="#6ee7b7"];
35
+ }
36
+ {rank=same; Red; Blue; Recon; Xpl}
37
+
38
+ /* L3 ─ shared state */
39
+ subgraph cluster_state {
40
+ label="Shared State ~/.pwn/"; fontcolor="#fde68a";
41
+ style=rounded; color="#a16207"; bgcolor="#422006"; penwidth=2;
42
+ Agents [label="agents.yml\npersona registry", shape=cylinder, fillcolor="#fcd34d"];
43
+ Bus [label="swarm/<id>/bus.jsonl\nappend-only chat", shape=cylinder, fillcolor="#fcd34d"];
44
+ Pmap [label="swarm/<id>/personas.json\nname → session_id", shape=cylinder, fillcolor="#fcd34d"];
45
+ Sess [label="sessions/*.jsonl\nper-persona transcript", shape=cylinder, fillcolor="#fcd34d"];
46
+ }
47
+ {rank=same; Agents; Bus; Pmap; Sess}
48
+
49
+ /* edges */
50
+ Orchestrator -> Spawn [color="#38bdf8"];
51
+ Orchestrator -> Ask [color="#38bdf8"];
52
+ Orchestrator -> Debate [color="#38bdf8", penwidth=2];
53
+ Orchestrator -> Broadcast [color="#38bdf8"];
54
+
55
+ Spawn -> Red [style=invis];
56
+ Ask -> Red [color="#34d399"];
57
+ Debate -> Blue [color="#34d399"];
58
+ Debate -> Recon [color="#34d399"];
59
+ Broadcast -> Xpl [color="#34d399"];
60
+
61
+ Red -> Agents [style=invis];
62
+ Red -> Bus [label="append reply", color="#f59e0b"];
63
+ Blue -> Bus [color="#f59e0b"];
64
+ Recon -> Pmap [color="#f59e0b"];
65
+ Xpl -> Sess [color="#f59e0b"];
66
+
67
+ Spawn -> Agents [label="write", color="#f59e0b", constraint=false];
68
+ Bus -> Debate [label="tail → context", style=dashed, color="#fbbf24", constraint=false];
69
+ Bus -> Orchestrator [label="swarm_bus()", style=dashed, color="#38bdf8", constraint=false];
70
+ }
@@ -1,27 +1,49 @@
1
- digraph "Web Application Testing with PWN" {
2
- rankdir=TB;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
4
- edge [fontsize=8];
1
+ digraph "PWN_Web" {
2
+ graph [
3
+ label=<<B>Web Application Testing</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">TransparentBrowser → BurpSuite (preferred) → SAST → Reports</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
5
12
 
6
- App [label="Web App\n(URL, API, SPA)", shape=box];
13
+ Target [label="🌐 Web App\nURL / API", fillcolor="#fda4af"];
7
14
 
8
- Proxy [label="Proxy Interception\n(BurpSuite (preferred),\nZaproxy)", shape=ellipse, fillcolor=lightblue];
9
- Spider [label="Spider / Crawl\n(TransparentBrowser,\nSpider plugin)"];
10
- ActiveScan [label="Active Scans\n(Burp active, ZAP active,\npwn_*_active_scan)"];
11
- Manual [label="Manual + Assisted\n(URI Buster, XSS vectors,\nchar encodings, web_cache)"];
12
- API [label="API Testing\n(OpenAPI, JSONPathify,\nGraphQL introspection)"];
13
- AuthWeb [label="Auth & Session\n(OAuth2, BasicAuth,\nJWT handling)"];
14
- Findings [label="Web Vulns\n(XSS, SQLi, IDOR,\nCache deception, etc.)", shape=box];
15
- ReportWeb [label="PWN Reports"];
15
+ subgraph cluster_drive {
16
+ label="Drive Traffic"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ TB [label="TransparentBrowser\nheadless · watir · devtools", fillcolor="#6ee7b7"];
19
+ Spider [label="Plugins::Spider\nURI buster", fillcolor="#6ee7b7"];
20
+ WWW [label="PWN::WWW::*\n21 site drivers", fillcolor="#6ee7b7"];
21
+ }
22
+ subgraph cluster_proxy {
23
+ label="Intercept + Scan"; fontcolor="#fde68a"; style=rounded;
24
+ color="#a16207"; bgcolor="#422006";
25
+ Burp [label="BurpSuite ⭐\nactive · passive · REST", fillcolor="#fcd34d", penwidth=2];
26
+ Zap [label="Zaproxy\n(fallback)", fillcolor="#fcd34d"];
27
+ }
28
+ subgraph cluster_deep {
29
+ label="Deep Analysis"; fontcolor="#ddd6fe"; style=rounded;
30
+ color="#6d28d9"; bgcolor="#2e1065";
31
+ SAST [label="PWN::SAST\n48 rules on source", fillcolor="#c4b5fd"];
32
+ XSS [label="pwn_xss_dom_vectors\nweb_cache_deception", fillcolor="#c4b5fd"];
33
+ API [label="Plugins::OpenAPI\nGraphQL introspection", fillcolor="#c4b5fd"];
34
+ }
35
+ Report [label="PWN::Reports\nDefectDojo import", fillcolor="#7dd3fc"];
16
36
 
17
- App -> Proxy;
18
- Proxy -> Spider;
19
- Spider -> ActiveScan;
20
- ActiveScan -> Manual;
21
- Manual -> API;
22
- API -> AuthWeb;
23
- AuthWeb -> Findings;
24
- Findings -> ReportWeb;
25
-
26
- Proxy -> Findings [label="intercept & modify"];
37
+ Target -> TB [color="#fb7185"];
38
+ Target -> Spider [color="#fb7185"];
39
+ Target -> WWW [color="#fb7185"];
40
+ TB -> Burp [label="proxy 127.0.0.1:8080", color="#f59e0b", penwidth=2];
41
+ Spider -> Burp [color="#f59e0b"];
42
+ WWW -> Zap [color="#f59e0b"];
43
+ Burp -> SAST [color="#a78bfa"];
44
+ Burp -> XSS [color="#a78bfa"];
45
+ Zap -> API [color="#a78bfa"];
46
+ SAST -> Report [color="#38bdf8"];
47
+ XSS -> Report [color="#38bdf8"];
48
+ API -> Report [color="#38bdf8"];
27
49
  }
@@ -1,27 +1,49 @@
1
- digraph "PWN Zero-Day Research Workflow" {
2
- rankdir=TB;
3
- node [shape=box, style=rounded, fontname="Arial", fontsize=9];
4
- edge [fontsize=8];
1
+ digraph "PWN_ZeroDay" {
2
+ graph [
3
+ label=<<B>Zero-Day Research Lifecycle with PWN</B><BR/><FONT POINT-SIZE="11" COLOR="#94a3b8">attack surface → hypothesis → prove → weaponise → disclose</FONT>>,
4
+ labelloc=t, fontsize=20, fontname="Helvetica",
5
+ rankdir=LR, splines=spline, nodesep=0.45, ranksep=1.2,
6
+ bgcolor="#0f172a", fontcolor="#e2e8f0", pad=0.6, newrank=true
7
+ ];
8
+ node [fontname="Helvetica", fontsize=10, style="filled,rounded",
9
+ shape=box, penwidth=1.3, color="#334155", fontcolor="#0f172a"];
10
+ edge [fontname="Helvetica", fontsize=9, color="#94a3b8",
11
+ fontcolor="#cbd5e1", penwidth=1.3, arrowsize=0.8];
5
12
 
6
- Target [label="Target Research\n(Binary, Firmware,\nProtocol, Web App)", shape=box];
7
- RE [label="Reverse Engineering\n+ Static Analysis"];
8
- SAST [label="PWN::SAST + Custom"];
9
- Fuzz [label="Fuzzing + Protocol\nAnalysis"];
10
- Dyn [label="Dynamic Analysis\n(REPL + Debug)"];
11
- Memory [label="PWN Memory\n(historical vulns,\nreferences)", shape=cylinder];
12
- Skill [label="Skills (prior\nzero-day patterns)", shape=cylinder];
13
- Exploit [label="Exploit Dev\n& Validation"];
14
- Disclose [label="Responsible Disclosure\n& Fix (Reports,\nHackerOne, etc.)"];
13
+ Surface [label="Attack Surface\nOpenAPI · Shodan · Git", fillcolor="#7dd3fc"];
15
14
 
16
- Target -> RE;
17
- Target -> SAST;
18
- RE -> Fuzz;
19
- SAST -> Fuzz;
20
- Fuzz -> Dyn;
21
- RE -> Dyn;
22
- Memory -> RE [label="recall past findings"];
23
- Skill -> Exploit [label="apply patterns"];
24
- Dyn -> Exploit;
25
- Exploit -> Disclose;
26
- Disclose -> Memory [label="remember disclosure"];
15
+ subgraph cluster_hyp {
16
+ label="Hypothesise"; fontcolor="#a7f3d0"; style=rounded;
17
+ color="#047857"; bgcolor="#022c22";
18
+ SAST [label="PWN::SAST\ntaint patterns", fillcolor="#6ee7b7"];
19
+ AI [label="pwn-ai\nAgent::VulnGen", fillcolor="#6ee7b7"];
20
+ }
21
+ subgraph cluster_prove {
22
+ label="Prove"; fontcolor="#fde68a"; style=rounded;
23
+ color="#a16207"; bgcolor="#422006";
24
+ Fuzz [label="Fuzz · Sock\nPacket", fillcolor="#fcd34d"];
25
+ TB [label="TransparentBrowser\nBurp replay", fillcolor="#fcd34d"];
26
+ }
27
+ subgraph cluster_weapon {
28
+ label="Weaponise"; fontcolor="#fecaca"; style=rounded;
29
+ color="#b91c1c"; bgcolor="#450a0a";
30
+ Asm [label="Assembly\npwn-asm shellcode", fillcolor="#fda4af"];
31
+ MSF [label="Metasploit\nmodule", fillcolor="#fda4af"];
32
+ }
33
+ subgraph cluster_disc {
34
+ label="Disclose"; fontcolor="#ddd6fe"; style=rounded;
35
+ color="#6d28d9"; bgcolor="#2e1065";
36
+ H1 [label="HackerOne\nBugCrowd · Synack", fillcolor="#c4b5fd"];
37
+ Rep [label="Reports · Skills\ndistill_skill", fillcolor="#c4b5fd"];
38
+ }
39
+
40
+ Surface -> SAST [color="#38bdf8"];
41
+ Surface -> AI [color="#38bdf8"];
42
+ SAST -> Fuzz [color="#f59e0b"];
43
+ AI -> TB [color="#f59e0b"];
44
+ Fuzz -> Asm [color="#fb7185"];
45
+ TB -> MSF [color="#fb7185"];
46
+ Asm -> H1 [color="#a78bfa"];
47
+ MSF -> Rep [color="#a78bfa"];
48
+ Rep -> AI [label="lesson → next hunt", style=dashed, color="#fbbf24", constraint=false];
27
49
  }
@@ -3,88 +3,109 @@
3
3
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
- <!-- Title: PWN Driver Framework Pages: 1 -->
7
- <svg width="682pt" height="98pt"
8
- viewBox="0.00 0.00 682.00 98.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 94)">
10
- <title>PWN Driver Framework</title>
11
- <polygon fill="white" stroke="none" points="-4,4 -4,-94 678,-94 678,4 -4,4"/>
12
- <!-- Parser -->
6
+ <!-- Title: PWN_Driver Pages: 1 -->
7
+ <svg width="728pt" height="440pt"
8
+ viewBox="0.00 0.00 728.00 440.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 397.2)">
10
+ <title>PWN_Driver</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-397.2 684.45,-397.2 684.45,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="184.88" y="-332" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Driver Anatomy — bin/pwn_*</text>
13
+ <text xml:space="preserve" text-anchor="start" x="206.25" y="-320.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">52 shipped drivers · thin CLI over PWN::Plugins</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_d</title>
16
+ <path fill="#022c22" stroke="#047857" d="M276,-8C276,-8 419,-8 419,-8 425,-8 431,-14 431,-20 431,-20 431,-223 431,-223 431,-229 425,-235 419,-235 419,-235 276,-235 276,-235 270,-235 264,-229 264,-223 264,-223 264,-20 264,-20 264,-14 270,-8 276,-8"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="347.5" y="-212" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Driver Body</text>
18
+ </g>
19
+ <g id="clust3" class="cluster">
20
+ <title>cluster_o</title>
21
+ <path fill="#2e1065" stroke="#6d28d9" d="M521,-80C521,-80 621.25,-80 621.25,-80 627.25,-80 633.25,-86 633.25,-92 633.25,-92 633.25,-295 633.25,-295 633.25,-301 627.25,-307 621.25,-307 621.25,-307 521,-307 521,-307 515,-307 509,-301 509,-295 509,-295 509,-92 509,-92 509,-86 515,-80 521,-80"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="571.12" y="-284" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
23
+ </g>
24
+ <!-- Sh -->
13
25
  <g id="node1" class="node">
14
- <title>Parser</title>
15
- <path fill="none" stroke="black" d="M114.25,-63C114.25,-63 12,-63 12,-63 6,-63 0,-57 0,-51 0,-51 0,-39 0,-39 0,-33 6,-27 12,-27 12,-27 114.25,-27 114.25,-27 120.25,-27 126.25,-33 126.25,-39 126.25,-39 126.25,-51 126.25,-51 126.25,-57 120.25,-63 114.25,-63"/>
16
- <text xml:space="preserve" text-anchor="middle" x="63.12" y="-46.95" font-family="Arial" font-size="9.00">PWN::Driver::Parser</text>
17
- <text xml:space="preserve" text-anchor="middle" x="63.12" y="-36.45" font-family="Arial" font-size="9.00">(OptionParser + auto_opts)</text>
26
+ <title>Sh</title>
27
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M166,-88C166,-88 12,-88 12,-88 6,-88 0,-82 0,-76 0,-76 0,-64 0,-64 0,-58 6,-52 12,-52 12,-52 166,-52 166,-52 172,-52 178,-58 178,-64 178,-64 178,-76 178,-76 178,-82 172,-88 166,-88"/>
28
+ <text xml:space="preserve" text-anchor="middle" x="89" y="-72.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">$ pwn_burp_suite_pro_active_scan \ </text>
29
+ <text xml:space="preserve" text-anchor="middle" x="89" y="-60.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a"> &#160;&#160;&#160;&#45;t https://target &#45;o out/</text>
18
30
  </g>
19
- <!-- Script -->
31
+ <!-- Opt -->
20
32
  <g id="node2" class="node">
21
- <title>Script</title>
22
- <path fill="none" stroke="black" d="M255.5,-63C255.5,-63 174.25,-63 174.25,-63 168.25,-63 162.25,-57 162.25,-51 162.25,-51 162.25,-39 162.25,-39 162.25,-33 168.25,-27 174.25,-27 174.25,-27 255.5,-27 255.5,-27 261.5,-27 267.5,-33 267.5,-39 267.5,-39 267.5,-51 267.5,-51 267.5,-57 261.5,-63 255.5,-63"/>
23
- <text xml:space="preserve" text-anchor="middle" x="214.88" y="-46.95" font-family="Arial" font-size="9.00">Driver Script</text>
24
- <text xml:space="preserve" text-anchor="middle" x="214.88" y="-36.45" font-family="Arial" font-size="9.00">(bin/pwn_* or custom)</text>
33
+ <title>Opt</title>
34
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M378,-52C378,-52 317,-52 317,-52 311,-52 305,-46 305,-40 305,-40 305,-28 305,-28 305,-22 311,-16 317,-16 317,-16 378,-16 378,-16 384,-16 390,-22 390,-28 390,-28 390,-40 390,-40 390,-46 384,-52 378,-52"/>
35
+ <text xml:space="preserve" text-anchor="middle" x="347.5" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OptionParser</text>
36
+ <text xml:space="preserve" text-anchor="middle" x="347.5" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">ARGV opts{}</text>
25
37
  </g>
26
- <!-- Parser&#45;&gt;Script -->
27
- <g id="edge2" class="edge">
28
- <title>Parser&#45;&gt;Script</title>
29
- <path fill="none" stroke="black" d="M126.33,-38.34C134.42,-38.23 142.7,-38.22 150.8,-38.33"/>
30
- <polygon fill="black" stroke="black" points="150.5,-41.82 160.57,-38.51 150.64,-34.82 150.5,-41.82"/>
31
- </g>
32
- <!-- Script&#45;&gt;Parser -->
38
+ <!-- Sh&#45;&gt;Opt -->
33
39
  <g id="edge1" class="edge">
34
- <title>Script&#45;&gt;Parser</title>
35
- <path fill="none" stroke="black" d="M162.08,-51.46C154.16,-51.66 145.85,-51.76 137.57,-51.75"/>
36
- <polygon fill="black" stroke="black" points="137.87,-48.25 127.85,-51.67 137.82,-55.25 137.87,-48.25"/>
40
+ <title>Sh&#45;&gt;Opt</title>
41
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M178.63,-57.56C217.51,-52.1 261.78,-45.89 295.09,-41.22"/>
42
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="295.14,-44.04 302.67,-40.15 294.36,-38.49 295.14,-44.04"/>
37
43
  </g>
38
- <!-- PWNLoad -->
44
+ <!-- Req -->
39
45
  <g id="node3" class="node">
40
- <title>PWNLoad</title>
41
- <path fill="none" stroke="black" d="M392.62,-90C392.62,-90 335.38,-90 335.38,-90 329.38,-90 323.38,-84 323.38,-78 323.38,-78 323.38,-66 323.38,-66 323.38,-60 329.38,-54 335.38,-54 335.38,-54 392.62,-54 392.62,-54 398.62,-54 404.62,-60 404.62,-66 404.62,-66 404.62,-78 404.62,-78 404.62,-84 398.62,-90 392.62,-90"/>
42
- <text xml:space="preserve" text-anchor="middle" x="364" y="-73.95" font-family="Arial" font-size="9.00">require &#39;pwn&#39;</text>
43
- <text xml:space="preserve" text-anchor="middle" x="364" y="-63.45" font-family="Arial" font-size="9.00">Full namespace</text>
46
+ <title>Req</title>
47
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M370.88,-124C370.88,-124 324.12,-124 324.12,-124 318.12,-124 312.12,-118 312.12,-112 312.12,-112 312.12,-100 312.12,-100 312.12,-94 318.12,-88 324.12,-88 324.12,-88 370.88,-88 370.88,-88 376.88,-88 382.88,-94 382.88,-100 382.88,-100 382.88,-112 382.88,-112 382.88,-118 376.88,-124 370.88,-124"/>
48
+ <text xml:space="preserve" text-anchor="middle" x="347.5" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">require &#39;pwn&#39;</text>
44
49
  </g>
45
- <!-- Script&#45;&gt;PWNLoad -->
46
- <g id="edge3" class="edge">
47
- <title>Script&#45;&gt;PWNLoad</title>
48
- <path fill="none" stroke="black" d="M267.75,-54.52C282.11,-57.15 297.68,-60.01 311.99,-62.64"/>
49
- <polygon fill="black" stroke="black" points="311.2,-66.05 321.66,-64.41 312.46,-59.17 311.2,-66.05"/>
50
- </g>
51
- <!-- standalone | cron | pwn&#45;ai -->
52
- <g id="node6" class="node">
53
- <title>standalone | cron | pwn&#45;ai</title>
54
- <path fill="none" stroke="black" d="M412.5,-36C412.5,-36 315.5,-36 315.5,-36 309.5,-36 303.5,-30 303.5,-24 303.5,-24 303.5,-12 303.5,-12 303.5,-6 309.5,0 315.5,0 315.5,0 412.5,0 412.5,0 418.5,0 424.5,-6 424.5,-12 424.5,-12 424.5,-24 424.5,-24 424.5,-30 418.5,-36 412.5,-36"/>
55
- <text xml:space="preserve" text-anchor="middle" x="364" y="-14.7" font-family="Arial" font-size="9.00">standalone | cron | pwn&#45;ai</text>
56
- </g>
57
- <!-- Script&#45;&gt;standalone | cron | pwn&#45;ai -->
58
- <g id="edge6" class="edge">
59
- <title>Script&#45;&gt;standalone | cron | pwn&#45;ai</title>
60
- <path fill="none" stroke="black" d="M267.75,-35.48C275.59,-34.04 283.81,-32.53 291.97,-31.03"/>
61
- <polygon fill="black" stroke="black" points="292.36,-34.52 301.56,-29.27 291.09,-27.64 292.36,-34.52"/>
50
+ <!-- Sh&#45;&gt;Req -->
51
+ <g id="edge2" class="edge">
52
+ <title>Sh&#45;&gt;Req</title>
53
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M178.63,-82.44C220.28,-88.28 268.11,-95 302.03,-99.76"/>
54
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="301.39,-102.5 309.7,-100.84 302.17,-96.95 301.39,-102.5"/>
62
55
  </g>
63
- <!-- Orchestrate -->
56
+ <!-- Call -->
64
57
  <g id="node4" class="node">
65
- <title>Orchestrate</title>
66
- <path fill="none" stroke="black" d="M550.75,-90C550.75,-90 472.5,-90 472.5,-90 466.5,-90 460.5,-84 460.5,-78 460.5,-78 460.5,-66 460.5,-66 460.5,-60 466.5,-54 472.5,-54 472.5,-54 550.75,-54 550.75,-54 556.75,-54 562.75,-60 562.75,-66 562.75,-66 562.75,-78 562.75,-78 562.75,-84 556.75,-90 550.75,-90"/>
67
- <text xml:space="preserve" text-anchor="middle" x="511.62" y="-73.95" font-family="Arial" font-size="9.00">Orchestration Logic</text>
68
- <text xml:space="preserve" text-anchor="middle" x="511.62" y="-63.45" font-family="Arial" font-size="9.00">(plugins + AI + loops)</text>
58
+ <title>Call</title>
59
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M411,-196C411,-196 284,-196 284,-196 278,-196 272,-190 272,-184 272,-184 272,-172 272,-172 272,-166 278,-160 284,-160 284,-160 411,-160 411,-160 417,-160 423,-166 423,-172 423,-172 423,-184 423,-184 423,-190 417,-196 411,-196"/>
60
+ <text xml:space="preserve" text-anchor="middle" x="347.5" y="-174.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Plugins::X.method(opts)</text>
61
+ </g>
62
+ <!-- Opt&#45;&gt;Call -->
63
+ <g id="edge3" class="edge">
64
+ <title>Opt&#45;&gt;Call</title>
65
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M304.47,-40.03C275.53,-46.57 239.42,-60.1 221,-88 212.18,-101.35 212.18,-110.65 221,-124 231.03,-139.19 246.3,-150.12 262.8,-157.98"/>
66
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="261.27,-160.36 269.72,-161.02 263.53,-155.24 261.27,-160.36"/>
69
67
  </g>
70
- <!-- PWNLoad&#45;&gt;Orchestrate -->
68
+ <!-- Req&#45;&gt;Call -->
71
69
  <g id="edge4" class="edge">
72
- <title>PWNLoad&#45;&gt;Orchestrate</title>
73
- <path fill="none" stroke="black" d="M404.79,-72C418.42,-72 433.99,-72 448.93,-72"/>
74
- <polygon fill="black" stroke="black" points="448.68,-75.5 458.68,-72 448.68,-68.5 448.68,-75.5"/>
70
+ <title>Req&#45;&gt;Call</title>
71
+ <path fill="none" stroke="#34d399" stroke-width="1.3" d="M347.5,-124.56C347.5,-132.96 347.5,-141.37 347.5,-149.77"/>
72
+ <polygon fill="#34d399" stroke="#34d399" stroke-width="1.3" points="344.7,-149.66 347.5,-157.66 350.3,-149.66 344.7,-149.66"/>
75
73
  </g>
76
- <!-- Outputs -->
74
+ <!-- Std -->
77
75
  <g id="node5" class="node">
78
- <title>Outputs</title>
79
- <path fill="none" stroke="black" d="M662,-90C662,-90 610.75,-90 610.75,-90 604.75,-90 598.75,-84 598.75,-78 598.75,-78 598.75,-66 598.75,-66 598.75,-60 604.75,-54 610.75,-54 610.75,-54 662,-54 662,-54 668,-54 674,-60 674,-66 674,-66 674,-78 674,-78 674,-84 668,-90 662,-90"/>
80
- <text xml:space="preserve" text-anchor="middle" x="636.38" y="-73.95" font-family="Arial" font-size="9.00">Reports, Logs,</text>
81
- <text xml:space="preserve" text-anchor="middle" x="636.38" y="-63.45" font-family="Arial" font-size="9.00">Findings</text>
76
+ <title>Std</title>
77
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M613.25,-124C613.25,-124 529,-124 529,-124 523,-124 517,-118 517,-112 517,-112 517,-100 517,-100 517,-94 523,-88 529,-88 529,-88 613.25,-88 613.25,-88 619.25,-88 625.25,-94 625.25,-100 625.25,-100 625.25,-112 625.25,-112 625.25,-118 619.25,-124 613.25,-124"/>
78
+ <text xml:space="preserve" text-anchor="middle" x="571.12" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">STDOUT / STDERR</text>
82
79
  </g>
83
- <!-- Orchestrate&#45;&gt;Outputs -->
80
+ <!-- Call&#45;&gt;Std -->
84
81
  <g id="edge5" class="edge">
85
- <title>Orchestrate&#45;&gt;Outputs</title>
86
- <path fill="none" stroke="black" d="M562.91,-72C570.91,-72 579.18,-72 587.14,-72"/>
87
- <polygon fill="black" stroke="black" points="587,-75.5 597,-72 587,-68.5 587,-75.5"/>
82
+ <title>Call&#45;&gt;Std</title>
83
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M405.86,-159.36C436.91,-149.28 475.33,-136.8 507.2,-126.44"/>
84
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="507.82,-129.19 514.56,-124.05 506.09,-123.86 507.82,-129.19"/>
85
+ </g>
86
+ <!-- Rep -->
87
+ <g id="node6" class="node">
88
+ <title>Rep</title>
89
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M599.38,-196C599.38,-196 542.88,-196 542.88,-196 536.88,-196 530.88,-190 530.88,-184 530.88,-184 530.88,-172 530.88,-172 530.88,-166 536.88,-160 542.88,-160 542.88,-160 599.38,-160 599.38,-160 605.38,-160 611.38,-166 611.38,-172 611.38,-172 611.38,-184 611.38,-184 611.38,-190 605.38,-196 599.38,-196"/>
90
+ <text xml:space="preserve" text-anchor="middle" x="571.12" y="-174.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Reports</text>
91
+ </g>
92
+ <!-- Call&#45;&gt;Rep -->
93
+ <g id="edge6" class="edge">
94
+ <title>Call&#45;&gt;Rep</title>
95
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M423.53,-178C455.55,-178 492.02,-178 520.58,-178"/>
96
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="520.37,-180.8 528.37,-178 520.37,-175.2 520.37,-180.8"/>
97
+ </g>
98
+ <!-- Ex -->
99
+ <g id="node7" class="node">
100
+ <title>Ex</title>
101
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M587,-268C587,-268 555.25,-268 555.25,-268 549.25,-268 543.25,-262 543.25,-256 543.25,-256 543.25,-244 543.25,-244 543.25,-238 549.25,-232 555.25,-232 555.25,-232 587,-232 587,-232 593,-232 599,-238 599,-244 599,-244 599,-256 599,-256 599,-262 593,-268 587,-268"/>
102
+ <text xml:space="preserve" text-anchor="middle" x="571.12" y="-246.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">exit code</text>
103
+ </g>
104
+ <!-- Call&#45;&gt;Ex -->
105
+ <g id="edge7" class="edge">
106
+ <title>Call&#45;&gt;Ex</title>
107
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M405.86,-196.64C446.07,-209.7 498.63,-226.77 533.34,-238.05"/>
108
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="532.28,-240.65 540.76,-240.46 534.01,-235.32 532.28,-240.65"/>
88
109
  </g>
89
110
  </g>
90
111
  </svg>