icoa-cli 2.19.82 → 2.19.83
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.
- package/dist/commands/env.js +7 -5
- package/dist/commands/exam.js +1 -1
- package/dist/repl.js +1 -1
- package/package.json +1 -1
package/dist/commands/env.js
CHANGED
|
@@ -44,7 +44,7 @@ const PYTHON_LIBS = [
|
|
|
44
44
|
{ name: 'pyserial', check: 'python3 -c "import serial"', install: 'pyserial==3.5', category: 'Security Tools' },
|
|
45
45
|
];
|
|
46
46
|
// ══════════════════════════════════════════════════════════
|
|
47
|
-
//
|
|
47
|
+
// 83 System Tools — brew (Mac) / apt (Ubuntu) / choco (Win)
|
|
48
48
|
// ══════════════════════════════════════════════════════════
|
|
49
49
|
const W = process.platform === 'win32';
|
|
50
50
|
const CMD = (unix, win) => W ? (win || `where ${unix}`) : `which ${unix}`;
|
|
@@ -109,6 +109,8 @@ const SYSTEM_TOOLS = [
|
|
|
109
109
|
{ name: 'xxd', check: CMD('xxd'), brew: 'vim', apt: 'xxd', category: 'Forensics' },
|
|
110
110
|
{ name: 'pdftotext', check: CMD('pdftotext'), brew: 'poppler', apt: 'poppler-utils', category: 'Forensics' },
|
|
111
111
|
{ name: 'pngcheck', check: CMD('pngcheck'), brew: 'pngcheck', apt: 'pngcheck', category: 'Forensics' },
|
|
112
|
+
// sleuthkit — disk-image forensics (mmls/fls/icat/blkcat + 20 more)
|
|
113
|
+
{ name: 'sleuthkit', check: CMD('mmls'), brew: 'sleuthkit', apt: 'sleuthkit', choco: 'sleuthkit', category: 'Forensics' },
|
|
112
114
|
// Crypto & Password (4)
|
|
113
115
|
{ name: 'john', check: CMD('john'), brew: 'john', apt: 'john', choco: 'john', category: 'Crypto & Password' },
|
|
114
116
|
{ name: 'hashcat', check: CMD('hashcat'), brew: 'hashcat', apt: 'hashcat', choco: 'hashcat', category: 'Crypto & Password' },
|
|
@@ -270,12 +272,12 @@ function getPythonFullVersion() {
|
|
|
270
272
|
}
|
|
271
273
|
export function registerEnvCommand(program) {
|
|
272
274
|
const envCmd = program.command('env').description('Manage competition environment');
|
|
273
|
-
envCmd.command('status').alias('check').description('Check all
|
|
275
|
+
envCmd.command('status').alias('check').description('Check all 110 tools').action(() => showStatus());
|
|
274
276
|
envCmd.command('setup').description('Install all Python libraries + system tools').action(async () => { await installAll(); });
|
|
275
277
|
envCmd.command('python').description('Show Python 3.12 install guide for your platform').action(() => showPythonInstallGuide());
|
|
276
278
|
envCmd.action(() => showStatus());
|
|
277
279
|
}
|
|
278
|
-
// Lightweight Python 3.12 install guide for Selection mode (no
|
|
280
|
+
// Lightweight Python 3.12 install guide for Selection mode (no 110-tool check).
|
|
279
281
|
// Detects distro on Linux so contestants get the right command the first time.
|
|
280
282
|
function showPythonInstallGuide() {
|
|
281
283
|
const os = platform();
|
|
@@ -405,7 +407,7 @@ function showStatus() {
|
|
|
405
407
|
console.log(chalk.gray(' You need these for most challenges'));
|
|
406
408
|
console.log(chalk.yellow(' Recommended') + chalk.gray(' pycryptodome, beautifulsoup4, scapy, sympy'));
|
|
407
409
|
console.log(chalk.gray(' Covers Web, Crypto, and Forensics'));
|
|
408
|
-
console.log(chalk.gray(' Full (
|
|
410
|
+
console.log(chalk.gray(' Full (110) All tools for every category'));
|
|
409
411
|
console.log();
|
|
410
412
|
console.log(chalk.gray(' Missing tools? Run ') + chalk.bold.cyan('env setup') + chalk.gray(' to install everything.'));
|
|
411
413
|
console.log(chalk.gray(' ─────────────────────────────────────────────'));
|
|
@@ -502,7 +504,7 @@ function showStatus() {
|
|
|
502
504
|
const total = installed + missing;
|
|
503
505
|
console.log();
|
|
504
506
|
console.log(chalk.gray(' ─────────────────────────────────────────────'));
|
|
505
|
-
console.log(` ${chalk.green(`✓ ${installed}/${total}`)} ${missing > 0 ? chalk.red(`✗ ${missing} missing`) : chalk.green('All
|
|
507
|
+
console.log(` ${chalk.green(`✓ ${installed}/${total}`)} ${missing > 0 ? chalk.red(`✗ ${missing} missing`) : chalk.green('All 110 ready!')}`);
|
|
506
508
|
if (missing > 0) {
|
|
507
509
|
console.log(chalk.gray(' Install everything: ') + chalk.white('env setup'));
|
|
508
510
|
}
|
package/dist/commands/exam.js
CHANGED
|
@@ -101,7 +101,7 @@ async function playDemoIntro() {
|
|
|
101
101
|
await waitOrSkip(1500);
|
|
102
102
|
if (skipped)
|
|
103
103
|
return;
|
|
104
|
-
console.log(chalk.gray(' ·
|
|
104
|
+
console.log(chalk.gray(' · 110 CTF tools pre-configured'));
|
|
105
105
|
await waitOrSkip(400);
|
|
106
106
|
if (skipped)
|
|
107
107
|
return;
|
package/dist/repl.js
CHANGED
|
@@ -245,7 +245,7 @@ export async function startRepl(program, resumeMode) {
|
|
|
245
245
|
console.log(chalk.bold.white(' What Makes ICOA Different'));
|
|
246
246
|
console.log(chalk.gray(' · AI-native AI teammate, AI adversary, AI translation'));
|
|
247
247
|
console.log(chalk.gray(' · CLI OS Complete competition environment in terminal'));
|
|
248
|
-
console.log(chalk.gray(' ·
|
|
248
|
+
console.log(chalk.gray(' · 110 tools pwntools, z3, gdb, nmap, sleuthkit... pre-configured'));
|
|
249
249
|
console.log(chalk.gray(' · Global scale 15,000+ concurrent exams · 15 languages'));
|
|
250
250
|
console.log();
|
|
251
251
|
console.log(chalk.bold.white(' Competition Format'));
|