ИИ помощникам на IT собесах конец! Или нет?

Привет! Я разработчик ИИ-помощника ХакСобеса by ilovehackit

В этой статье мы пройдемся по ключевым тезисам Античита против ИИ‑помощников на IT собеседованиях, а также заглянем в исходный код, разбираясь как оно устроено под капотом

Наливайте чаю, будет интересно!

Дисклеймер

Материал публикуется в исследовательских и образовательных целях. Я не призываю обходить проверки безопасности и не поддерживаю противоправные действия. Все примеры приведены для повышения осведомлённости и улучшения практик безопасности

Общее впечатление по исходному коду

Перво, что бросается в глаза - софт написан с помощью вайб‑кодинга, потому что только Ai генерирует эмодзи в console.log, а по проекту они практически везде

console.error('❌ find-process failed:', error);
console.log('🛑 Stopping enhanced process tracking...');
console.log('⚠️ Enhanced process tracking already active');
console.error('❌ Failed to take process snapshot:', error);

При этом комменты к коду почему‑то на русском?!

// Определяем путь к HTML файлу в зависимости от режима (dev/prod)
// Проверяем, является ли ошибка retryable
// Последняя попытка не удалась
// Не retryable ошибка, не пытаемся снова
// Дополнительные обработчики событий
// Обработка необработанных исключений в renderer процессе

Тезис “Античит отслеживает скриншоты”

Вот сам код - как софт это отслеживает

if (process.platform === 'darwin') {
  // macOS shortcuts
  globalShortcut.register('CommandOrControl+Shift+3', () => {
    this.addScreenshotAttempt();
  });

  globalShortcut.register('CommandOrControl+Shift+4', () => {
    this.addScreenshotAttempt();
  });

  globalShortcut.register('CommandOrControl+Shift+5', () => {
    this.addScreenshotAttempt();
  });
} else {
  // Windows shortcuts
  globalShortcut.register('PrintScreen', () => {
    this.addScreenshotAttempt();
  });

  globalShortcut.register('Alt+PrintScreen', () => {
    this.addScreenshotAttempt();
  });

  globalShortcut.register('CommandOrControl+PrintScreen', () => {
    this.addScreenshotAttempt();
  });

  globalShortcut.register('CommandOrControl+Shift+S', () => {
    this.addScreenshotAttempt();
  });
}

Достаточно просто переназначить на любую клавишу, которая не совпадает с этим списком, и проверка будет успешно пройдена

Тезис “Отслеживание движений мышки”

Код отслеживания

private startMouseTracking(): void {
  console.log('🖱️ Starting mouse tracking...');

  this.mouseInterval = setInterval(() => {
    if (!this.isTracking) return;

    try {
      const mousePos = screen.getCursorScreenPoint();
      this.addMouseMoveEvent({ x: mousePos.x, y: mousePos.y });
    } catch (error) {
      console.error('❌ Error getting mouse position:', error);
      console.error('This might be due to macOS accessibility permissions');
    }
  }, 500);
}

Каждые 500ms фиксируются координаты расположения курсора. Любой ИИ‑помощник, включая ХакСобес, не требует использования мыши

Тезис “Отслеживание всех действий кандидата"

Давайте заглянем в исходный код

public setupMouseClickTracking(browserWindow: BrowserWindow): void {
  const mouseClickScript = `
    ...
    document.addEventListener('keydown', (e) => {
      console.log('Key down detected:', e.key);
      window.electronAPI.activityTracker.keyDown({code: e.code, shift: e.shiftKey, ctrl: e.ctrlKey, alt: e.altKey, meta: e.metaKey})
        .then(() => console.log('✅ Key down sent to main process'))
        .catch(err => console.error('❌ Failed to send key down:', err));
    });
    ...
  `;
  browserWindow.webContents
    .executeJavaScript(mouseClickScript)
    .catch((error) => {
      console.error('Failed to inject mouse click tracking:', error);
    });
}

Идея в том, что после открытия ссылки во внутреннем браузере, происходит инъекция JS‑кода в страницу, который как раз и отслеживает нажатия на клавиши и клики. Простой способ обойти - это запатчить клиента и закомментировать этот код

Тезис “Отслеживание, что софт запущен в VM и даже виртуалка не поможет”

Смотрим на исходный код

const allData = await si.getStaticData();

const stringData = JSON.stringify({
  version: allData.version,
  system: allData.system,
  bios: allData.bios,
  baseboard: allData.baseboard,
  chassis: allData.chassis,
  os: allData.os,
  uuid: allData.uuid,
  cpu: allData.cpu,
  graphics: allData.graphics,
  net: allData.net,
  memLayout: allData.memLayout,
  diskLayout: allData.diskLayout,
});

if (stringData.includes('virtualbox"') || stringData.includes('vbox')) {
  isVirtual = true;
  virtualHost = 'VirtualBox';
} else if (stringData.includes('vmware')) {
  isVirtual = true;
  virtualHost = 'VMware';
} else if (stringData.includes('hyperv')) {
  isVirtual = true;
  virtualHost = 'Hyper-V';
} else if (stringData.includes('kvm')) {
  isVirtual = true;
  virtualHost = 'KVM';
} else if (stringData.includes('qemu')) {
  isVirtual = true;
  virtualHost = 'QEMU';
}

Берем любой продвинутый VM, редактируем конфигурационный файл и удаляем триггерные строки, вуаля, теперь мы запустились не в VM. Ну или просто находим такую VM, которой нет в этом списке. А еще можно взять любой Open Source, отредактировать его название и создатель этого античита никогда не сможет найти вас!

Но это не все! Есть еще второй способ обнаружения виртуальной машины - по выделенным ресурсам

// Check for suspicious parameters
const isSuspiciousRAM = systemResources && systemResources.ramGB <= 2;
const isSuspiciousDisk =
  systemResources && systemResources.diskSpaceGB <= 100;
const isSuspiciousCores = systemResources && systemResources.cpuCores <= 3;
const isSuspiciousMonitors = displayCount >= 2;

const hasSuspiciousSpecs =
  isSuspiciousRAM ||
  isSuspiciousDisk ||
  isSuspiciousCores ||
  isSuspiciousMonitors;

Чек-лист обхода проверок:

  1. Выделить 2+ GB RAM
  2. Выделить 100+ GB Диска
  3. Выделить 3+ CPU CORE
  4. Не использовать второй монитор

Тезис “Отслеживание запущенных ИИ‑помощников”

Исходный код

private isSuspiciousProcess(name: string, cmd: string, bin: string): boolean {
  return suspiciousProcesses.some((pattern) => {
    if (pattern.length > 3) {
      return (
        name.toLowerCase().includes(pattern) ||
        cmd.toLowerCase().includes(pattern) ||
        bin?.toLowerCase().includes(pattern)
      );
    }
    return (
      name.toLowerCase() === pattern ||
      cmd.toLowerCase() === pattern ||
      bin?.toLowerCase() === pattern
    );
  });
}

Просто поиск по названию процесса из захардкоженного списка

export const suspiciousProcesses = [
  // AI assistants and chatbots
  'хаксобес',
  'ilovehackit',
  'chatgpt',
  'claude',
  'bard',
  'copilot',
  'cluely',
  ...
];

Переименовать процесс что на macOS, что на Windows - несложно

Безопасность Античита

Видимо разработчик пренебрёг практиками безопасности и превратил софт в потенциально уязвимый клиентский браузер с хаотичным включением/выключением критичных флагов

Сейчас мы разберем что тут не так:

app.commandLine.appendSwitch('--ignore-certificate-errors');
app.commandLine.appendSwitch('--ignore-ssl-errors');
app.commandLine.appendSwitch('--ignore-certificate-errors-spki-list');
app.commandLine.appendSwitch('--disable-web-security');
app.commandLine.appendSwitch('--allow-running-insecure-content');

Зачем нам безопасность внутреннего браузера? Давайте игнорить все ошибки! Игнорим ошибки SSL, игнорим ошибки сертификатов, разрешаем без спроса выполняться небезопасному коду! Безопасность - зачем, выключаем?! Шикарно!

Потенциальная уязвимость софта

Есть вот такой интересный код

browserWindow.webContents.setWindowOpenHandler(({ url }) => {
  if (url.startsWith('zoomus://')) {
    return { action: 'deny' };
  }
  shell.openExternal(url);
  return { action: 'deny' };
});

Он проверяет, можно ли во внутреннем браузере открыть ссылку. Видим, что запрещаются ТОЛЬКО ссылки с префиксом zoomus://

Есть второй дополняющий код, открывающий доступ ко всем компонентам вашего ПК во внутреннем браузере

session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => {
  const allowedPermissions = ['camera','microphone','notifications','display-capture','media','mediaKeySystem','geolocation','fullscreen','pointerLock'];
  callback(allowedPermissions.includes(permission));
});

Этот кусок кода открывает доступ КО ВСЕМУ пашему ПК во внутреннем браузере

  1. Вашему экрану
  2. Микрофону
  3. Видео-камере
  4. Гео-локации и тд

А теперь сама уязвимость

Вы - интервьюер, притворяетесь крупной компанией, кандидат ставит этот «Античит», вы кидаете ему фишинговую ссылку, он её открывает - и в ваших руках все перечисленные выше данные кандидата

Это иллюстрация риска социальной инженерии + небезопасного софта

В софте есть еще пяток реальных эксплойтов, но их намеренно не буду раскрывать в статье. На всякий случай. Кто знает, всякое может быть в будущем. Раз уж разработчик софта решил взять на себя роль корпоративного героя!

Заключение

Я крайне не рекомендую устанавливать такой софт на свой ПК

А если какие-то компании начали это внедрять и просят поставить - откажитесь: высок риск фишинга или иной социальной инженерии. Оно вам надо?

Путь такого рода софта обречён на провал по простой причине - риски от недобросовестных людей. Сегодня вас попросила поставить этот софт одна компания, а завтра - фишинговый софт от злоумышленника, притворившегося крупным банком (скамер)

Кто будет виноват в этой ситуации?

Кто окажется в проигрыше - ВЫ!

Ну и вторая причина, почему любой такой софт обречен на провал:

Все что на клиенте - можно обойти

Удачи на собеседованиях и подписывайся на ХакСобес в Telegram