Как обойти ввод пин-кода в всплывающие окно Windows Hello?

Поддержка
  • Думаю у многих когда-то будет такая проблема (но может кто-то уже знает) - как обойти ввод пин-кода (пароля) в всплывающие окно Windows Hello?
    432ed095-a19e-4e0c-9a2d-1932ee01adca-image.png

    Обычный сайт вызывает это окно (он хочет хранить важную инфу на компе). Хочу сделать эту тему ответом для всех (а то других таких тем нет).

    Вот кстати что сайт вызывал-бы на разных устройствах:
    iOS + MacOS - iCloud Keychain
    Android - Google Password Manager
    Windows - Windows Hello

    Щас пока сам ищу как, а то создавать какой-то exe который будет вводить пароль это такой костылище (а сам ввод пароля в Windows Hello вроде не отключишь)

  • Вот на py можно использовать в BAS через бесплатный python модуль или переписать его под бесконечную работу и вручную запустить не через BAS

    from pywinauto import Application
    import time
    
    # Подключаемся к приложению
    app = Application(backend="uia").connect(path="CredentialUIBroker.exe")
    
    # Найдём окно
    window = app.window(title_re=".*")  # Подключение по регулярному выражению для окна
    
    # Сразу минимизируем окно, чтобы оно не перехватывало фокус
    window.minimize()
    
    # Ищем поле ввода PIN-кода (элемент типа "Edit")
    pin_input = window.child_window(control_type="Edit")
    if pin_input.exists():
        pin_input.set_text("ВАШ_КОД_WINDOWS_ПОЛЬЗОВАТЕЛЯ")
    
    # Ждем пару секунд
    time.sleep(2)
    
  • This post is deleted!
  • Вот итоговый вариант который я юзаю

    import sys
    import time
    import psutil
    from pywinauto import Application
    
    def is_process_running(process_name):
        for proc in psutil.process_iter(['name']):
            if proc.info['name'] == process_name:
                return True
        return False
    
    def main():
        # Ожидание когда окно запустится
        while not is_process_running("CredentialUIBroker.exe"):
            time.sleep(1)
    
        # После запуска подключаемся и отправляем в фон
        app = Application(backend="uia").connect(path="CredentialUIBroker.exe")
        window = app.window(title_re=".*")
        window.minimize()
    
        # Ищем поле ввода PIN-кода (элемент типа "Edit")
        pin_input = window.child_window(control_type="Edit")
        if pin_input.exists():
            pin_input.set_text("ВАШ_WINDOWS_ПАРОЛЬ")
    
        # Ждем пару секунд
        time.sleep(2)
    
    if __name__ == "__main__":
        main()
    
  • @SatoshiMoto

    Нужны блокировки(mutex) чтобы в много-поточном режиме все работало.

  • @SatoshiMoto можешь кинуть шаблон бас скрипта, который у тебя работает? У меня ни в какую не хочет взаимодействовать с этим окном. чатгпт говорит, что оно защищено от автоматизированного ввода и такой скрипт не будет работать.

    UPD. работает с виндовс хелло в гугл хром, но не работает с окном виндовс хелло, что создается в басе

  • @cruz Смотри замени пароль ниже на свой, установи библиотеки (в py библиотеки доступны всему пк удобно). И просто запусти код не через BAS (я в Visual Studio Code) он будет каждые 5 сек (можешь уменьшить) проверять окно и как только оно появится мгновенно введет пароль (даже мешать тебе визуально не будет), работает бесконечно пока консоль не оффнешь (но если что одновременно можно открыть только 1 Windows Hello окно - тоесть если у тебя в BAS мультипоток ты сам должен сделать чтоб разные потоки одновременно не открывали Windows Hello, а с задержкой в пару сек)

    import sys
    import time
    import psutil
    from pywinauto import Application
    
    def is_process_running(process_name):
        for proc in psutil.process_iter(['name']):
            if proc.info['name'] == process_name:
                return True
        return False
    
    def main():
        pin_code = "ВАШ_WINDOWS_ПАРОЛЬ"
        
        while True:
            if is_process_running("CredentialUIBroker.exe"):
                try:
                    app = Application(backend="uia").connect(path="CredentialUIBroker.exe")
                    window = app.window(title_re=".*")
                    window.minimize()
                    
                    pin_input = window.child_window(control_type="Edit")
                    if pin_input.exists():
                        pin_input.set_text(pin_code)
                except Exception as e:
                    print(f"Ошибка: {e}")
    
            time.sleep(5)  # Проверять процесс каждые 5 секунд
    
    if __name__ == "__main__":
        main()
    
  • Если что я нашел решение для всех (расширение написал за 2 дня (40 часов, потно так-то было), оно перехватывает WebAuthn запросы у браузера, подписывает, возвращает сайту) в итоге до windows ... они не доходят, работает идеально (но бесплатно скинуть как минимум пока не готов)

  • @SatoshiMoto И правильно считает и каждый кто Любит разработку должен дойти сам до этого и ещё умней тем самым будет.

  • Почти год прошел - вот держите WebAuthn_spoof_my_browser_extension.rar расширение (если кому-то нужно) оно автоматически подписывает WebAuthn запросы, поддерживает все существующие 3 типа подписи, сохраняет ключ (тот ключ который Windows хранит не удаляя в сверх защищенном TPM) в LocalStorage поле webauthn_credentials текущего сайта на котором работаете (если хотите использовать позже webauthn без регистрации нового ключа - нужно достать ключ из LocalStorage и сохранить, ну и собственно потом в будущем нужно добавить ключ обратно в LocalStorage, или просто использовать BAS как профили - расширение всегда использует ключ иза хранилища текущего сайта, которое при использовании профилей не удаляется)

  • 0 Votes
    2 Posts
    367 Views
  • 1 Votes
    5 Posts
    864 Views
  • 0 Votes
    10 Posts
    1257 Views
  • 0 Votes
    3 Posts
    599 Views
  • 0 Votes
    4 Posts
    1473 Views