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.
- checksums.yaml +4 -4
- data/README.md +24 -10
- data/bin/pwn +47 -2
- data/bin/pwn_gqrx_scanner +75 -18
- data/documentation/Diagrams.md +123 -40
- data/documentation/General-PWN-Usage.md +50 -30
- data/documentation/Home.md +78 -51
- data/documentation/How-PWN-Works.md +59 -57
- data/documentation/Installation.md +53 -28
- data/documentation/What-is-PWN.md +51 -32
- data/documentation/Why-PWN.md +41 -11
- data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
- data/documentation/diagrams/build.sh +20 -0
- data/documentation/diagrams/burp-vs-zap-preference.svg +47 -62
- data/documentation/diagrams/code-scanning-sast.svg +139 -79
- data/documentation/diagrams/dot/_THEME.md +27 -0
- data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
- data/documentation/diagrams/dot/ai-integration-tool-calling.dot +47 -20
- data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
- data/documentation/diagrams/dot/burp-vs-zap-preference.dot +23 -12
- data/documentation/diagrams/dot/code-scanning-sast.dot +46 -18
- data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
- data/documentation/diagrams/dot/driver-framework.dot +36 -14
- data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
- data/documentation/diagrams/dot/fuzzing-workflow.dot +44 -24
- data/documentation/diagrams/dot/history-to-drivers.dot +31 -17
- data/documentation/diagrams/dot/memory-skills-detailed.dot +57 -25
- data/documentation/diagrams/dot/network-infra-testing.dot +51 -19
- data/documentation/diagrams/dot/overall-pwn-architecture.dot +110 -44
- data/documentation/diagrams/dot/penetration-testing-workflow.dot +56 -25
- data/documentation/diagrams/dot/plugin-ecosystem.dot +41 -27
- data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +87 -46
- data/documentation/diagrams/dot/pwn-repl-prototyping.dot +49 -30
- data/documentation/diagrams/dot/reporting-pipeline.dot +43 -14
- data/documentation/diagrams/dot/reverse-engineering-flow.dot +40 -18
- data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
- data/documentation/diagrams/dot/sessions-cron-automation.dot +41 -14
- data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
- data/documentation/diagrams/dot/web-application-testing.dot +45 -23
- data/documentation/diagrams/dot/zero-day-research-flow.dot +46 -24
- data/documentation/diagrams/driver-framework.svg +87 -66
- data/documentation/diagrams/fuzzing-workflow.svg +128 -115
- data/documentation/diagrams/history-to-drivers.svg +84 -82
- data/documentation/diagrams/memory-skills-detailed.svg +167 -119
- data/documentation/diagrams/network-infra-testing.svg +146 -84
- data/documentation/diagrams/overall-pwn-architecture.svg +356 -185
- data/documentation/diagrams/penetration-testing-workflow.svg +161 -108
- data/documentation/diagrams/plugin-ecosystem.svg +225 -121
- data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +257 -185
- data/documentation/diagrams/pwn-repl-prototyping.svg +126 -137
- data/documentation/diagrams/reporting-pipeline.svg +128 -68
- data/documentation/diagrams/reverse-engineering-flow.svg +100 -80
- data/documentation/diagrams/sessions-cron-automation.svg +112 -68
- data/documentation/diagrams/web-application-testing.svg +136 -100
- data/documentation/diagrams/zero-day-research-flow.svg +116 -112
- data/git_commit.sh +1 -1
- data/lib/pwn/ai/agent/assembly.rb +1 -1
- data/lib/pwn/ai/agent/btc.rb +1 -1
- data/lib/pwn/ai/agent/burp_suite.rb +1 -1
- data/lib/pwn/ai/agent/extrospection.rb +618 -0
- data/lib/pwn/ai/agent/gqrx.rb +2 -2
- data/lib/pwn/ai/agent/hacker_one.rb +1 -1
- data/lib/pwn/ai/agent/introspection.rb +91 -0
- data/lib/pwn/ai/agent/learning.rb +6 -4
- data/lib/pwn/ai/agent/loop.rb +15 -0
- data/lib/pwn/ai/agent/prompt_builder.rb +10 -1
- data/lib/pwn/ai/agent/sast.rb +1 -1
- data/lib/pwn/ai/agent/swarm.rb +437 -0
- data/lib/pwn/ai/agent/tools/cron.rb +163 -0
- data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
- data/lib/pwn/ai/agent/tools/learning.rb +108 -0
- data/lib/pwn/ai/agent/tools/memory.rb +27 -0
- data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
- data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
- data/lib/pwn/ai/agent/tools/skills.rb +30 -0
- data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
- data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
- data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
- data/lib/pwn/ai/agent.rb +3 -0
- data/lib/pwn/ai/anthropic.rb +19 -4
- data/lib/pwn/ai.rb +0 -1
- data/lib/pwn/config.rb +10 -23
- data/lib/pwn/cron.rb +16 -7
- data/lib/pwn/plugins/repl.rb +90 -281
- data/lib/pwn/sdr/decoder/base.rb +251 -0
- data/lib/pwn/sdr/decoder/gsm.rb +84 -185
- data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
- data/lib/pwn/sdr/decoder.rb +1 -0
- data/lib/pwn/sdr/gqrx.rb +446 -65
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
- data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
- data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
- data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
- data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
- data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
- data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
- data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
- data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
- data/third_party/pwn_rdoc.jsonl +178 -33
- metadata +27 -3
- data/lib/pwn/ai/introspection.rb +0 -76
|
@@ -1,21 +1,43 @@
|
|
|
1
|
-
digraph "
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
digraph "PWN_RE" {
|
|
2
|
+
graph [
|
|
3
|
+
label=<<B>Reverse Engineering & 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
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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 & 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 "
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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 "
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
13
|
+
Target [label="🌐 Web App\nURL / API", fillcolor="#fda4af"];
|
|
7
14
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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 "
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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:
|
|
7
|
-
<svg width="
|
|
8
|
-
viewBox="0.00 0.00
|
|
9
|
-
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(
|
|
10
|
-
<title>
|
|
11
|
-
<polygon fill="
|
|
12
|
-
|
|
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>
|
|
15
|
-
<path fill="
|
|
16
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
17
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
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">    -t https://target -o out/</text>
|
|
18
30
|
</g>
|
|
19
|
-
<!--
|
|
31
|
+
<!-- Opt -->
|
|
20
32
|
<g id="node2" class="node">
|
|
21
|
-
<title>
|
|
22
|
-
<path fill="
|
|
23
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
24
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
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
|
-
<!--
|
|
27
|
-
<g id="edge2" class="edge">
|
|
28
|
-
<title>Parser->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->Parser -->
|
|
38
|
+
<!-- Sh->Opt -->
|
|
33
39
|
<g id="edge1" class="edge">
|
|
34
|
-
<title>
|
|
35
|
-
<path fill="none" stroke="
|
|
36
|
-
<polygon fill="
|
|
40
|
+
<title>Sh->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
|
-
<!--
|
|
44
|
+
<!-- Req -->
|
|
39
45
|
<g id="node3" class="node">
|
|
40
|
-
<title>
|
|
41
|
-
<path fill="
|
|
42
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
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 'pwn'</text>
|
|
44
49
|
</g>
|
|
45
|
-
<!--
|
|
46
|
-
<g id="
|
|
47
|
-
<title>
|
|
48
|
-
<path fill="none" stroke="
|
|
49
|
-
<polygon fill="
|
|
50
|
-
</g>
|
|
51
|
-
<!-- standalone | cron | pwn-ai -->
|
|
52
|
-
<g id="node6" class="node">
|
|
53
|
-
<title>standalone | cron | pwn-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-ai</text>
|
|
56
|
-
</g>
|
|
57
|
-
<!-- Script->standalone | cron | pwn-ai -->
|
|
58
|
-
<g id="edge6" class="edge">
|
|
59
|
-
<title>Script->standalone | cron | pwn-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->Req -->
|
|
51
|
+
<g id="edge2" class="edge">
|
|
52
|
+
<title>Sh->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
|
-
<!--
|
|
56
|
+
<!-- Call -->
|
|
64
57
|
<g id="node4" class="node">
|
|
65
|
-
<title>
|
|
66
|
-
<path fill="
|
|
67
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
68
|
-
|
|
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->Call -->
|
|
63
|
+
<g id="edge3" class="edge">
|
|
64
|
+
<title>Opt->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
|
-
<!--
|
|
68
|
+
<!-- Req->Call -->
|
|
71
69
|
<g id="edge4" class="edge">
|
|
72
|
-
<title>
|
|
73
|
-
<path fill="none" stroke="
|
|
74
|
-
<polygon fill="
|
|
70
|
+
<title>Req->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
|
-
<!--
|
|
74
|
+
<!-- Std -->
|
|
77
75
|
<g id="node5" class="node">
|
|
78
|
-
<title>
|
|
79
|
-
<path fill="
|
|
80
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
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
|
-
<!--
|
|
80
|
+
<!-- Call->Std -->
|
|
84
81
|
<g id="edge5" class="edge">
|
|
85
|
-
<title>
|
|
86
|
-
<path fill="none" stroke="
|
|
87
|
-
<polygon fill="
|
|
82
|
+
<title>Call->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->Rep -->
|
|
93
|
+
<g id="edge6" class="edge">
|
|
94
|
+
<title>Call->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->Ex -->
|
|
105
|
+
<g id="edge7" class="edge">
|
|
106
|
+
<title>Call->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>
|