pwn 0.5.615 → 0.5.618
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 +109 -85
- data/README.md.bak +200 -0
- data/bin/pwn +47 -2
- data/bin/pwn_gqrx_scanner +75 -18
- data/documentation/AI-Integration.md +42 -26
- data/documentation/AWS.md +57 -0
- data/documentation/Agent-Tool-Registry.md +56 -0
- data/documentation/Banner.md +17 -0
- data/documentation/Blockchain.md +18 -0
- data/documentation/Bounty.md +21 -0
- data/documentation/BurpSuite.md +41 -16
- data/documentation/CLI-Drivers.md +58 -0
- data/documentation/Configuration.md +66 -0
- data/documentation/Contributing.md +33 -19
- data/documentation/Cron.md +47 -0
- data/documentation/Diagrams.md +123 -40
- data/documentation/Drivers.md +43 -16
- data/documentation/Extrospection.md +54 -0
- data/documentation/FFI.md +14 -0
- data/documentation/Fuzzing.md +36 -0
- data/documentation/General-PWN-Usage.md +50 -30
- data/documentation/Hardware.md +40 -0
- data/documentation/Home.md +78 -51
- data/documentation/How-PWN-Works.md +59 -57
- data/documentation/Installation.md +53 -28
- data/documentation/Metasploit.md +34 -0
- data/documentation/NmapIt.md +18 -12
- data/documentation/PWN.png +0 -0
- data/documentation/PWN_Contributors_and_Users.png +0 -0
- data/documentation/Persistence.md +38 -0
- data/documentation/Plugins.md +97 -47
- data/documentation/Reporting.md +25 -18
- data/documentation/SAST.md +39 -22
- data/documentation/SDR.md +40 -0
- data/documentation/Sessions.md +39 -0
- data/documentation/Skills-Memory-Learning.md +49 -29
- data/documentation/Swarm.md +71 -0
- data/documentation/Transparent-Browser.md +26 -22
- data/documentation/Troubleshooting.md +44 -25
- data/documentation/WWW.md +32 -0
- data/documentation/What-is-PWN.md +51 -32
- data/documentation/Why-PWN.md +41 -11
- data/documentation/diagrams/agent-tool-registry.svg +284 -0
- data/documentation/diagrams/ai-integration-tool-calling.svg +141 -103
- data/documentation/diagrams/aws-cloud-security.svg +166 -0
- 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/cron-scheduling.svg +148 -0
- 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/hardware-hacking.dot +48 -0
- 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/persistence-filesystem.dot +29 -0
- 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/extrospection-world-awareness.svg +185 -0
- data/documentation/diagrams/fuzzing-workflow.svg +128 -115
- data/documentation/diagrams/hardware-hacking.svg +163 -0
- 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/persistence-filesystem.svg +174 -0
- 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/sdr-radio-flow.svg +146 -0
- data/documentation/diagrams/sessions-cron-automation.svg +112 -68
- data/documentation/diagrams/swarm-multi-agent.svg +225 -0
- data/documentation/diagrams/web-application-testing.svg +136 -100
- data/documentation/diagrams/zero-day-research-flow.svg +116 -112
- data/documentation/fax-spectrogram.png +0 -0
- data/documentation/fax-waveform.png +0 -0
- data/documentation/pwn-REPL.md +40 -24
- data/documentation/pwn-ai-Agent.md +59 -30
- data/documentation/pwn_android_war_dialer_session.png +0 -0
- data/documentation/pwn_install.png +0 -0
- data/documentation/pwn_wallpaper.jpg +0 -0
- data/documentation/ringing-spectrogram.png +0 -0
- data/documentation/ringing-waveform.png +0 -0
- 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 +199 -37
- metadata +65 -3
- data/lib/pwn/ai/introspection.rb +0 -76
|
@@ -3,82 +3,67 @@
|
|
|
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_BurpVsZap Pages: 1 -->
|
|
7
|
+
<svg width="639pt" height="421pt"
|
|
8
|
+
viewBox="0.00 0.00 639.00 421.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 377.9)">
|
|
10
|
+
<title>PWN_BurpVsZap</title>
|
|
11
|
+
<polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-377.9 595.45,-377.9 595.45,43.2 -43.2,43.2"/>
|
|
12
|
+
<text xml:space="preserve" text-anchor="start" x="8" y="-312.7" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">Web Proxy Selection — BurpSuite ⭐ preferred over ZAP</text>
|
|
13
|
+
<!-- Need -->
|
|
13
14
|
<g id="node1" class="node">
|
|
14
|
-
<title>
|
|
15
|
-
<
|
|
16
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
17
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
15
|
+
<title>Need</title>
|
|
16
|
+
<polygon fill="#7dd3fc" stroke="#334155" stroke-width="1.3" points="286.12,-302.7 214.04,-263.1 286.12,-223.5 358.21,-263.1 286.12,-302.7"/>
|
|
17
|
+
<text xml:space="preserve" text-anchor="middle" x="286.12" y="-265.6" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Need web proxy /</text>
|
|
18
|
+
<text xml:space="preserve" text-anchor="middle" x="286.12" y="-253.6" font-family="sans-Serif" font-size="10.00" fill="#0f172a">active scanner?</text>
|
|
18
19
|
</g>
|
|
19
20
|
<!-- Burp -->
|
|
20
21
|
<g id="node2" class="node">
|
|
21
22
|
<title>Burp</title>
|
|
22
|
-
<path fill="
|
|
23
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
24
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
25
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
26
|
-
<text xml:space="preserve" text-anchor="middle" x="535.12" y="-84.2" font-family="Arial" font-size="9.00">- Rich ecosystem</text>
|
|
27
|
-
<text xml:space="preserve" text-anchor="middle" x="535.12" y="-73.7" font-family="Arial" font-size="9.00">- Active scan + extensions</text>
|
|
23
|
+
<path fill="#6ee7b7" stroke="#334155" stroke-width="2" d="M259.88,-147C259.88,-147 122.38,-147 122.38,-147 116.38,-147 110.38,-141 110.38,-135 110.38,-135 110.38,-115 110.38,-115 110.38,-109 116.38,-103 122.38,-103 122.38,-103 259.88,-103 259.88,-103 265.88,-103 271.88,-109 271.88,-115 271.88,-115 271.88,-135 271.88,-135 271.88,-141 265.88,-147 259.88,-147"/>
|
|
24
|
+
<text xml:space="preserve" text-anchor="middle" x="191.12" y="-133.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Plugins::BurpSuite</text>
|
|
25
|
+
<text xml:space="preserve" text-anchor="middle" x="191.12" y="-121.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">headless · REST · richer scanner</text>
|
|
26
|
+
<text xml:space="preserve" text-anchor="middle" x="191.12" y="-109.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">BApp ecosystem</text>
|
|
28
27
|
</g>
|
|
29
|
-
<!--
|
|
30
|
-
<g id="
|
|
31
|
-
<title>
|
|
32
|
-
<path fill="none" stroke="
|
|
33
|
-
<polygon fill="
|
|
34
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
28
|
+
<!-- Need->Burp -->
|
|
29
|
+
<g id="edge1" class="edge">
|
|
30
|
+
<title>Need->Burp</title>
|
|
31
|
+
<path fill="none" stroke="#34d399" stroke-width="2" d="M263.68,-235.55C252.87,-222.34 239.99,-205.92 229.38,-190.5 222.14,-179.99 214.84,-168.07 208.59,-157.37"/>
|
|
32
|
+
<polygon fill="#34d399" stroke="#34d399" stroke-width="2" points="211.09,-156.11 204.68,-150.58 206.24,-158.91 211.09,-156.11"/>
|
|
33
|
+
<text xml:space="preserve" text-anchor="middle" x="267.25" y="-181.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">Burp Pro available</text>
|
|
35
34
|
</g>
|
|
36
35
|
<!-- Zap -->
|
|
37
36
|
<g id="node3" class="node">
|
|
38
37
|
<title>Zap</title>
|
|
39
|
-
<path fill="
|
|
40
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
41
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
42
|
-
<text xml:space="preserve" text-anchor="middle" x="535.12" y="-16.45" font-family="Arial" font-size="9.00">- Open source</text>
|
|
43
|
-
<text xml:space="preserve" text-anchor="middle" x="535.12" y="-5.95" font-family="Arial" font-size="9.00">- REST API scans</text>
|
|
44
|
-
</g>
|
|
45
|
-
<!-- Decision->Zap -->
|
|
46
|
-
<g id="edge3" class="edge">
|
|
47
|
-
<title>Decision->Zap</title>
|
|
48
|
-
<path fill="none" stroke="black" d="M275.28,-48.35C293.1,-44.46 313.2,-40.54 331.75,-38 377.15,-31.77 428.69,-28.52 468.4,-26.82"/>
|
|
49
|
-
<polygon fill="black" stroke="black" points="468.43,-30.32 478.29,-26.43 468.15,-23.33 468.43,-30.32"/>
|
|
50
|
-
<text xml:space="preserve" text-anchor="middle" x="392.88" y="-57.7" font-family="Times,serif" font-size="14.00">if Burp unavailable</text>
|
|
51
|
-
<text xml:space="preserve" text-anchor="middle" x="392.88" y="-41.2" font-family="Times,serif" font-size="14.00">or specific REST need</text>
|
|
52
|
-
</g>
|
|
53
|
-
<!-- Scan / Proxy / Exploit -->
|
|
54
|
-
<g id="node5" class="node">
|
|
55
|
-
<title>Scan / Proxy / Exploit</title>
|
|
56
|
-
<path fill="none" stroke="black" d="M724.75,-79C724.75,-79 647.25,-79 647.25,-79 641.25,-79 635.25,-73 635.25,-67 635.25,-67 635.25,-55 635.25,-55 635.25,-49 641.25,-43 647.25,-43 647.25,-43 724.75,-43 724.75,-43 730.75,-43 736.75,-49 736.75,-55 736.75,-55 736.75,-67 736.75,-67 736.75,-73 730.75,-79 724.75,-79"/>
|
|
57
|
-
<text xml:space="preserve" text-anchor="middle" x="686" y="-57.7" font-family="Arial" font-size="9.00">Scan / Proxy / Exploit</text>
|
|
58
|
-
</g>
|
|
59
|
-
<!-- Burp->Scan / Proxy / Exploit -->
|
|
60
|
-
<g id="edge4" class="edge">
|
|
61
|
-
<title>Burp->Scan / Proxy / Exploit</title>
|
|
62
|
-
<path fill="none" stroke="black" d="M598.4,-82.52C606.93,-80.4 615.68,-78.23 624.19,-76.11"/>
|
|
63
|
-
<polygon fill="black" stroke="black" points="624.86,-79.55 633.72,-73.75 623.17,-72.76 624.86,-79.55"/>
|
|
38
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M429.88,-143C429.88,-143 334.38,-143 334.38,-143 328.38,-143 322.38,-137 322.38,-131 322.38,-131 322.38,-119 322.38,-119 322.38,-113 328.38,-107 334.38,-107 334.38,-107 429.88,-107 429.88,-107 435.88,-107 441.88,-113 441.88,-119 441.88,-119 441.88,-131 441.88,-131 441.88,-137 435.88,-143 429.88,-143"/>
|
|
39
|
+
<text xml:space="preserve" text-anchor="middle" x="382.12" y="-127.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">PWN::Plugins::Zaproxy</text>
|
|
40
|
+
<text xml:space="preserve" text-anchor="middle" x="382.12" y="-115.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">OSS fallback</text>
|
|
64
41
|
</g>
|
|
65
|
-
<!--
|
|
66
|
-
<g id="
|
|
67
|
-
<title>
|
|
68
|
-
<path fill="none" stroke="
|
|
69
|
-
<polygon fill="
|
|
42
|
+
<!-- Need->Zap -->
|
|
43
|
+
<g id="edge2" class="edge">
|
|
44
|
+
<title>Need->Zap</title>
|
|
45
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M306.02,-233.9C323.14,-209.63 347.62,-174.92 364.16,-151.47"/>
|
|
46
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="366.4,-153.15 368.73,-144.99 361.83,-149.92 366.4,-153.15"/>
|
|
47
|
+
<text xml:space="preserve" text-anchor="middle" x="358.47" y="-181.95" font-family="sans-Serif" font-size="9.00" fill="#cbd5e1">fallback</text>
|
|
70
48
|
</g>
|
|
71
|
-
<!--
|
|
49
|
+
<!-- Both -->
|
|
72
50
|
<g id="node4" class="node">
|
|
73
|
-
<title>
|
|
74
|
-
<path fill="
|
|
75
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
51
|
+
<title>Both</title>
|
|
52
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M390.5,-36C390.5,-36 181.75,-36 181.75,-36 175.75,-36 169.75,-30 169.75,-24 169.75,-24 169.75,-12 169.75,-12 169.75,-6 175.75,0 181.75,0 181.75,0 390.5,0 390.5,0 396.5,0 402.5,-6 402.5,-12 402.5,-12 402.5,-24 402.5,-24 402.5,-30 396.5,-36 390.5,-36"/>
|
|
53
|
+
<text xml:space="preserve" text-anchor="middle" x="286.12" y="-20.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Same downstream:</text>
|
|
54
|
+
<text xml:space="preserve" text-anchor="middle" x="286.12" y="-8.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TransparentBrowser proxy · Reports · DefectDojo</text>
|
|
76
55
|
</g>
|
|
77
|
-
<!--
|
|
78
|
-
<g id="
|
|
79
|
-
<title>
|
|
80
|
-
<path fill="none" stroke="
|
|
81
|
-
<polygon fill="
|
|
56
|
+
<!-- Burp->Both -->
|
|
57
|
+
<g id="edge3" class="edge">
|
|
58
|
+
<title>Burp->Both</title>
|
|
59
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M210.81,-102.24C226.22,-85.21 247.65,-61.52 263.72,-43.77"/>
|
|
60
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="265.63,-45.83 268.92,-38.02 261.48,-42.07 265.63,-45.83"/>
|
|
61
|
+
</g>
|
|
62
|
+
<!-- Zap->Both -->
|
|
63
|
+
<g id="edge4" class="edge">
|
|
64
|
+
<title>Zap->Both</title>
|
|
65
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M366.27,-106.66C350.57,-89.49 326.37,-63.02 308.67,-43.66"/>
|
|
66
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="310.79,-41.83 303.33,-37.82 306.66,-45.61 310.79,-41.83"/>
|
|
82
67
|
</g>
|
|
83
68
|
</g>
|
|
84
69
|
</svg>
|
|
@@ -3,110 +3,170 @@
|
|
|
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_SAST Pages: 1 -->
|
|
7
|
+
<svg width="818pt" height="484pt"
|
|
8
|
+
viewBox="0.00 0.00 818.00 484.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 441.2)">
|
|
10
|
+
<title>PWN_SAST</title>
|
|
11
|
+
<polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-441.2 775.2,-441.2 775.2,43.2 -43.2,43.2"/>
|
|
12
|
+
<text xml:space="preserve" text-anchor="start" x="131.25" y="-376" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::SAST — Static Application Security Testing</text>
|
|
13
|
+
<text xml:space="preserve" text-anchor="start" x="229.88" y="-364.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">48 rules · multi-language · bin/pwn_sast · Reports::SAST</text>
|
|
14
|
+
<g id="clust1" class="cluster">
|
|
15
|
+
<title>cluster_engine</title>
|
|
16
|
+
<path fill="#022c22" stroke="#047857" d="M178,-138C178,-138 290.75,-138 290.75,-138 296.75,-138 302.75,-144 302.75,-150 302.75,-150 302.75,-274 302.75,-274 302.75,-280 296.75,-286 290.75,-286 290.75,-286 178,-286 178,-286 172,-286 166,-280 166,-274 166,-274 166,-150 166,-150 166,-144 172,-138 178,-138"/>
|
|
17
|
+
<text xml:space="preserve" text-anchor="middle" x="234.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">SAST Engine</text>
|
|
18
|
+
</g>
|
|
19
|
+
<g id="clust2" class="cluster">
|
|
20
|
+
<title>cluster_rules</title>
|
|
21
|
+
<path fill="#422006" stroke="#a16207" d="M384.75,-8C384.75,-8 538.75,-8 538.75,-8 544.75,-8 550.75,-14 550.75,-20 550.75,-20 550.75,-339 550.75,-339 550.75,-345 544.75,-351 538.75,-351 538.75,-351 384.75,-351 384.75,-351 378.75,-351 372.75,-345 372.75,-339 372.75,-339 372.75,-20 372.75,-20 372.75,-14 378.75,-8 384.75,-8"/>
|
|
22
|
+
<text xml:space="preserve" text-anchor="middle" x="461.75" y="-328" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Rule Families (48)</text>
|
|
23
|
+
</g>
|
|
24
|
+
<g id="clust3" class="cluster">
|
|
25
|
+
<title>cluster_out</title>
|
|
26
|
+
<path fill="#2e1065" stroke="#6d28d9" d="M632.75,-138C632.75,-138 712,-138 712,-138 718,-138 724,-144 724,-150 724,-150 724,-274 724,-274 724,-280 718,-286 712,-286 712,-286 632.75,-286 632.75,-286 626.75,-286 620.75,-280 620.75,-274 620.75,-274 620.75,-150 620.75,-150 620.75,-144 626.75,-138 632.75,-138"/>
|
|
27
|
+
<text xml:space="preserve" text-anchor="middle" x="672.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
|
|
28
|
+
</g>
|
|
29
|
+
<!-- Src -->
|
|
13
30
|
<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="
|
|
31
|
+
<title>Src</title>
|
|
32
|
+
<path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M76,-214C76,-214 12,-214 12,-214 6,-214 0,-208 0,-202 0,-202 0,-190 0,-190 0,-184 6,-178 12,-178 12,-178 76,-178 76,-178 82,-178 88,-184 88,-190 88,-190 88,-202 88,-202 88,-208 82,-214 76,-214"/>
|
|
33
|
+
<text xml:space="preserve" text-anchor="middle" x="44" y="-198.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">📁  Source Tree</text>
|
|
34
|
+
<text xml:space="preserve" text-anchor="middle" x="44" y="-186.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">git clone / repo</text>
|
|
18
35
|
</g>
|
|
19
|
-
<!--
|
|
36
|
+
<!-- Factory -->
|
|
20
37
|
<g id="node2" class="node">
|
|
21
|
-
<title>
|
|
22
|
-
<
|
|
23
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
24
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
38
|
+
<title>Factory</title>
|
|
39
|
+
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M261.75,-182C261.75,-182 206,-182 206,-182 200,-182 194,-176 194,-170 194,-170 194,-158 194,-158 194,-152 200,-146 206,-146 206,-146 261.75,-146 261.75,-146 267.75,-146 273.75,-152 273.75,-158 273.75,-158 273.75,-170 273.75,-170 273.75,-176 267.75,-182 261.75,-182"/>
|
|
40
|
+
<text xml:space="preserve" text-anchor="middle" x="233.88" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">SAST::Factory</text>
|
|
41
|
+
<text xml:space="preserve" text-anchor="middle" x="233.88" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rule loader</text>
|
|
25
42
|
</g>
|
|
26
|
-
<!--
|
|
43
|
+
<!-- Src->Factory -->
|
|
27
44
|
<g id="edge1" class="edge">
|
|
28
|
-
<title>
|
|
29
|
-
<path fill="none" stroke="
|
|
30
|
-
<polygon fill="
|
|
45
|
+
<title>Src->Factory</title>
|
|
46
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-188.58C117.01,-183.73 154.19,-177.4 183.69,-172.38"/>
|
|
47
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="184.02,-175.16 191.44,-171.06 183.08,-169.64 184.02,-175.16"/>
|
|
31
48
|
</g>
|
|
32
|
-
<!--
|
|
49
|
+
<!-- TCE -->
|
|
33
50
|
<g id="node3" class="node">
|
|
34
|
-
<title>
|
|
35
|
-
<path fill="
|
|
36
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
37
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
38
|
-
<text xml:space="preserve" text-anchor="middle" x="330.39" y="-95.2" font-family="Arial" font-size="9.00">Semgrep, custom rules)</text>
|
|
51
|
+
<title>TCE</title>
|
|
52
|
+
<path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M265.88,-247C265.88,-247 201.88,-247 201.88,-247 195.88,-247 189.88,-241 189.88,-235 189.88,-235 189.88,-223 189.88,-223 189.88,-217 195.88,-211 201.88,-211 201.88,-211 265.88,-211 265.88,-211 271.88,-211 277.88,-217 277.88,-223 277.88,-223 277.88,-235 277.88,-235 277.88,-241 271.88,-247 265.88,-247"/>
|
|
53
|
+
<text xml:space="preserve" text-anchor="middle" x="233.88" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TestCaseEngine</text>
|
|
54
|
+
<text xml:space="preserve" text-anchor="middle" x="233.88" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generate probes</text>
|
|
39
55
|
</g>
|
|
40
|
-
<!--
|
|
56
|
+
<!-- Src->TCE -->
|
|
41
57
|
<g id="edge2" class="edge">
|
|
42
|
-
<title>
|
|
43
|
-
<path fill="none" stroke="
|
|
44
|
-
<polygon fill="
|
|
58
|
+
<title>Src->TCE</title>
|
|
59
|
+
<path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-203.65C115.84,-208.44 151.15,-214.65 180.02,-219.72"/>
|
|
60
|
+
<polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="179.24,-222.42 187.6,-221.05 180.2,-216.91 179.24,-222.42"/>
|
|
45
61
|
</g>
|
|
46
|
-
<!--
|
|
62
|
+
<!-- Cmd -->
|
|
47
63
|
<g id="node4" class="node">
|
|
48
|
-
<title>
|
|
49
|
-
<path fill="
|
|
50
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
51
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
64
|
+
<title>Cmd</title>
|
|
65
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M515.75,-52C515.75,-52 406.75,-52 406.75,-52 400.75,-52 394.75,-46 394.75,-40 394.75,-40 394.75,-28 394.75,-28 394.75,-22 400.75,-16 406.75,-16 406.75,-16 515.75,-16 515.75,-16 521.75,-16 527.75,-22 527.75,-28 527.75,-28 527.75,-40 527.75,-40 527.75,-46 521.75,-52 515.75,-52"/>
|
|
66
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cmd_execution_*</text>
|
|
67
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">java · py · ruby · go · scala</text>
|
|
52
68
|
</g>
|
|
53
|
-
<!--
|
|
69
|
+
<!-- Factory->Cmd -->
|
|
54
70
|
<g id="edge3" class="edge">
|
|
55
|
-
<title>
|
|
56
|
-
<path fill="none" stroke="
|
|
57
|
-
<polygon fill="
|
|
71
|
+
<title>Factory->Cmd</title>
|
|
72
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M257.15,-145.65C283.5,-124.59 329.29,-90 372.75,-67 379.97,-63.18 387.73,-59.58 395.54,-56.28"/>
|
|
73
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="396.54,-58.89 402.88,-53.27 394.42,-53.71 396.54,-58.89"/>
|
|
58
74
|
</g>
|
|
59
|
-
<!--
|
|
75
|
+
<!-- Web -->
|
|
60
76
|
<g id="node5" class="node">
|
|
61
|
-
<title>
|
|
62
|
-
<path fill="
|
|
63
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
64
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
77
|
+
<title>Web</title>
|
|
78
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M526.62,-117C526.62,-117 395.88,-117 395.88,-117 389.88,-117 383.88,-111 383.88,-105 383.88,-105 383.88,-93 383.88,-93 383.88,-87 389.88,-81 395.88,-81 395.88,-81 526.62,-81 526.62,-81 532.62,-81 538.62,-87 538.62,-93 538.62,-93 538.62,-105 538.62,-105 538.62,-111 532.62,-117 526.62,-117"/>
|
|
79
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">csrf · redirect · redos</text>
|
|
80
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">inner/outer_html · location_hash</text>
|
|
65
81
|
</g>
|
|
66
|
-
<!--
|
|
82
|
+
<!-- Factory->Web -->
|
|
67
83
|
<g id="edge4" class="edge">
|
|
68
|
-
<title>
|
|
69
|
-
<path fill="none" stroke="
|
|
70
|
-
<polygon fill="
|
|
84
|
+
<title>Factory->Web</title>
|
|
85
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-152.6C305.35,-143.68 349.28,-131 386.67,-120.22"/>
|
|
86
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="387.22,-122.98 394.13,-118.07 385.67,-117.6 387.22,-122.98"/>
|
|
71
87
|
</g>
|
|
72
|
-
<!--
|
|
73
|
-
<g id="edge5" class="edge">
|
|
74
|
-
<title>TestGen->Findings</title>
|
|
75
|
-
<path fill="none" stroke="black" d="M381.59,-53.46C416.55,-53.78 463.02,-54.21 498.13,-54.53"/>
|
|
76
|
-
<polygon fill="black" stroke="black" points="498.02,-58.03 508.05,-54.62 498.08,-51.03 498.02,-58.03"/>
|
|
77
|
-
</g>
|
|
78
|
-
<!-- Reports -->
|
|
88
|
+
<!-- Cryp -->
|
|
79
89
|
<g id="node6" class="node">
|
|
80
|
-
<title>
|
|
81
|
-
<
|
|
82
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
83
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
90
|
+
<title>Cryp</title>
|
|
91
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M519.5,-182C519.5,-182 403,-182 403,-182 397,-182 391,-176 391,-170 391,-170 391,-158 391,-158 391,-152 397,-146 403,-146 403,-146 519.5,-146 519.5,-146 525.5,-146 531.5,-152 531.5,-158 531.5,-158 531.5,-170 531.5,-170 531.5,-176 525.5,-182 519.5,-182"/>
|
|
92
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">md5 · ssl · keystore</text>
|
|
93
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">padding_oracle · private_key</text>
|
|
84
94
|
</g>
|
|
85
|
-
<!--
|
|
86
|
-
<g id="
|
|
87
|
-
<title>
|
|
88
|
-
<path fill="none" stroke="
|
|
89
|
-
<polygon fill="
|
|
95
|
+
<!-- Factory->Cryp -->
|
|
96
|
+
<g id="edge5" class="edge">
|
|
97
|
+
<title>Factory->Cryp</title>
|
|
98
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-164C303.83,-164 345,-164 381.11,-164"/>
|
|
99
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="380.69,-166.8 388.69,-164 380.69,-161.2 380.69,-166.8"/>
|
|
90
100
|
</g>
|
|
91
|
-
<!--
|
|
101
|
+
<!-- Data -->
|
|
92
102
|
<g id="node7" class="node">
|
|
93
|
-
<title>
|
|
94
|
-
<path fill="
|
|
95
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
96
|
-
<text xml:space="preserve" text-anchor="middle" x="
|
|
103
|
+
<title>Data</title>
|
|
104
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M510.88,-247C510.88,-247 411.62,-247 411.62,-247 405.62,-247 399.62,-241 399.62,-235 399.62,-235 399.62,-223 399.62,-223 399.62,-217 405.62,-211 411.62,-211 411.62,-211 510.88,-211 510.88,-211 516.88,-211 522.88,-217 522.88,-223 522.88,-223 522.88,-235 522.88,-235 522.88,-241 516.88,-247 510.88,-247"/>
|
|
105
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sql · eval · deserial_java</text>
|
|
106
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">log4j · php_type_juggling</text>
|
|
97
107
|
</g>
|
|
98
|
-
<!--
|
|
108
|
+
<!-- TCE->Data -->
|
|
109
|
+
<g id="edge6" class="edge">
|
|
110
|
+
<title>TCE->Data</title>
|
|
111
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-229C309.8,-229 353.03,-229 389.45,-229"/>
|
|
112
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="389.07,-231.8 397.07,-229 389.07,-226.2 389.07,-231.8"/>
|
|
113
|
+
</g>
|
|
114
|
+
<!-- Mem -->
|
|
115
|
+
<g id="node8" class="node">
|
|
116
|
+
<title>Mem</title>
|
|
117
|
+
<path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M491,-312C491,-312 431.5,-312 431.5,-312 425.5,-312 419.5,-306 419.5,-300 419.5,-300 419.5,-288 419.5,-288 419.5,-282 425.5,-276 431.5,-276 431.5,-276 491,-276 491,-276 497,-276 503,-282 503,-288 503,-288 503,-300 503,-300 503,-306 497,-312 491,-312"/>
|
|
118
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-296.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">banned_c_calls</text>
|
|
119
|
+
<text xml:space="preserve" text-anchor="middle" x="461.25" y="-284.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">use_after_free</text>
|
|
120
|
+
</g>
|
|
121
|
+
<!-- TCE->Mem -->
|
|
99
122
|
<g id="edge7" class="edge">
|
|
100
|
-
<title>
|
|
101
|
-
<path fill="none" stroke="
|
|
102
|
-
<polygon fill="
|
|
103
|
-
</g>
|
|
104
|
-
<!--
|
|
123
|
+
<title>TCE->Mem</title>
|
|
124
|
+
<path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-241.53C315.99,-252.39 370.49,-268.11 410.01,-279.51"/>
|
|
125
|
+
<polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="408.85,-282.09 417.32,-281.62 410.41,-276.71 408.85,-282.09"/>
|
|
126
|
+
</g>
|
|
127
|
+
<!-- Report -->
|
|
128
|
+
<g id="node9" class="node">
|
|
129
|
+
<title>Report</title>
|
|
130
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M701.75,-182C701.75,-182 643,-182 643,-182 637,-182 631,-176 631,-170 631,-170 631,-158 631,-158 631,-152 637,-146 643,-146 643,-146 701.75,-146 701.75,-146 707.75,-146 713.75,-152 713.75,-158 713.75,-158 713.75,-170 713.75,-170 713.75,-176 707.75,-182 701.75,-182"/>
|
|
131
|
+
<text xml:space="preserve" text-anchor="middle" x="672.38" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports::SAST</text>
|
|
132
|
+
<text xml:space="preserve" text-anchor="middle" x="672.38" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">HTML + JSON</text>
|
|
133
|
+
</g>
|
|
134
|
+
<!-- Cmd->Report -->
|
|
105
135
|
<g id="edge8" class="edge">
|
|
106
|
-
<title>
|
|
107
|
-
<path fill="none" stroke="
|
|
108
|
-
<polygon fill="
|
|
109
|
-
|
|
136
|
+
<title>Cmd->Report</title>
|
|
137
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M520.12,-52.52C530.59,-56.72 541.2,-61.57 550.75,-67 586.16,-87.14 621.93,-117.44 645.22,-138.81"/>
|
|
138
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="643.12,-140.67 650.88,-144.07 646.93,-136.57 643.12,-140.67"/>
|
|
139
|
+
</g>
|
|
140
|
+
<!-- Web->Report -->
|
|
141
|
+
<g id="edge9" class="edge">
|
|
142
|
+
<title>Web->Report</title>
|
|
143
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M522.18,-117.63C553.54,-127.38 591.51,-139.17 621.29,-148.43"/>
|
|
144
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.3,-151.06 628.77,-150.76 621.96,-145.71 620.3,-151.06"/>
|
|
145
|
+
</g>
|
|
146
|
+
<!-- Cryp->Report -->
|
|
147
|
+
<g id="edge10" class="edge">
|
|
148
|
+
<title>Cryp->Report</title>
|
|
149
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M531.89,-164C560.86,-164 593.87,-164 620.51,-164"/>
|
|
150
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.42,-166.8 628.42,-164 620.42,-161.2 620.42,-166.8"/>
|
|
151
|
+
</g>
|
|
152
|
+
<!-- DD -->
|
|
153
|
+
<g id="node10" class="node">
|
|
154
|
+
<title>DD</title>
|
|
155
|
+
<path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M704,-247C704,-247 640.75,-247 640.75,-247 634.75,-247 628.75,-241 628.75,-235 628.75,-235 628.75,-223 628.75,-223 628.75,-217 634.75,-211 640.75,-211 640.75,-211 704,-211 704,-211 710,-211 716,-217 716,-223 716,-223 716,-235 716,-235 716,-241 710,-247 704,-247"/>
|
|
156
|
+
<text xml:space="preserve" text-anchor="middle" x="672.38" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DefectDojo</text>
|
|
157
|
+
<text xml:space="preserve" text-anchor="middle" x="672.38" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">import / reimport</text>
|
|
158
|
+
</g>
|
|
159
|
+
<!-- Data->DD -->
|
|
160
|
+
<g id="edge11" class="edge">
|
|
161
|
+
<title>Data->DD</title>
|
|
162
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M523.3,-229C553.39,-229 589.33,-229 618.26,-229"/>
|
|
163
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="618.22,-231.8 626.22,-229 618.22,-226.2 618.22,-231.8"/>
|
|
164
|
+
</g>
|
|
165
|
+
<!-- Mem->DD -->
|
|
166
|
+
<g id="edge12" class="edge">
|
|
167
|
+
<title>Mem->DD</title>
|
|
168
|
+
<path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M503.57,-281.16C536.68,-270.87 583.34,-256.36 619.05,-245.26"/>
|
|
169
|
+
<polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="619.66,-248.01 626.47,-242.96 618,-242.66 619.66,-248.01"/>
|
|
110
170
|
</g>
|
|
111
171
|
</g>
|
|
112
172
|
</svg>
|