pwn 0.5.613 → 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 (134) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -10
  3. data/README.md +117 -17
  4. data/bin/pwn +47 -2
  5. data/bin/pwn_gqrx_scanner +75 -18
  6. data/documentation/AI-Integration.md +36 -0
  7. data/documentation/BurpSuite.md +26 -0
  8. data/documentation/Contributing.md +31 -0
  9. data/documentation/Diagrams.md +140 -0
  10. data/documentation/Drivers.md +25 -0
  11. data/documentation/General-PWN-Usage.md +60 -0
  12. data/documentation/Home.md +78 -0
  13. data/documentation/How-PWN-Works.md +62 -0
  14. data/documentation/Installation.md +75 -0
  15. data/documentation/NmapIt.md +18 -0
  16. data/documentation/Plugins.md +59 -0
  17. data/documentation/Reporting.md +28 -0
  18. data/documentation/SAST.md +32 -0
  19. data/documentation/Skills-Memory-Learning.md +44 -0
  20. data/documentation/Transparent-Browser.md +32 -0
  21. data/documentation/Troubleshooting.md +38 -0
  22. data/documentation/What-is-PWN.md +53 -0
  23. data/documentation/Why-PWN.md +48 -0
  24. data/documentation/diagrams/ai-integration-tool-calling.svg +172 -0
  25. data/documentation/diagrams/build.sh +20 -0
  26. data/documentation/diagrams/burp-vs-zap-preference.svg +69 -0
  27. data/documentation/diagrams/code-scanning-sast.svg +172 -0
  28. data/documentation/diagrams/dot/_THEME.md +27 -0
  29. data/documentation/diagrams/dot/agent-tool-registry.dot +59 -0
  30. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +50 -0
  31. data/documentation/diagrams/dot/aws-cloud-security.dot +48 -0
  32. data/documentation/diagrams/dot/burp-vs-zap-preference.dot +26 -0
  33. data/documentation/diagrams/dot/code-scanning-sast.dot +49 -0
  34. data/documentation/diagrams/dot/cron-scheduling.dot +40 -0
  35. data/documentation/diagrams/dot/driver-framework.dot +39 -0
  36. data/documentation/diagrams/dot/extrospection-world-awareness.dot +55 -0
  37. data/documentation/diagrams/dot/fuzzing-workflow.dot +47 -0
  38. data/documentation/diagrams/dot/history-to-drivers.dot +34 -0
  39. data/documentation/diagrams/dot/memory-skills-detailed.dot +60 -0
  40. data/documentation/diagrams/dot/network-infra-testing.dot +54 -0
  41. data/documentation/diagrams/dot/overall-pwn-architecture.dot +115 -0
  42. data/documentation/diagrams/dot/penetration-testing-workflow.dot +60 -0
  43. data/documentation/diagrams/dot/plugin-ecosystem.dot +45 -0
  44. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +98 -0
  45. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +56 -0
  46. data/documentation/diagrams/dot/reporting-pipeline.dot +46 -0
  47. data/documentation/diagrams/dot/reverse-engineering-flow.dot +43 -0
  48. data/documentation/diagrams/dot/sdr-radio-flow.dot +45 -0
  49. data/documentation/diagrams/dot/sessions-cron-automation.dot +44 -0
  50. data/documentation/diagrams/dot/swarm-multi-agent.dot +70 -0
  51. data/documentation/diagrams/dot/web-application-testing.dot +49 -0
  52. data/documentation/diagrams/dot/zero-day-research-flow.dot +49 -0
  53. data/documentation/diagrams/driver-framework.svg +111 -0
  54. data/documentation/diagrams/fuzzing-workflow.svg +160 -0
  55. data/documentation/diagrams/history-to-drivers.svg +119 -0
  56. data/documentation/diagrams/memory-skills-detailed.svg +202 -0
  57. data/documentation/diagrams/network-infra-testing.svg +183 -0
  58. data/documentation/diagrams/overall-pwn-architecture.svg +405 -0
  59. data/documentation/diagrams/penetration-testing-workflow.svg +201 -0
  60. data/documentation/diagrams/plugin-ecosystem.svg +276 -0
  61. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +306 -0
  62. data/documentation/diagrams/pwn-repl-prototyping.svg +168 -0
  63. data/documentation/diagrams/reporting-pipeline.svg +151 -0
  64. data/documentation/diagrams/reverse-engineering-flow.svg +134 -0
  65. data/documentation/diagrams/sessions-cron-automation.svg +136 -0
  66. data/documentation/diagrams/web-application-testing.svg +173 -0
  67. data/documentation/diagrams/zero-day-research-flow.svg +153 -0
  68. data/documentation/pwn-REPL.md +33 -0
  69. data/documentation/pwn-ai-Agent.md +43 -0
  70. data/git_commit.sh +1 -1
  71. data/lib/pwn/ai/agent/assembly.rb +1 -1
  72. data/lib/pwn/ai/agent/btc.rb +1 -1
  73. data/lib/pwn/ai/agent/burp_suite.rb +1 -1
  74. data/lib/pwn/ai/agent/extrospection.rb +618 -0
  75. data/lib/pwn/ai/agent/gqrx.rb +2 -2
  76. data/lib/pwn/ai/agent/hacker_one.rb +1 -1
  77. data/lib/pwn/ai/agent/introspection.rb +91 -0
  78. data/lib/pwn/ai/agent/learning.rb +379 -0
  79. data/lib/pwn/ai/agent/loop.rb +33 -3
  80. data/lib/pwn/ai/agent/metrics.rb +155 -0
  81. data/lib/pwn/ai/agent/prompt_builder.rb +32 -3
  82. data/lib/pwn/ai/agent/sast.rb +1 -1
  83. data/lib/pwn/ai/agent/swarm.rb +437 -0
  84. data/lib/pwn/ai/agent/tools/cron.rb +163 -0
  85. data/lib/pwn/ai/agent/tools/extrospection.rb +280 -0
  86. data/lib/pwn/ai/agent/tools/learning.rb +221 -0
  87. data/lib/pwn/ai/agent/tools/memory.rb +27 -0
  88. data/lib/pwn/ai/agent/tools/metrics.rb +61 -0
  89. data/lib/pwn/ai/agent/tools/sessions.rb +139 -0
  90. data/lib/pwn/ai/agent/tools/skills.rb +124 -8
  91. data/lib/pwn/ai/agent/tools/swarm.rb +229 -0
  92. data/lib/pwn/ai/agent/transparent_browser.rb +1 -1
  93. data/lib/pwn/ai/agent/vuln_gen.rb +2 -2
  94. data/lib/pwn/ai/agent.rb +5 -0
  95. data/lib/pwn/ai/anthropic.rb +19 -4
  96. data/lib/pwn/ai/grok.rb +249 -106
  97. data/lib/pwn/ai.rb +0 -1
  98. data/lib/pwn/config.rb +96 -36
  99. data/lib/pwn/cron.rb +16 -7
  100. data/lib/pwn/plugins/monkey_patch.rb +2 -2
  101. data/lib/pwn/plugins/repl.rb +158 -284
  102. data/lib/pwn/sdr/decoder/base.rb +251 -0
  103. data/lib/pwn/sdr/decoder/gsm.rb +84 -185
  104. data/lib/pwn/sdr/decoder/pocsag.rb +62 -217
  105. data/lib/pwn/sdr/decoder.rb +1 -0
  106. data/lib/pwn/sdr/gqrx.rb +446 -65
  107. data/lib/pwn/version.rb +1 -1
  108. data/spec/lib/pwn/ai/agent/extrospection_spec.rb +15 -0
  109. data/spec/lib/pwn/ai/agent/introspection_spec.rb +15 -0
  110. data/spec/lib/pwn/ai/agent/learning_spec.rb +68 -0
  111. data/spec/lib/pwn/ai/agent/metrics_spec.rb +27 -0
  112. data/spec/lib/pwn/ai/agent/swarm_spec.rb +34 -0
  113. data/spec/lib/pwn/ai/agent/tools/cron_spec.rb +40 -0
  114. data/spec/lib/pwn/ai/agent/tools/extrospection_spec.rb +40 -0
  115. data/spec/lib/pwn/ai/agent/tools/learning_spec.rb +30 -0
  116. data/spec/lib/pwn/ai/agent/tools/metrics_spec.rb +20 -0
  117. data/spec/lib/pwn/ai/agent/tools/sessions_spec.rb +35 -0
  118. data/spec/lib/pwn/ai/agent/tools/swarm_spec.rb +17 -0
  119. data/spec/lib/pwn/{ai/introspection_spec.rb → sdr/decoder/base_spec.rb} +3 -3
  120. data/third_party/pwn_rdoc.jsonl +178 -33
  121. metadata +110 -36
  122. data/documentation/PWN.png +0 -0
  123. data/documentation/PWN_Contributors_and_Users.png +0 -0
  124. data/documentation/fax-spectrogram.png +0 -0
  125. data/documentation/fax-waveform.png +0 -0
  126. data/documentation/frozen_string_literal_files_changed_from_false_to_true.txt +0 -54
  127. data/documentation/lifecycle_authz_replay.example.yaml +0 -27
  128. data/documentation/pwn_android_war_dialer_session.png +0 -0
  129. data/documentation/pwn_install.png +0 -0
  130. data/documentation/pwn_wallpaper.jpg +0 -0
  131. data/documentation/ringing-spectrogram.png +0 -0
  132. data/documentation/ringing-waveform.png +0 -0
  133. data/documentation/vulnerability_report_template.md +0 -37
  134. data/lib/pwn/ai/introspection.rb +0 -76
@@ -0,0 +1,49 @@
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];
12
+
13
+ Target [label="🌐 Web App\nURL / API", fillcolor="#fda4af"];
14
+
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"];
36
+
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"];
49
+ }
@@ -0,0 +1,49 @@
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];
12
+
13
+ Surface [label="Attack Surface\nOpenAPI · Shodan · Git", fillcolor="#7dd3fc"];
14
+
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];
49
+ }
@@ -0,0 +1,111 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
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 -->
25
+ <g id="node1" class="node">
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>
30
+ </g>
31
+ <!-- Opt -->
32
+ <g id="node2" class="node">
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>
37
+ </g>
38
+ <!-- Sh&#45;&gt;Opt -->
39
+ <g id="edge1" class="edge">
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"/>
43
+ </g>
44
+ <!-- Req -->
45
+ <g id="node3" class="node">
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>
49
+ </g>
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"/>
55
+ </g>
56
+ <!-- Call -->
57
+ <g id="node4" class="node">
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"/>
67
+ </g>
68
+ <!-- Req&#45;&gt;Call -->
69
+ <g id="edge4" class="edge">
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"/>
73
+ </g>
74
+ <!-- Std -->
75
+ <g id="node5" class="node">
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>
79
+ </g>
80
+ <!-- Call&#45;&gt;Std -->
81
+ <g id="edge5" class="edge">
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"/>
109
+ </g>
110
+ </g>
111
+ </svg>
@@ -0,0 +1,160 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN_Fuzz Pages: 1 -->
7
+ <svg width="901pt" height="389pt"
8
+ viewBox="0.00 0.00 901.00 389.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 346.07)">
10
+ <title>PWN_Fuzz</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-346.07 858.2,-346.07 858.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="322.75" y="-280.87" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Fuzzing with PWN</text>
13
+ <text xml:space="preserve" text-anchor="start" x="299.5" y="-269.42" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">Plugins::Fuzz · Sock · Packet · Reports::Fuzz</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_gen</title>
16
+ <path fill="#022c22" stroke="#047857" d="M182.75,-36.87C182.75,-36.87 267.25,-36.87 267.25,-36.87 273.25,-36.87 279.25,-42.87 279.25,-48.87 279.25,-48.87 279.25,-175.87 279.25,-175.87 279.25,-181.87 273.25,-187.87 267.25,-187.87 267.25,-187.87 182.75,-187.87 182.75,-187.87 176.75,-187.87 170.75,-181.87 170.75,-175.87 170.75,-175.87 170.75,-48.87 170.75,-48.87 170.75,-42.87 176.75,-36.87 182.75,-36.87"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="225" y="-164.87" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">Generate</text>
18
+ </g>
19
+ <g id="clust2" class="cluster">
20
+ <title>cluster_deliver</title>
21
+ <path fill="#422006" stroke="#a16207" d="M362.25,-36.87C362.25,-36.87 479,-36.87 479,-36.87 485,-36.87 491,-42.87 491,-48.87 491,-48.87 491,-243.87 491,-243.87 491,-249.87 485,-255.87 479,-255.87 479,-255.87 362.25,-255.87 362.25,-255.87 356.25,-255.87 350.25,-249.87 350.25,-243.87 350.25,-243.87 350.25,-48.87 350.25,-48.87 350.25,-42.87 356.25,-36.87 362.25,-36.87"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-232.87" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Deliver</text>
23
+ </g>
24
+ <g id="clust3" class="cluster">
25
+ <title>cluster_mon</title>
26
+ <path fill="#450a0a" stroke="#b91c1c" d="M574,-104.87C574,-104.87 645.75,-104.87 645.75,-104.87 651.75,-104.87 657.75,-110.87 657.75,-116.87 657.75,-116.87 657.75,-243.87 657.75,-243.87 657.75,-249.87 651.75,-255.87 645.75,-255.87 645.75,-255.87 574,-255.87 574,-255.87 568,-255.87 562,-249.87 562,-243.87 562,-243.87 562,-116.87 562,-116.87 562,-110.87 568,-104.87 574,-104.87"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="609.88" y="-232.87" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Monitor</text>
28
+ </g>
29
+ <!-- Seed -->
30
+ <g id="node1" class="node">
31
+ <title>Seed</title>
32
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M79.75,-113.87C79.75,-113.87 12,-113.87 12,-113.87 6,-113.87 0,-107.87 0,-101.87 0,-101.87 0,-89.87 0,-89.87 0,-83.87 6,-77.87 12,-77.87 12,-77.87 79.75,-77.87 79.75,-77.87 85.75,-77.87 91.75,-83.87 91.75,-89.87 91.75,-89.87 91.75,-101.87 91.75,-101.87 91.75,-107.87 85.75,-113.87 79.75,-113.87"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="45.88" y="-98.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Seed corpus /</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="45.88" y="-86.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">protocol grammar</text>
35
+ </g>
36
+ <!-- Fuzz -->
37
+ <g id="node2" class="node">
38
+ <title>Fuzz</title>
39
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M259.25,-148.87C259.25,-148.87 190.75,-148.87 190.75,-148.87 184.75,-148.87 178.75,-142.87 178.75,-136.87 178.75,-136.87 178.75,-124.87 178.75,-124.87 178.75,-118.87 184.75,-112.87 190.75,-112.87 190.75,-112.87 259.25,-112.87 259.25,-112.87 265.25,-112.87 271.25,-118.87 271.25,-124.87 271.25,-124.87 271.25,-136.87 271.25,-136.87 271.25,-142.87 265.25,-148.87 259.25,-148.87"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="225" y="-133.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Fuzz</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="225" y="-121.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">mutate · generate</text>
42
+ </g>
43
+ <!-- Seed&#45;&gt;Fuzz -->
44
+ <g id="edge1" class="edge">
45
+ <title>Seed&#45;&gt;Fuzz</title>
46
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M92.03,-104.8C115.37,-109.41 144.07,-115.08 168.73,-119.95"/>
47
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="167.99,-122.66 176.38,-121.46 169.08,-117.17 167.99,-122.66"/>
48
+ </g>
49
+ <!-- Char -->
50
+ <g id="node3" class="node">
51
+ <title>Char</title>
52
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M250.62,-80.87C250.62,-80.87 199.38,-80.87 199.38,-80.87 193.38,-80.87 187.38,-74.87 187.38,-68.87 187.38,-68.87 187.38,-56.87 187.38,-56.87 187.38,-50.87 193.38,-44.87 199.38,-44.87 199.38,-44.87 250.62,-44.87 250.62,-44.87 256.62,-44.87 262.62,-50.87 262.62,-56.87 262.62,-56.87 262.62,-68.87 262.62,-68.87 262.62,-74.87 256.62,-80.87 250.62,-80.87"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="225" y="-65.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Char</text>
54
+ <text xml:space="preserve" text-anchor="middle" x="225" y="-53.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">encodings</text>
55
+ </g>
56
+ <!-- Seed&#45;&gt;Char -->
57
+ <g id="edge2" class="edge">
58
+ <title>Seed&#45;&gt;Char</title>
59
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M92.03,-87.46C118.11,-82.6 150.87,-76.5 177.22,-71.59"/>
60
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="177.7,-74.35 185.05,-70.13 176.67,-68.84 177.7,-74.35"/>
61
+ </g>
62
+ <!-- Sock -->
63
+ <g id="node4" class="node">
64
+ <title>Sock</title>
65
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M447,-216.87C447,-216.87 394.25,-216.87 394.25,-216.87 388.25,-216.87 382.25,-210.87 382.25,-204.87 382.25,-204.87 382.25,-192.87 382.25,-192.87 382.25,-186.87 388.25,-180.87 394.25,-180.87 394.25,-180.87 447,-180.87 447,-180.87 453,-180.87 459,-186.87 459,-192.87 459,-192.87 459,-204.87 459,-204.87 459,-210.87 453,-216.87 447,-216.87"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-201.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Sock</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-189.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TCP/UDP</text>
68
+ </g>
69
+ <!-- Fuzz&#45;&gt;Sock -->
70
+ <g id="edge3" class="edge">
71
+ <title>Fuzz&#45;&gt;Sock</title>
72
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M271.89,-146.99C302.29,-157.67 342.06,-171.63 372.68,-182.39"/>
73
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="371.54,-184.95 380.01,-184.96 373.39,-179.67 371.54,-184.95"/>
74
+ </g>
75
+ <!-- Packet -->
76
+ <g id="node5" class="node">
77
+ <title>Packet</title>
78
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M451.12,-148.87C451.12,-148.87 390.12,-148.87 390.12,-148.87 384.12,-148.87 378.12,-142.87 378.12,-136.87 378.12,-136.87 378.12,-124.87 378.12,-124.87 378.12,-118.87 384.12,-112.87 390.12,-112.87 390.12,-112.87 451.12,-112.87 451.12,-112.87 457.12,-112.87 463.12,-118.87 463.12,-124.87 463.12,-124.87 463.12,-136.87 463.12,-136.87 463.12,-142.87 457.12,-148.87 451.12,-148.87"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-133.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Packet</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-121.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">raw L2/L3</text>
81
+ </g>
82
+ <!-- Fuzz&#45;&gt;Packet -->
83
+ <g id="edge4" class="edge">
84
+ <title>Fuzz&#45;&gt;Packet</title>
85
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M271.89,-130.87C300.72,-130.87 337.98,-130.87 367.87,-130.87"/>
86
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="367.73,-133.67 375.73,-130.87 367.73,-128.07 367.73,-133.67"/>
87
+ </g>
88
+ <!-- NetApp -->
89
+ <g id="node6" class="node">
90
+ <title>NetApp</title>
91
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M471,-80.87C471,-80.87 370.25,-80.87 370.25,-80.87 364.25,-80.87 358.25,-74.87 358.25,-68.87 358.25,-68.87 358.25,-56.87 358.25,-56.87 358.25,-50.87 364.25,-44.87 370.25,-44.87 370.25,-44.87 471,-44.87 471,-44.87 477,-44.87 483,-50.87 483,-56.87 483,-56.87 483,-68.87 483,-68.87 483,-74.87 477,-80.87 471,-80.87"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-65.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn_fuzz_net_app_proto</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-53.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">CLI driver</text>
94
+ </g>
95
+ <!-- Char&#45;&gt;NetApp -->
96
+ <g id="edge5" class="edge">
97
+ <title>Char&#45;&gt;NetApp</title>
98
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M262.88,-62.87C286.93,-62.87 319.12,-62.87 348.07,-62.87"/>
99
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="347.78,-65.67 355.78,-62.87 347.78,-60.07 347.78,-65.67"/>
100
+ </g>
101
+ <!-- PS -->
102
+ <g id="node7" class="node">
103
+ <title>PS</title>
104
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M637.75,-216.87C637.75,-216.87 582,-216.87 582,-216.87 576,-216.87 570,-210.87 570,-204.87 570,-204.87 570,-192.87 570,-192.87 570,-186.87 576,-180.87 582,-180.87 582,-180.87 637.75,-180.87 637.75,-180.87 643.75,-180.87 649.75,-186.87 649.75,-192.87 649.75,-192.87 649.75,-204.87 649.75,-204.87 649.75,-210.87 643.75,-216.87 637.75,-216.87"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="609.88" y="-201.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::PS</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="609.88" y="-189.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">process health</text>
107
+ </g>
108
+ <!-- Sock&#45;&gt;PS -->
109
+ <g id="edge6" class="edge">
110
+ <title>Sock&#45;&gt;PS</title>
111
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M459.52,-198.87C488.35,-198.87 528.27,-198.87 559.58,-198.87"/>
112
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="559.46,-201.67 567.46,-198.87 559.46,-196.07 559.46,-201.67"/>
113
+ </g>
114
+ <!-- Log -->
115
+ <g id="node8" class="node">
116
+ <title>Log</title>
117
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M632.88,-148.87C632.88,-148.87 586.88,-148.87 586.88,-148.87 580.88,-148.87 574.88,-142.87 574.88,-136.87 574.88,-136.87 574.88,-124.87 574.88,-124.87 574.88,-118.87 580.88,-112.87 586.88,-112.87 586.88,-112.87 632.88,-112.87 632.88,-112.87 638.88,-112.87 644.88,-118.87 644.88,-124.87 644.88,-124.87 644.88,-136.87 644.88,-136.87 644.88,-142.87 638.88,-148.87 632.88,-148.87"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="609.88" y="-133.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Plugins::Log</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="609.88" y="-121.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">crash detect</text>
120
+ </g>
121
+ <!-- Packet&#45;&gt;Log -->
122
+ <g id="edge7" class="edge">
123
+ <title>Packet&#45;&gt;Log</title>
124
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M463.65,-130.87C493.68,-130.87 534.01,-130.87 564.55,-130.87"/>
125
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="564.54,-133.67 572.54,-130.87 564.54,-128.07 564.54,-133.67"/>
126
+ </g>
127
+ <!-- NetApp&#45;&gt;Log -->
128
+ <g id="edge8" class="edge">
129
+ <title>NetApp&#45;&gt;Log</title>
130
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M472.79,-81.45C501.78,-91.98 537.67,-105.01 565.3,-115.05"/>
131
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="564.01,-117.56 572.49,-117.66 565.93,-112.3 564.01,-117.56"/>
132
+ </g>
133
+ <!-- Report -->
134
+ <g id="node9" class="node">
135
+ <title>Report</title>
136
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M803,-185.87C803,-185.87 748.75,-185.87 748.75,-185.87 742.75,-185.87 736.75,-179.87 736.75,-173.87 736.75,-173.87 736.75,-161.87 736.75,-161.87 736.75,-155.87 742.75,-149.87 748.75,-149.87 748.75,-149.87 803,-149.87 803,-149.87 809,-149.87 815,-155.87 815,-161.87 815,-161.87 815,-173.87 815,-173.87 815,-179.87 809,-185.87 803,-185.87"/>
137
+ <text xml:space="preserve" text-anchor="middle" x="775.88" y="-170.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports::Fuzz</text>
138
+ <text xml:space="preserve" text-anchor="middle" x="775.88" y="-158.37" font-family="sans-Serif" font-size="10.00" fill="#0f172a">crash triage</text>
139
+ </g>
140
+ <!-- PS&#45;&gt;Report -->
141
+ <g id="edge9" class="edge">
142
+ <title>PS&#45;&gt;Report</title>
143
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M650.16,-191.45C673.06,-187.12 702.13,-181.62 726.45,-177.03"/>
144
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="726.92,-179.79 734.26,-175.55 725.88,-174.28 726.92,-179.79"/>
145
+ </g>
146
+ <!-- Log&#45;&gt;Fuzz -->
147
+ <g id="edge11" class="edge">
148
+ <title>Log&#45;&gt;Fuzz</title>
149
+ <path fill="none" stroke="#fbbf24" stroke-width="1.3" stroke-dasharray="5,2" d="M596.69,-112.47C577.77,-85.77 538.53,-37.41 491,-18.37 432.93,4.89 407.43,7.01 350.25,-18.37 307.25,-37.46 315.17,-66.5 279.25,-96.87 275.22,-100.28 270.82,-103.61 266.34,-106.77"/>
150
+ <polygon fill="#fbbf24" stroke="#fbbf24" stroke-width="1.3" points="264.92,-104.34 259.87,-111.15 268.06,-108.98 264.92,-104.34"/>
151
+ <text xml:space="preserve" text-anchor="middle" x="420.62" y="-20.32" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">minimise + reseed</text>
152
+ </g>
153
+ <!-- Log&#45;&gt;Report -->
154
+ <g id="edge10" class="edge">
155
+ <title>Log&#45;&gt;Report</title>
156
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M645.25,-138.63C668.82,-143.95 700.43,-151.08 726.53,-156.97"/>
157
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="725.89,-159.69 734.31,-158.72 727.13,-154.23 725.89,-159.69"/>
158
+ </g>
159
+ </g>
160
+ </svg>
@@ -0,0 +1,119 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
3
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <!-- Generated by graphviz version 14.1.2 (0)
5
+ -->
6
+ <!-- Title: PWN_HistToDriver Pages: 1 -->
7
+ <svg width="1033pt" height="368pt"
8
+ viewBox="0.00 0.00 1033.00 368.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 325.2)">
10
+ <title>PWN_HistToDriver</title>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-325.2 990.2,-325.2 990.2,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="263.88" y="-260" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">From REPL History → Reusable Driver / Skill</text>
13
+ <text xml:space="preserve" text-anchor="start" x="352" y="-248.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">explore → history → bin/pwn_* driver → distill_skill</text>
14
+ <g id="clust1" class="cluster">
15
+ <title>cluster_out</title>
16
+ <path fill="#2e1065" stroke="#6d28d9" d="M593.25,-8C593.25,-8 752.5,-8 752.5,-8 758.5,-8 764.5,-14 764.5,-20 764.5,-20 764.5,-223 764.5,-223 764.5,-229 758.5,-235 752.5,-235 752.5,-235 593.25,-235 593.25,-235 587.25,-235 581.25,-229 581.25,-223 581.25,-223 581.25,-20 581.25,-20 581.25,-14 587.25,-8 593.25,-8"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="672.88" y="-212" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Reusable Artefacts</text>
18
+ </g>
19
+ <!-- Explore -->
20
+ <g id="node1" class="node">
21
+ <title>Explore</title>
22
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M95.5,-124C95.5,-124 12,-124 12,-124 6,-124 0,-118 0,-112 0,-112 0,-100 0,-100 0,-94 6,-88 12,-88 12,-88 95.5,-88 95.5,-88 101.5,-88 107.5,-94 107.5,-100 107.5,-100 107.5,-112 107.5,-112 107.5,-118 101.5,-124 95.5,-124"/>
23
+ <text xml:space="preserve" text-anchor="middle" x="53.75" y="-108.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">🐚 &#160;Explore in REPL</text>
24
+ <text xml:space="preserve" text-anchor="middle" x="53.75" y="-96.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">call PWN::Plugins::*</text>
25
+ </g>
26
+ <!-- Hist -->
27
+ <g id="node2" class="node">
28
+ <title>Hist</title>
29
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M318.25,-124C318.25,-126.21 297.86,-128 272.75,-128 247.64,-128 227.25,-126.21 227.25,-124 227.25,-124 227.25,-88 227.25,-88 227.25,-85.79 247.64,-84 272.75,-84 297.86,-84 318.25,-85.79 318.25,-88 318.25,-88 318.25,-124 318.25,-124"/>
30
+ <path fill="none" stroke="#334155" stroke-width="1.3" d="M318.25,-124C318.25,-121.79 297.86,-120 272.75,-120 247.64,-120 227.25,-121.79 227.25,-124"/>
31
+ <text xml:space="preserve" text-anchor="middle" x="272.75" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn_history</text>
32
+ <text xml:space="preserve" text-anchor="middle" x="272.75" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Pry `history` cmd</text>
33
+ </g>
34
+ <!-- Explore&#45;&gt;Hist -->
35
+ <g id="edge1" class="edge">
36
+ <title>Explore&#45;&gt;Hist</title>
37
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M108.11,-106C141.23,-106 183.7,-106 217.06,-106"/>
38
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="216.69,-108.8 224.69,-106 216.69,-103.2 216.69,-108.8"/>
39
+ <text xml:space="preserve" text-anchor="middle" x="167.38" y="-107.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">auto&#45;log</text>
40
+ </g>
41
+ <!-- Extract -->
42
+ <g id="node3" class="node">
43
+ <title>Extract</title>
44
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M490.25,-124C490.25,-124 417.25,-124 417.25,-124 411.25,-124 405.25,-118 405.25,-112 405.25,-112 405.25,-100 405.25,-100 405.25,-94 411.25,-88 417.25,-88 417.25,-88 490.25,-88 490.25,-88 496.25,-88 502.25,-94 502.25,-100 502.25,-100 502.25,-112 502.25,-112 502.25,-118 496.25,-124 490.25,-124"/>
45
+ <text xml:space="preserve" text-anchor="middle" x="453.75" y="-102.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">copy working lines</text>
46
+ </g>
47
+ <!-- Hist&#45;&gt;Extract -->
48
+ <g id="edge2" class="edge">
49
+ <title>Hist&#45;&gt;Extract</title>
50
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M318.46,-106C341.68,-106 370.32,-106 395.18,-106"/>
51
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="394.89,-108.8 402.89,-106 394.89,-103.2 394.89,-108.8"/>
52
+ </g>
53
+ <!-- Driver -->
54
+ <g id="node4" class="node">
55
+ <title>Driver</title>
56
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M726.5,-196C726.5,-196 618.25,-196 618.25,-196 612.25,-196 606.25,-190 606.25,-184 606.25,-184 606.25,-172 606.25,-172 606.25,-166 612.25,-160 618.25,-160 618.25,-160 726.5,-160 726.5,-160 732.5,-160 738.5,-166 738.5,-172 738.5,-172 738.5,-184 738.5,-184 738.5,-190 732.5,-196 726.5,-196"/>
57
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-180.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">bin/pwn_&lt;name&gt;</text>
58
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-168.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OptionParser + PWN calls</text>
59
+ </g>
60
+ <!-- Extract&#45;&gt;Driver -->
61
+ <g id="edge3" class="edge">
62
+ <title>Extract&#45;&gt;Driver</title>
63
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-121.98C533.25,-132.09 572.96,-145.29 606.2,-156.34"/>
64
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="605.05,-158.91 613.52,-158.77 606.81,-153.59 605.05,-158.91"/>
65
+ </g>
66
+ <!-- Skill -->
67
+ <g id="node5" class="node">
68
+ <title>Skill</title>
69
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M723.88,-124C723.88,-124 620.88,-124 620.88,-124 614.88,-124 608.88,-118 608.88,-112 608.88,-112 608.88,-100 608.88,-100 608.88,-94 614.88,-88 620.88,-88 620.88,-88 723.88,-88 723.88,-88 729.88,-88 735.88,-94 735.88,-100 735.88,-100 735.88,-112 735.88,-112 735.88,-118 729.88,-124 723.88,-124"/>
70
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-108.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">~/.pwn/skills/&lt;name&gt;.md</text>
71
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-96.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">learning_distill_skill</text>
72
+ </g>
73
+ <!-- Extract&#45;&gt;Skill -->
74
+ <g id="edge4" class="edge">
75
+ <title>Extract&#45;&gt;Skill</title>
76
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-106C531.07,-106 567.32,-106 598.96,-106"/>
77
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="598.65,-108.8 606.65,-106 598.65,-103.2 598.65,-108.8"/>
78
+ </g>
79
+ <!-- Cron -->
80
+ <g id="node6" class="node">
81
+ <title>Cron</title>
82
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M699.88,-52C699.88,-52 644.88,-52 644.88,-52 638.88,-52 632.88,-46 632.88,-40 632.88,-40 632.88,-28 632.88,-28 632.88,-22 638.88,-16 644.88,-16 644.88,-16 699.88,-16 699.88,-16 705.88,-16 711.88,-22 711.88,-28 711.88,-28 711.88,-40 711.88,-40 711.88,-46 705.88,-52 699.88,-52"/>
83
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cron_create</text>
84
+ <text xml:space="preserve" text-anchor="middle" x="672.38" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">prompt: | ruby:</text>
85
+ </g>
86
+ <!-- Extract&#45;&gt;Cron -->
87
+ <g id="edge5" class="edge">
88
+ <title>Extract&#45;&gt;Cron</title>
89
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M502.83,-90.02C538.64,-78.12 587.34,-61.93 623.18,-50.02"/>
90
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="623.89,-52.73 630.6,-47.55 622.12,-47.42 623.89,-52.73"/>
91
+ </g>
92
+ <!-- CI -->
93
+ <g id="node7" class="node">
94
+ <title>CI</title>
95
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M935,-124C935,-124 887.5,-124 887.5,-124 881.5,-124 875.5,-118 875.5,-112 875.5,-112 875.5,-100 875.5,-100 875.5,-94 881.5,-88 887.5,-88 887.5,-88 935,-88 935,-88 941,-88 947,-94 947,-100 947,-100 947,-112 947,-112 947,-118 941,-124 935,-124"/>
96
+ <text xml:space="preserve" text-anchor="middle" x="911.25" y="-108.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">⚙️ &#160;CI / CD</text>
97
+ <text xml:space="preserve" text-anchor="middle" x="911.25" y="-96.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">headless run</text>
98
+ </g>
99
+ <!-- Driver&#45;&gt;CI -->
100
+ <g id="edge6" class="edge">
101
+ <title>Driver&#45;&gt;CI</title>
102
+ <path fill="none" stroke="#38bdf8" stroke-width="2" d="M734.68,-159.36C775.23,-147.04 827.53,-131.14 864.46,-119.92"/>
103
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="2" points="865.19,-122.62 872.03,-117.62 863.56,-117.26 865.19,-122.62"/>
104
+ </g>
105
+ <!-- Skill&#45;&gt;CI -->
106
+ <g id="edge7" class="edge">
107
+ <title>Skill&#45;&gt;CI</title>
108
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M736.23,-106C776.82,-106 828.68,-106 865.19,-106"/>
109
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="865.09,-108.8 873.09,-106 865.09,-103.2 865.09,-108.8"/>
110
+ <text xml:space="preserve" text-anchor="middle" x="816" y="-107.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">pwn &#45;&#45;ai</text>
111
+ </g>
112
+ <!-- Cron&#45;&gt;CI -->
113
+ <g id="edge8" class="edge">
114
+ <title>Cron&#45;&gt;CI</title>
115
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M712.49,-45.89C754.6,-58.69 821.48,-79.02 865.62,-92.43"/>
116
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="864.6,-95.05 873.06,-94.7 866.22,-89.69 864.6,-95.05"/>
117
+ </g>
118
+ </g>
119
+ </svg>