icoa-cli 2.12.0 → 2.12.2

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 (132) hide show
  1. package/dist/commands/exam.js +36 -15
  2. package/dist/repl.js +8 -26
  3. package/package.json +1 -1
  4. package/translations/de/10.json +9 -0
  5. package/translations/de/11.json +9 -0
  6. package/translations/de/12.json +9 -0
  7. package/translations/de/13.json +9 -0
  8. package/translations/de/14.json +9 -0
  9. package/translations/de/15.json +9 -0
  10. package/translations/de/16.json +9 -0
  11. package/translations/de/17.json +9 -0
  12. package/translations/de/18.json +9 -0
  13. package/translations/de/19.json +9 -0
  14. package/translations/de/20.json +9 -0
  15. package/translations/de/21.json +9 -0
  16. package/translations/de/22.json +9 -0
  17. package/translations/de/23.json +9 -0
  18. package/translations/de/24.json +9 -0
  19. package/translations/de/25.json +9 -0
  20. package/translations/de/26.json +9 -0
  21. package/translations/de/27.json +9 -0
  22. package/translations/de/28.json +9 -0
  23. package/translations/de/29.json +9 -0
  24. package/translations/de/30.json +9 -0
  25. package/translations/de/31.json +9 -0
  26. package/translations/de/32.json +9 -0
  27. package/translations/de/33.json +9 -0
  28. package/translations/de/34.json +9 -0
  29. package/translations/de/35.json +9 -0
  30. package/translations/de/36.json +9 -0
  31. package/translations/de/37.json +9 -0
  32. package/translations/de/38.json +9 -0
  33. package/translations/de/39.json +9 -0
  34. package/translations/de/4.json +9 -0
  35. package/translations/de/40.json +9 -0
  36. package/translations/de/41.json +9 -0
  37. package/translations/de/42.json +9 -0
  38. package/translations/de/43.json +9 -0
  39. package/translations/de/44.json +9 -0
  40. package/translations/de/45.json +9 -0
  41. package/translations/de/46.json +9 -0
  42. package/translations/de/47.json +9 -0
  43. package/translations/de/48.json +9 -0
  44. package/translations/de/49.json +9 -0
  45. package/translations/de/5.json +9 -0
  46. package/translations/de/6.json +9 -0
  47. package/translations/de/7.json +9 -0
  48. package/translations/de/8.json +9 -0
  49. package/translations/de/9.json +9 -0
  50. package/translations/id/1.json +9 -0
  51. package/translations/id/10.json +9 -0
  52. package/translations/id/11.json +9 -0
  53. package/translations/id/12.json +9 -0
  54. package/translations/id/13.json +9 -0
  55. package/translations/id/14.json +9 -0
  56. package/translations/id/15.json +9 -0
  57. package/translations/id/16.json +9 -0
  58. package/translations/id/17.json +9 -0
  59. package/translations/id/18.json +9 -0
  60. package/translations/id/19.json +9 -0
  61. package/translations/id/20.json +9 -0
  62. package/translations/id/21.json +9 -0
  63. package/translations/id/22.json +9 -0
  64. package/translations/id/23.json +9 -0
  65. package/translations/id/24.json +9 -0
  66. package/translations/id/25.json +9 -0
  67. package/translations/id/26.json +9 -0
  68. package/translations/id/27.json +9 -0
  69. package/translations/id/28.json +9 -0
  70. package/translations/id/29.json +9 -0
  71. package/translations/id/30.json +9 -0
  72. package/translations/id/31.json +9 -0
  73. package/translations/id/32.json +9 -0
  74. package/translations/id/33.json +9 -0
  75. package/translations/id/34.json +9 -0
  76. package/translations/id/35.json +9 -0
  77. package/translations/id/36.json +9 -0
  78. package/translations/id/37.json +9 -0
  79. package/translations/id/38.json +9 -0
  80. package/translations/id/39.json +9 -0
  81. package/translations/id/4.json +9 -0
  82. package/translations/id/40.json +9 -0
  83. package/translations/id/41.json +9 -0
  84. package/translations/id/42.json +9 -0
  85. package/translations/id/43.json +9 -0
  86. package/translations/id/44.json +9 -0
  87. package/translations/id/45.json +9 -0
  88. package/translations/id/46.json +9 -0
  89. package/translations/id/47.json +9 -0
  90. package/translations/id/48.json +9 -0
  91. package/translations/id/49.json +9 -0
  92. package/translations/id/5.json +9 -0
  93. package/translations/id/6.json +9 -0
  94. package/translations/id/7.json +9 -0
  95. package/translations/id/8.json +9 -0
  96. package/translations/id/9.json +9 -0
  97. package/translations/th/1.json +9 -0
  98. package/translations/th/10.json +9 -0
  99. package/translations/th/11.json +9 -0
  100. package/translations/th/12.json +9 -0
  101. package/translations/th/13.json +9 -0
  102. package/translations/th/14.json +9 -0
  103. package/translations/th/15.json +9 -0
  104. package/translations/th/16.json +9 -0
  105. package/translations/th/17.json +9 -0
  106. package/translations/th/18.json +9 -0
  107. package/translations/th/19.json +9 -0
  108. package/translations/th/20.json +9 -0
  109. package/translations/th/21.json +9 -0
  110. package/translations/th/22.json +9 -0
  111. package/translations/th/23.json +9 -0
  112. package/translations/th/24.json +9 -0
  113. package/translations/th/25.json +9 -0
  114. package/translations/th/26.json +9 -0
  115. package/translations/th/27.json +9 -0
  116. package/translations/th/28.json +9 -0
  117. package/translations/th/29.json +9 -0
  118. package/translations/th/30.json +9 -0
  119. package/translations/th/31.json +9 -0
  120. package/translations/th/32.json +9 -0
  121. package/translations/th/33.json +9 -0
  122. package/translations/th/34.json +9 -0
  123. package/translations/th/35.json +9 -0
  124. package/translations/th/36.json +9 -0
  125. package/translations/th/37.json +9 -0
  126. package/translations/th/38.json +9 -0
  127. package/translations/th/4.json +9 -0
  128. package/translations/th/5.json +9 -0
  129. package/translations/th/6.json +9 -0
  130. package/translations/th/7.json +9 -0
  131. package/translations/th/8.json +9 -0
  132. package/translations/th/9.json +9 -0
@@ -112,22 +112,49 @@ function printQuestion(q, answer) {
112
112
  }
113
113
  export function registerExamCommand(program) {
114
114
  const exam = program.command('exam').description('National selection exam');
115
- // ─── exam list ───
115
+ // ─── exam list [country] ───
116
116
  exam
117
- .command('list')
118
- .description('List available exams')
119
- .action(async () => {
120
- logCommand('exam list');
117
+ .command('list [country]')
118
+ .description('List available exams (optional: 2-letter country code)')
119
+ .action(async (country) => {
120
+ logCommand(`exam list ${country || ''}`);
121
121
  const client = requireExamConnection();
122
122
  if (!client)
123
123
  return;
124
124
  const spinner = createSpinner('Loading exams...');
125
125
  spinner.start();
126
126
  try {
127
- const exams = await client.getExams();
127
+ let exams = await client.getExams();
128
128
  spinner.stop();
129
+ // Filter by country if specified
130
+ if (country) {
131
+ const code = country.toUpperCase();
132
+ exams = exams.filter((e) => e.country.toUpperCase() === code || e.country === 'ALL');
133
+ }
129
134
  if (!exams || exams.length === 0) {
130
- printInfo('No exams available.');
135
+ console.log();
136
+ if (country) {
137
+ printInfo(`No exams available for ${country.toUpperCase()} yet.`);
138
+ }
139
+ else {
140
+ printInfo('No exams available for your country yet.');
141
+ }
142
+ console.log();
143
+ console.log(chalk.white(' New exams are coming soon!'));
144
+ console.log(chalk.gray(' National Round 1 Selection exams are being prepared.'));
145
+ console.log();
146
+ console.log(chalk.gray(' In the meantime, try: ') + chalk.bold.cyan('demo'));
147
+ console.log();
148
+ const langHint = {
149
+ PE: 'es', CN: 'zh', JP: 'ja', KR: 'ko', BR: 'pt',
150
+ SA: 'ar', FR: 'fr', DE: 'de', IN: 'hi', ID: 'id',
151
+ TH: 'th', VN: 'vi', TR: 'tr', RU: 'ru',
152
+ };
153
+ const code = (country || '').toUpperCase();
154
+ if (langHint[code]) {
155
+ console.log(chalk.gray(` Tip: switch to your language with: lang ${langHint[code]}`));
156
+ console.log();
157
+ }
131
158
  return;
132
159
  }
133
160
  const rows = exams.map((e) => {
@@ -143,19 +170,13 @@ export function registerExamCommand(program) {
143
170
  statusColor(e.status),
144
171
  ];
145
172
  });
146
- // Group by country
147
173
  const countries = [...new Set(exams.map((e) => e.country))];
148
- if (countries.length > 1) {
149
- printHeader(`Available Exams (${countries.length} countries)`);
150
- }
151
- else {
152
- printHeader('Available Exams');
153
- }
174
+ printHeader(country ? `Exams — ${country.toUpperCase()}` : `Available Exams (${countries.length} countries)`);
154
175
  printTable(['ID', 'Name', 'Country', 'Questions', 'Duration', 'Status'], rows);
155
176
  console.log();
156
177
  console.log(chalk.gray(' Start: exam start <id>'));
157
178
  if (countries.length > 1) {
158
- console.log(chalk.gray(` Countries: ${countries.join(', ')}`));
179
+ console.log(chalk.gray(` Filter by country: exam list PE, exam list CN, ...`));
159
180
  }
160
181
  }
161
182
  catch (err) {
package/dist/repl.js CHANGED
@@ -175,31 +175,13 @@ export async function startRepl(program, resumeMode) {
175
175
  // ─── Mode-specific welcome ───
176
176
  if (mode === 'selection') {
177
177
  const modeLabel = chalk.cyan.bold('[Selection Mode]');
178
- if (connected) {
179
- console.log(chalk.green(` Welcome back, ${config.userName}!`) + ' ' + modeLabel);
180
- console.log(chalk.gray(` Connected to ${config.ctfdUrl}`));
181
- console.log();
182
- console.log(chalk.gray(' ─────────────────────────────────────────────'));
183
- console.log(chalk.bold.cyan(' demo') + chalk.gray(' Free practice exam'));
184
- console.log(chalk.white(' exam list') + chalk.gray(' Your available exams'));
185
- console.log(chalk.white(' logout') + chalk.gray(' Disconnect'));
186
- console.log(chalk.gray(' ─────────────────────────────────────────────'));
187
- console.log();
188
- }
189
- else {
190
- console.log(' ' + modeLabel);
191
- console.log();
192
- console.log(chalk.gray(' ─────────────────────────────────────────────'));
193
- console.log(chalk.white(' Welcome! Type a command to get started:'));
194
- console.log();
195
- console.log(chalk.bold.cyan(' demo') + chalk.gray(' Free practice exam (30 questions)'));
196
- console.log(chalk.gray(' No account needed. Try it now!'));
197
- console.log();
198
- console.log(chalk.white(' join <url>') + chalk.gray(' Connect to real exam server'));
199
- console.log(chalk.gray(' Your proctor will provide credentials.'));
200
- console.log(chalk.gray(' ─────────────────────────────────────────────'));
201
- console.log();
202
- }
178
+ console.log(' ' + modeLabel);
179
+ console.log();
180
+ console.log(chalk.gray(' ─────────────────────────────────────────────'));
181
+ console.log(chalk.bold.cyan(' demo') + chalk.gray(' Free practice exam (30 questions)'));
182
+ console.log(chalk.gray(' No account needed. Try it now!'));
183
+ console.log(chalk.gray(' ─────────────────────────────────────────────'));
184
+ console.log();
203
185
  }
204
186
  else if (mode === 'organizer') {
205
187
  console.log(chalk.yellow.bold(' [National/Regional Partner]'));
@@ -417,7 +399,7 @@ export async function startRepl(program, resumeMode) {
417
399
  }
418
400
  const cmd = input.split(/\s+/)[0].toLowerCase();
419
401
  // ─── Mode-based command filtering ───
420
- const selectionCommands = ['join', 'exam', 'demo', 'next', 'prev', 'logout', 'setup', 'lang', 'ref', 'ctf'];
402
+ const selectionCommands = ['exam', 'demo', 'next', 'prev', 'setup', 'lang', 'ref'];
421
403
  const organizerCommands = ['join', 'exam', 'demo', 'next', 'prev', 'logout', 'setup', 'lang', 'ref', 'ctf'];
422
404
  if (mode === 'selection' && !selectionCommands.includes(cmd)) {
423
405
  console.log(chalk.gray(' Not available in Selection mode. Switch via: setup'));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "icoa-cli",
3
- "version": "2.12.0",
3
+ "version": "2.12.2",
4
4
  "description": "ICOA CLI — The world's first CLI-native CTF competition terminal",
5
5
  "type": "module",
6
6
  "bin": {
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 10,
3
+ "name": "The Perfect Breakfast",
4
+ "category": "crypto",
5
+ "translation": "Ah, Frühstück. In dem Moment, in dem die Sonne über dem Horizont hervorlugt, gibt es nichts Schöneres als den Geruch von etwas Brutzelndem auf dem Herd. Ich lasse es nie ausfallen, nicht weil ich ein Morgenmensch bin, sondern weil ich beim Frühstück meine wahre Berufung finde. Manche Leute bevorzugen Müsli, andere Toast, aber ich? Ich mag es, wenn die Dinge crispy sind.\n\nMeine Morgenroutine ist eine Kunst für sich. Zwei Eier, slightly runny. Eine Tasse Kaffee, black. Und das Kronjuwel: diese rauchige, salzige Perfektion, die mir jedes Mal ein Lächeln ins Gesicht zaubert. Mein absoluter Favorit. Es ist zugegebenermaßen ein kleiner Genuss, aber jeden Bissen wert.\n\nMan sagt, Frühstück sei die wichtigste Mahlzeit des Tages… vielleicht habe ich die Nachricht deshalb dort versteckt. Man muss nur wissen, wo man underneath the layers suchen muss.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:21.214Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 11,
3
+ "name": "Wise Words",
4
+ "category": "crypto",
5
+ "translation": "Ich begegnete einmal Augustus, dem Adoptivsohn und Erben eines großen Generals. Als ich ihn fragte, was seine größte Strategie sei, flüsterte er einfach: Fwfo_Djqifsaa_Fwpmwf",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:25.814Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 12,
3
+ "name": "HexedHeaders",
4
+ "category": "forensics",
5
+ "translation": "Diese Datei scheint Geheimnisse zu enthalten... Aber wie kommt man hinein...",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:28.660Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 13,
3
+ "name": "Keylogger",
4
+ "category": "forensics",
5
+ "translation": "Nachdem Ole spürte, dass etwas nicht in Ordnung war, meldete er es dem Sicherheitsteam. Das Team beschloss, das Netzwerk zu untersuchen und bemerkte etwas Verdächtiges.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:36.061Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 14,
3
+ "name": "obfuscated script",
4
+ "category": "forensics",
5
+ "translation": "Ein Mitarbeiter fand zwei seltsame Dateien in ihrem Downloads folder: ein script und eine Datei, die sie nicht lesen konnten. Können Sie herausfinden, was sie sind?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:46.627Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 15,
3
+ "name": "Ping",
4
+ "category": "forensics",
5
+ "translation": "Angreifer werden heutzutage immer schlauer, sie finden alle möglichen Wege, um exfiltrate data!\nWas haben sie diesmal gestohlen?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:51.380Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 16,
3
+ "name": "Sound Inversion",
4
+ "category": "forensics",
5
+ "translation": "Soldat, wir glauben, dass der Feind eine gesprochene Audionachricht irgendwo in dieser Datei versteckt hat. Finde sie, und melde dich sofort zurück.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:15:57.611Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 17,
3
+ "name": "There is always a trace",
4
+ "category": "forensics",
5
+ "translation": "Sie wurden von der NSA eingestellt und es ist Ihr erster Arbeitstag. Für Ihre erste Aufgabe haben sie Ihnen eine verdächtig aussehende Datei gegeben, mit kaum Kontext, außer dass sie von dem Laptop einer Person stammt, die verdächtigt wurde, einen Regierungsserver aus der Ferne zu kompromittieren.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:09.286Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 18,
3
+ "name": "Electric Debugger",
4
+ "category": "misc",
5
+ "translation": "Der Konkurrent anderer beliebter Debugger hat heute Morgen gerade eine neue Version seines Electric debugger veröffentlicht. Leider ist er nicht länger free or open-source. Gerüchten zufolge sind jedoch bounties verfügbar, wenn es jemandem gelingt, ihn zu hacken.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:18.301Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 19,
3
+ "name": "Old is gold",
4
+ "category": "misc",
5
+ "translation": "Der vorherige Sysadmin hat hier fast 47 Jahre lang gearbeitet. Du entdeckst diese Datei auf seinem alten PC...",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:23.006Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 20,
3
+ "name": "Perceptions",
4
+ "category": "misc",
5
+ "translation": "Schau dir diesen Blog an, den ich gemacht habe! Er hat ein cooles backend, anscheinend verwendet er weniger ports.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:30.133Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 21,
3
+ "name": "Rules",
4
+ "category": "misc",
5
+ "translation": "Befolgen Sie die Regeln für dieses CTF!\n\nDas Flag-Format ist `flag{...}`.\n\nIhr Ziel ist es, root access auf der Zielmaschine zu erhalten. Wir haben eine anfällige Webanwendung eingerichtet, die unter `http://challenge.example.com` läuft. Sie müssen einen Weg finden, sie zu exploiten.\n\nSobald Sie eine shell haben, suchen Sie nach dem flag. Es befindet sich in `/root/flag.txt`.\n\nViel Glück!",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:39.819Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 22,
3
+ "name": "Survey",
4
+ "category": "misc",
5
+ "translation": "Sagen Sie uns, was Sie über PECAN+ CTF 2025 dachten. Jedes Feedback hilft!\n\n<https://forms.cloud.microsoft/r/q5ESPCft24>",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:16:43.333Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 23,
3
+ "name": "The Job Interview",
4
+ "category": "misc",
5
+ "translation": "Sie sitzen seit zwei unerbittlichen Stunden über Ihrer Tastatur gebeugt und ringen gedanklich mit Vorstellungsfragen. Ihr Kaffee ist kalt. Ihre Geduld wird dünner.\nDoch gerade als Sie Ihre letzte Antwort abschicken wollen, erscheint eine kryptische Nachricht auf Ihrem Bildschirm:\n\n\"Sie haben Ihre Ausdauer bewiesen. Jetzt testen wir Ihr problem-solving und Ihr advanced knowledge des code, den Sie so gut zu kennen scheinen.\"\n\nEine einzige URL wird sichtbar:\n\nhttps://docs.google.com/document/d/e/2PACX-1vRW7X8yMO9cM-b6Ao3FbiZysF3MIjARoeO73z0PlG8O_yeM8xxWAWzt9hdoavlh3HR1IOEwWtJFpczI/pub\n\nDarin? Ein grid aus kryptischen data, trügerisch einfach, doch etwas Entscheidendes verbergend.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:00.439Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 24,
3
+ "name": "Class Above Par",
4
+ "category": "osint",
5
+ "translation": "Jeden Tag geht Jamie durch die von Bäumen gesäumten Straßen von Melbournes südlichen Vororten, um ihre Sekundarschule zu erreichen – ein Ort, wo der morgendliche Appell oft vom fernen Donner der Flugzeuge über ihnen unterbrochen wird.\n\nEines Nachmittags, während Jamie lokale landmarks für ein class project kartierte, entdeckte Jamie etwas Merkwürdiges: Ihre Schule könnte möglicherweise die nächstgelegene secondary school zu einem major airport sein. Noch merkwürdiger, liegt sie auch nur einen Steinwurf entfernt von sprawling golf greens, wo ruhige swings den rush of jet engines kontrastieren.\n\nKönnen Sie die school aufdecken, die Jamie ihr Zuhause nennt? Flag format: `pecan{my_high_school}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:11.987Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 25,
3
+ "name": "Travelling Around",
4
+ "category": "osint",
5
+ "translation": "Hmm… Corn Man scheint einige interessante Orte besucht zu haben, auf einer sehr seltsamen Route. Könnte das etwas bedeuten? Vielleicht halten die Vororte einen Hinweis bereit... Die Posts könnten einen \"pointer\" in die richtige Richtung enthalten...\nRemember to wrap the flag in pecan{}, use uppercase letters, and separate the words with an underscore. E.g. `pecan{I_LOVE_PECAN}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:18.169Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 26,
3
+ "name": "Online Presence",
4
+ "category": "osint",
5
+ "translation": "Durch umfangreiche Ermittlungen scheint es, dass Corn Man eine Social Media Präsenz hat. Könnten Sie uns helfen, das Konto zu finden, das er benutzt?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:24.150Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 27,
3
+ "name": "Happy Birthday Corn Man!",
4
+ "category": "osint",
5
+ "translation": "Ich verfolge den Corn Man schon eine Weile, bin aber auf ein Hindernis gestoßen. Ich habe seine E-Mail kürzlich online gefunden: <cornman25944@gmail.com>. Er scheint eine große Online-Präsenz zu haben. Könntest du möglicherweise sein Geburtsdatum finden und bei dieser Untersuchung helfen?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:28.523Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 28,
3
+ "name": "Ego is the weakness",
4
+ "category": "osint",
5
+ "translation": "Eine ransomware operation wurde kürzlich entdeckt, was zu einem Verlust von Millionen von Dollar in Sekunden führte. Nach einer gemeinsamen Untersuchung mit der Regierung haben wir seine Aktivitäten zu einem Instagram account zurückverfolgt, der mutmaßlich dem Täter gehört. Können Sie uns helfen, die Adresse eines Ortes zu identifizieren, den dieser cybercriminal oft besucht? Unsere intel deutet darauf hin, dass es sehr wahrscheinlich ist, dass diese Person noch jung ist, daher hat sie noch keinen Abschluss gemacht.\n\nFlag format: `pecan{Paste in the address from Google Maps}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:36.946Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 29,
3
+ "name": "Go git the door",
4
+ "category": "osint",
5
+ "translation": "Ein berüchtigter Cyberkrimineller, der in der Vergangenheit viele groß angelegte Ransomware-Operationen erfolgreich durchgeführt hat, arbeitet an einer neuen. Zum Glück für uns hat er versehentlich sein GitHub repository öffentlich gemacht. Können Sie untersuchen, ob er versehentlich geheime Informationen preisgibt?\nFlag format: `pecan{secret1_secret2}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:48.922Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 30,
3
+ "name": "Echo Chamber",
4
+ "category": "pwn",
5
+ "translation": "Ich habe diesen seltsamen service gefunden, der einfach nur mit allem zurückantwortet, was du ihm schickst. Es ist wie ein seltsamer Spiegel oder eine Reflexion oder so etwas.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:17:56.187Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 31,
3
+ "name": "Flag Fish",
4
+ "category": "pwn",
5
+ "translation": "Bjarne jagt nach dem begehrten flag fish. Sein erster `try` war erfolglos, kannst du ihm helfen, es diesmal zu `catch`en?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:06.647Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 32,
3
+ "name": "fridge",
4
+ "category": "pwn",
5
+ "translation": "Wir hatten einen data breach! Unser forensics team fand heraus, dass es seltsamen traffic von unserem neuen smart refrigerator gab, und sie scheinen einen alten debugging service gefunden zu haben, der immer noch läuft...\n\nEs liegt jetzt an dir herauszufinden, wie sie access zu unserem fridge bekommen haben!",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:18.201Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 33,
3
+ "name": "Say Shells!",
4
+ "category": "pwn",
5
+ "translation": "Eine einfache Web-App lässt Sie image files hochladen, um deren EXIF metadata anzuzeigen. Aber etwas stimmt nicht... werden Ihre Bilder ein wenig zu tiefgehend analysiert?\nKönnen Sie den server dazu bringen, einen command Ihrer Wahl auszuführen — und den Inhalt einer versteckten flag.txt file preiszugeben?\n\nHinweis: Es sind nur image file uploads erlaubt. Sie benötigen keine brute force — nur ein wenig Kreativität und das richtige format.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:26.540Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 34,
3
+ "name": "Show Me What You GOT!",
4
+ "category": "pwn",
5
+ "translation": "Zeig mir, was du GOT! Ich will sehen, was du GOT!",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:33.174Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 35,
3
+ "name": "cafe1995",
4
+ "category": "rev",
5
+ "translation": "Sie haben die Einzelteile eines Programms von einem unbeaufsichtigten Entwickler aufgesammelt, der gerade gefeuert wurde.\nFinden Sie das password und bringen Sie das Unternehmen wieder auf Kurs... sonst werden Sie auch gefeuert.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:39.958Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 36,
3
+ "name": "Doors 3",
4
+ "category": "rev",
5
+ "translation": "Dein Freund hat eine letzte flag, von der er nicht glaubt, dass du sie erreichen kannst, da er seine Fähigkeit testet, bypassing the licence check zu erkennen.\n\nVersuche, die letzte flag zu bekommen. Möglicherweise musst du patch the binary, um dorthin zu gelangen, aber es gibt mehrere Wege, die man einschlagen kann.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:18:53.550Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 37,
3
+ "name": "Doors 2",
4
+ "category": "rev",
5
+ "translation": "Dein Freund ist wirklich dankbar, dass du die **flag** gefunden hast, die sie vergessen hatten!\n\nSie haben sich etwas Zeit genommen, um den Rest der **flags** zu verstecken und hoffen, dass du nicht an sie herankommst. Glaubst du, du könntest **reverse their key validation function**?\nGeneriere deinen eigenen **licence key** für ihr Programm und hol dir die **flag**!",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:09.959Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 38,
3
+ "name": "Doors",
4
+ "category": "rev",
5
+ "translation": "Dein Freund hat dir eine Prototyp-Version eines security key verification program geschickt, das er in C# schreibt. Hier gibt es ein paar flags, aber kannst du helfen, indem du das flag findest, das er vergessen hat zu verschlüsseln?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:15.810Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 39,
3
+ "name": "Too Many Flags",
4
+ "category": "rev",
5
+ "translation": "Wir haben diese Datei gefunden, voll von flags, aber wir wissen nicht, welches das richtige ist! Könnt ihr herausfinden, wie diese flags generiert wurden, und das richtige finden?",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:22.111Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 4,
3
+ "name": "#InMyLibraryClashingEra",
4
+ "category": "crypto",
5
+ "translation": "Ich habe eine lächerlich einfache? hash function erstellt. Finde einen clash und ich gebe dir die library, zu der du navigieren sollst. Das heißt, wenn du lesen kannst, was ich habe. Mein Fehler, ich habe 32 ml Base model Dasani getrunken, bevor ich das hier gemacht habe.\n\npycryptodome könnte benötigt werden, deshalb installiere dies vorher.\n\nDenke daran, die flag in `pecan{flag}` zu kapseln.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:14:39.115Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 40,
3
+ "name": "Xanarto",
4
+ "category": "rev",
5
+ "translation": "Ich habe diesen Typen auf LinkedIn gefunden, der behauptete, einen uncrackable algorithm erstellt zu haben. Widerlege ihn. Ich habe den post als image angehängt.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:29.274Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 41,
3
+ "name": "Cheese",
4
+ "category": "steg",
5
+ "translation": "Für diese Herausforderung muss man tief in die Tiefen der bereitgestellten image file eintauchen, als Teil des Käsefluchs, und verschiedene tools verwenden, um aufzudecken, was manche als völlig zufälligen text abtun würden.\n\nWenn nur dieser string irgendwie manipuliert oder konvertiert werden könnte, könnte dies unsere einzige Hoffnung sein, die flag zu finden, um den Käsefluch ein für alle Mal aufzuheben......\n\nViel Spaß :)",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:35.606Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 42,
3
+ "name": "Dogs Always Know",
4
+ "category": "steg",
5
+ "translation": "Hunde haben einen Riecher für Geheimnisse – tief vergraben, wo niemand sucht. Vertraue ihren Instinkten; manchmal ist das Versteckte nicht offensichtlich, sondern in den Knochen unter der Oberfläche.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:43.203Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 43,
3
+ "name": "In the fine print",
4
+ "category": "steg",
5
+ "translation": "Ein Satz gedruckter Dokumente wurde an einem nicht näher bezeichneten Ort entdeckt. Sie wirken scheinbar harmlos, aber etwas stimmt nicht...",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:51.496Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 44,
3
+ "name": "In the words of Taylor",
4
+ "category": "steg",
5
+ "translation": "Ich schreibe deinen Namen... oder, zumindest eine flag.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:19:54.765Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 45,
3
+ "name": "Layer Cake",
4
+ "category": "steg",
5
+ "translation": "Nicht alle Kuchen sind Lügen. Dieser hat Schichten!\nDas Flaggenformat ist `pecan{crackedwords}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:20:00.739Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 46,
3
+ "name": "Looking through the sound",
4
+ "category": "steg",
5
+ "translation": "Nicht jede Nachricht reitet auf den Wellen des Klangs. Sie müssen *durch* das Rauschen *sehen*. Lassen Sie Ihre Augen lauschen, und lassen Sie die Musik es Ihnen buchstabieren. Hinweis: Sie müssen das Audio *nicht* anhören, um diese Challenge zu lösen.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:20:08.140Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 47,
3
+ "name": "Nothing to See Here",
4
+ "category": "steg",
5
+ "translation": "Hier ist eine kleine Zeichnung, die ich gemacht habe. Darin ist allerdings nichts zu sehen, wie du sehen kannst.",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:20:16.484Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 48,
3
+ "name": "Stuck in Your Head",
4
+ "category": "steg",
5
+ "translation": "Du solltest dir mein Lieblingslied anhören und mir 21 Gründe nennen, warum es das Beste ist!",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:20:19.233Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 49,
3
+ "name": "TLSB",
4
+ "category": "steg",
5
+ "translation": "Vielleicht hast du schon von Least Significant Bit (LSB) Steganography gehört, aber hast du jemals von Third Least Significant Bit (TLSB) Steganography gehört? (Hoffentlich nicht, da ich es für diese Challenge erfunden habe). (HINT: Ich habe das Geheimnis in image byte order gespeichert)",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:20:24.076Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 5,
3
+ "name": "Multi-layer",
4
+ "category": "crypto",
5
+ "translation": "Dieses Ding hat Schichten.\n\n```\nZnJpcmEgbyBmY25wciBmcmlyYSBhdmFyIGZjbnByIGZ2ayBzIGZjbnByIGZyaXJhIHN2aXIgZmNucHIgZ2piIG1yZWIgZmNucHIgZnZrIGZyaXJhIGZjbnByIGZ2ayBzIGZjbnByIGZyaXJhIHNiaGUgZmNucHIgZ2piIG1yZWIgZmNucHIgZnJpcmEgc2JoZSBmY25wciBmdmsgcnZ0dWcgZmNucHIgZnZrIGF2YXIgZmNucHIgZnJpcmEgZ3VlcnIgZmNucHIgZnJpcmEgcQ==\n```\n\nRemember that the flag format is `pecan{flag_goes_here}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:14:45.985Z"
9
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "id": 6,
3
+ "name": "Mysteries of the Tomb",
4
+ "category": "crypto",
5
+ "translation": "Im schattigen Tiefen des Tals der Könige haben Entdecker ein längst der Zeit entrissenes Grab entdeckt. In seinem Herzen ruht eine uralte Steintafel, akribisch mit mysteriösen Glyphen geätzt – eine Pyramide von Geheimnissen, erschaffen von ergebenen Schreibern, die den heiligsten Schatz des Pharaos bewachen.\n\nDurch sorgfältige Übersetzung enthüllt sich eine wiederkehrende Legende: Diese Tafel birgt den Schlüssel zu unermesslicher Macht. Bewaffnet mit deinen sorgfältigen Notizen und wachsendem Wissen über die Symbole, beginnst du, ihre kryptische Botschaft zu entschlüsseln.\n\nBisher lautet die Inschrift an der Spitze der Tafel:\n\"To unveil the truth, read the stones at dawn's first light, tracing from the summit down to the shifting sands.\"\n\nFormat: `pecan{flag}`",
6
+ "lang": "de",
7
+ "model": "gemini-3.1-pro-preview",
8
+ "timestamp": "2026-04-08T04:14:54.486Z"
9
+ }