├── LICENSE
├── README.md
├── teams.dot
└── teams.svg
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 Emile
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ctf_clusters
2 |
3 | visualizing CTF clusters (teams playing together at DEFCON 2022) (see [github.com/stong/ctf_clusters](https://github.com/stong/ctf_clusters) for 2023).
4 |
5 |
6 |
7 | ## building
8 |
9 | Install graphviz with the package manager of your choice.
10 |
11 | ```
12 | neato -Tsvg teams.dot > teams.svg
13 | ```
14 |
--------------------------------------------------------------------------------
/teams.dot:
--------------------------------------------------------------------------------
1 | digraph teams {
2 | node [fontname = "JetBrains Mono"];
3 | overlap = false;
4 | splines = polyline;
5 |
6 | // level 0
7 | DEFCON [style="bold" href="https://nautilus.institute/"];
8 |
9 | // level 1
10 | // team clusters (red)
11 | subgraph {
12 | node [color="#db4437" fontcolor="#db4437"];
13 | "perfect r✪✪✪t" [href="https://ctftime.org/team/176403"]
14 | "Balsn.217@TSJ.tw" [href="https://ctftime.org/team/189868"]
15 | "Sauercloud" [href="https://ctftime.org/team/54748"]
16 | "Water Paddler" [href="https://ctftime.org/team/155019"]
17 | "PTB_WTL" [href="https://ctftime.org/team/119975"]
18 | "./V /home/r/.bin/tw" [href="https://ctftime.org/team/189869"]
19 | "Straw Hat" [href="https://ctftime.org/team/19208"]
20 | "MMM" [href="https://ctftime.org/team/193591"]
21 | "Katzebin" [href="https://ctftime.org/team/141539"]
22 | "StarBugs" [href="https://ctftime.org/team/152239"]
23 | "Shellphish" [href="https://ctftime.org/team/285"]
24 | "r3kapig" [href="https://ctftime.org/team/58979"]
25 | "DiceGuesser" [href="https://ctftime.org/team/182504"]
26 | "OSUSEC" [href="https://ctftime.org/team/12858"]
27 | "organizers" [href="https://ctftime.org/team/42934"]
28 | }
29 |
30 | // level 2
31 | // individual teams (blue)
32 | subgraph {
33 | node [color="#4285f4" fontcolor="#4285f4"];
34 |
35 | // Sauercloud (Germany)
36 | "KITCTF" [href="https://ctftime.org/team/7221"];
37 | "Eat Sleep Pwn Repeat" [href="https://ctftime.org/team/15712"];
38 | "Flux Fingers" [href="https://ctftime.org/team/551"];
39 | "Red Rocket" [href="https://ctftime.org/team/48677"];
40 | "ALLES!" [href="https://ctftime.org/team/18419"];
41 | "ENOFLAG" [href="https://ctftime.org/team/1438"];
42 | "FAUST" [href="https://ctftime.org/team/550"];
43 | "WizardsOfDos" [href="https://ctftime.org/team/561"];
44 | "Squareroots" [href="https://ctftime.org/team/554"];
45 | "saarsec" [href="https://ctftime.org/team/15337"];
46 |
47 | // perfect rooot
48 | "perfect blue" [href="https://ctftime.org/team/53802"];
49 | "r00timentary" [href="https://ctftime.org/team/32783"];
50 | "Samsung Research" [href=""];
51 |
52 | // Balsn.217@TSJ.tw
53 | "Balsn" [href="https://ctftime.org/team/16978"];
54 | "217" [href="https://ctftime.org/team/5160"];
55 | "TSJ" [href="https://ctftime.org/team/150366"];
56 | "HITCON" [href="https://ctftime.org/team/8299"];
57 |
58 | // PTB_WTL
59 | "PwnThyBytes" [href="https://ctftime.org/team/59199"];
60 | "WreckTheLine" [href="https://ctftime.org/team/57908"];
61 |
62 | // ./V /home/r/.bin/tw
63 | "./Vespiary" [href="https://ctftime.org/team/80092"];
64 | "RicercaSec" [href=""];
65 | "binja" [href="https://ctftime.org/team/9083"];
66 | "TokyoWesterns" [href="https://ctftime.org/team/12599"];
67 |
68 | // Straw Hat
69 | "Nu1L" [href="https://ctftime.org/team/19208"];
70 | "W&M" [href="https://ctftime.org/team/54666"];
71 | "" [href=""];
72 |
73 | // DiceGuesser
74 | "DiceGang" [href="https://ctftime.org/team/109452"];
75 | "SuperGuesser" [href="https://ctftime.org/team/130817"];
76 |
77 | // StarBugs
78 | "CodeRed" [href="https://ctftime.org/team/4004"];
79 | "GYG" [href="https://ctftime.org/team/33362"];
80 | "SED" [href="https://ctftime.org/team/70332"];
81 |
82 | // Katzebin
83 | "AAA" [href=""];
84 | "Oops" [href="https://ctftime.org/team/4419"];
85 | "Tencent" [href="https://ctftime.org/team/32578"];
86 |
87 | // r3kapig
88 | "Eur3kA" [href="https://ctftime.org/team/48512"];
89 | "FlappyPig" [href="https://ctftime.org/team/12692"];
90 |
91 | // organizers
92 | "secret.club" [href=""];
93 | "polyflag" [href="https://ctftime.org/team/112451"];
94 | "excusemewtf" [href="https://ctftime.org/team/104977/"];
95 | "the cr0wn" [href="https://ctftime.org/team/48976/"];
96 |
97 | // MMM
98 | "PPP" [href="https://ctftime.org/team/284"];
99 | "The Duck" [href="https://ctftime.org/team/111501"];
100 | "Maple Bacon" [href="https://ctftime.org/team/73723"];
101 | }
102 |
103 | // level 3
104 | // teams of the above (green)
105 | subgraph {
106 | node [color="#228B22" fontcolor="#228B22"];
107 |
108 | // TSJ
109 | "10sec" [href="https://ctftime.org/team/61603"];
110 | "BambooFox" [href="https://ctftime.org/team/9871"];
111 | "Goburin'" [href="https://ctftime.org/team/111613"];
112 | "NCtfU" [href="https://ctftime.org/team/139610"];
113 | "Ret2NOP" [href="https://ctftime.org/team/139617"];
114 |
115 | // polyflag
116 | "flagbot" [href="https://ctftime.org/team/34878"];
117 | "polygl0ts" [href="https://ctftime.org/team/53791"];
118 |
119 | // ESPR
120 | "StratumAuhuur" [href="https://ctftime.org/team/5317"];
121 |
122 | // DiceGang
123 | "Sice Squad" [href="https://ctftime.org/team/55508"]
124 | "redpwn" [href="https://ctftime.org/team/59759"]
125 | "b1c" [href="https://ctftime.org/team/36439"]
126 | "kernel sanders" [href="https://ctftime.org/team/397"]
127 | "sigpwny" [href="https://ctftime.org/team/27763"]
128 | "crusaders of rust" [href="https://ctftime.org/team/132628/"]
129 | "CCC" [href="https://ctftime.org/team/114056/"]
130 | }
131 |
132 | // level 4
133 | // teams of the teams of the teams of the clusters (this is getting wild)
134 | subgraph {
135 | node [color="#12b2af" fontcolor="#000000"];
136 | "CCCAC" [href="https://ctftime.org/team/555"];
137 | "Stratum0" [href="https://ctftime.org/team/1684"];
138 | }
139 |
140 | // level 1 -> level 0
141 | // primary edges
142 | subgraph {
143 | edge [len=3];
144 | "perfect r✪✪✪t" -> DEFCON [style="bold"];
145 | "Balsn.217@TSJ.tw" -> DEFCON [style="bold"];
146 | "Sauercloud" -> DEFCON [style="bold"];
147 | "Water Paddler" -> DEFCON [style="bold"];
148 | "PTB_WTL" -> DEFCON [style="bold"];
149 | "./V /home/r/.bin/tw" -> DEFCON [style="bold"];
150 | "Straw Hat" -> DEFCON [style="bold"];
151 | "MMM" -> DEFCON [style="bold"];
152 | "Katzebin" -> DEFCON [style="bold"];
153 | "StarBugs" -> DEFCON [style="bold"];
154 | "Shellphish" -> DEFCON [style="bold"];
155 | "r3kapig" -> DEFCON [style="bold"];
156 | "DiceGuesser" -> DEFCON [style="bold"];
157 | "OSUSEC" -> DEFCON [style="bold"];
158 | "organizers" -> DEFCON [style="bold"];
159 | }
160 |
161 | // level 2 -> level 1
162 | // secondary edges (teams to clusters)
163 | subgraph {
164 | edge [weight=1 style="dashed" color="grey"];
165 | // Sauercloud (Germany)
166 | "KITCTF" -> "Sauercloud";
167 | "Eat Sleep Pwn Repeat" -> "Sauercloud";
168 | "Flux Fingers" -> "Sauercloud";
169 | "Red Rocket" -> "Sauercloud";
170 | "ALLES!" -> "Sauercloud";
171 | "ENOFLAG" -> "Sauercloud";
172 | "FAUST" -> "Sauercloud";
173 | "WizardsOfDos" -> "Sauercloud";
174 | "Squareroots" -> "Sauercloud";
175 | "saarsec" -> "Sauercloud";
176 |
177 | // perfect rooot
178 | "perfect blue" ->"perfect r✪✪✪t";
179 | "r00timentary" -> "perfect r✪✪✪t";
180 | "Samsung Research" -> "perfect r✪✪✪t";
181 |
182 | // Balsn.217@TSJ.tw
183 | "Balsn" -> "Balsn.217@TSJ.tw";
184 | "217" -> "Balsn.217@TSJ.tw";
185 | "TSJ" -> "Balsn.217@TSJ.tw";
186 | "HITCON" -> "Balsn.217@TSJ.tw";
187 |
188 | // PTB_WTL
189 | "PwnThyBytes" -> "PTB_WTL";
190 | "WreckTheLine" -> "PTB_WTL";
191 |
192 | // ./V /home/r/.bin/tw
193 | "./Vespiary" -> "./V /home/r/.bin/tw";
194 | "RicercaSec" -> "./V /home/r/.bin/tw";
195 | "binja" -> "./V /home/r/.bin/tw";
196 | "TokyoWesterns" -> "./V /home/r/.bin/tw";
197 |
198 | // Straw Hat
199 | "Nu1L" -> "Straw Hat";
200 | "W&M" -> "Straw Hat";
201 | "" -> "Straw Hat";
202 |
203 | // DiceGuesser
204 | "DiceGang" -> "DiceGuesser";
205 | "SuperGuesser" -> "DiceGuesser";
206 |
207 | // StarBugs
208 | "CodeRed" -> "StarBugs";
209 | "GYG" -> "StarBugs";
210 | "SED" -> "StarBugs";
211 |
212 | // Katzebin
213 | "AAA" -> "Katzebin";
214 | "Oops" -> "Katzebin";
215 | "Tencent" -> "Katzebin";
216 |
217 | // r3kapig
218 | "Eur3kA" -> "r3kapig";
219 | "FlappyPig" -> "r3kapig";
220 |
221 | // organizers
222 | "secret.club" -> "organizers";
223 | "polyflag" -> "organizers";
224 | "excusemewtf" -> "organizers";
225 | "the cr0wn" -> "organizers";
226 |
227 | // MMM
228 | "PPP" -> "MMM";
229 | "The Duck" -> "MMM";
230 | "Maple Bacon" -> "MMM";
231 |
232 | }
233 |
234 | // level 3 -> level 2
235 | // ternary edges (people to teams)
236 | subgraph {
237 | edge [weight=1 style="dashed" color="grey"];
238 | // TSJ
239 | "10sec" -> "TSJ";
240 | "BambooFox" -> "TSJ";
241 | "Goburin'" -> "TSJ";
242 | "NCtfU" -> "TSJ";
243 | "Ret2NOP" -> "TSJ";
244 |
245 | // polyflag
246 | "flagbot" -> "polyflag";
247 | "polygl0ts" -> "polyflag";
248 |
249 | // ESPR
250 | "KITCTF" -> "Eat Sleep Pwn Repeat";
251 | "StratumAuhuur" -> "Eat Sleep Pwn Repeat";
252 |
253 | // Dice Gang
254 | "Sice Squad"-> "DiceGang"
255 | "redpwn"-> "DiceGang"
256 | "b1c"-> "DiceGang"
257 | "kernel sanders"-> "DiceGang"
258 | "sigpwny"-> "DiceGang"
259 | "crusaders of rust" -> "DiceGang"
260 | "CCC" -> "DiceGang";
261 | }
262 |
263 | // level 4 -> level 3
264 | // quadinary (how do you call this?) edges
265 | subgraph {
266 | edge [weight=1 style="dashed" color="grey"];
267 |
268 | // StratumAuhuur
269 | "Stratum0" -> "StratumAuhuur";
270 | "CCCAC" -> "StratumAuhuur";
271 | }
272 | }
273 |
274 |
--------------------------------------------------------------------------------
/teams.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
1139 |
--------------------------------------------------------------------------------