Windows で現在ログインしているユーザーの名前とパスワードを取得する API はありますか?
前もって感謝します。
パスワード:いいえ、これはセキュリティ上の理由から保持されません。使用されてから破棄されます。このユーザーの暗号化されたパスワードをレジストリから取得し、十分な権限を与えてから、レインボーテーブルなどを使用して復号化することもできますが、現在の方法では非常にリソースを消費し、時間がかかります。ユーザーにプロンプトを表示する方がはるかに優れています。
または、Novellのようにある種の「シングルサインオン」システムを実装する場合は、GINA(pre-Vista)または資格情報プロバイダー(Vista)のいずれかを介して実装する必要があります。これにより、コードにユーザー名が付与されます。ログイン時のパスワード。パスワードを使用できるのはこのときのみです。
ユーザー名の場合、現在のユーザー名(コードを実行しているユーザー)を取得するのは簡単です。AdvApi32.dllのGetUserName関数がこれを正確に実行します。
サービスとして実行している場合は、「ログインしているユーザー」がいないことを覚えておく必要があります。LocalSystem、NetworkService、SYSTEM、その他のアカウントなど、実際のユーザーに加えて、いつでも複数のユーザーがいます。この記事では、そのためのサンプルコードとドキュメントを提供します。
現在ログインしているユーザーのパスワードを明らかにすることはできないと信じている多くのコメント投稿者については、 mimikatzを使用してそれを行う方法を示す、ログインしているユーザーの平文パスワードをダンプするを参照してください。
mimikatz # privilege::debug
Demande d'ACTIVATION du privilège : SeDebugPrivilege : OK
mimikatz # sekurlsa::logonPasswords full
...
Utilisateur principal : user
Domaine d'authentification : domain
kerberos :
* Utilisateur : user
* Domaine : domain
* Mot de passe : pass
それがどのように行われるかに注意してください、しかしhttp://www.nirsoft.net/utils/network_password_recovery.htmlからの「ネットワークパスワード回復」ツールはいくつかのキャッシュからパスワードを取得するようです。
もしそれが可能であれば、私はそれを大きなセキュリティ上の欠陥と考えています!
暗号化されているため、ユーザーのパスワードを取得することはできません (パスワードを平文で保存しないという標準的な慣行は言うまでもありません)。
ユーザー名を取得するには、 GetUserNameまたはNPGetUserを使用できます。
Windows APIでの認証の詳細については、MSDNを参照してください:http: //msdn.microsoft.com/en-us/library/aa374735 (VS.85).aspx
GetUserName は名前を取得しますが、パスワードは取得できません。これはWindowsが保存するものでもありません.AFAIK-パスワードのハッシュのみです。
達成しようとしていることに応じて (もう少し教えてください..)、ログオンしているユーザーになりすまして、そのユーザーに代わって何かを行うことができます。
re "Network Password Recovery" ツール
Windows (XP まで) は、古いスタイルの lanmanager ネットワーク共有に接続するための、簡単に破れる暗号化を使用して passwd のコピーを保存します。ツールは通常、これに対して考えられるすべてのパスワードを試し、レインボー テーブル (事前に計算された辞書の単語の暗号化バージョン) を使用してこれを高速化します。
XPsp2/3 Vista では、この機能は削除されています。新しい暗号化はクラックするのがはるかに難しく、考えられるすべての値を試すのに何時間もかかります。オンライン サービスでは、多数のマシンで実行して価格に応じた迅速な回答を得ることができます。
元のポスターに答えるには、通常、パスワードを保存して、ユーザーが入力したものと比較しません。入力したパスワードを暗号化 (実際にはハッシュ) して保存します。パスワードを確認するには、ユーザーが入力したものに対して同じ暗号化を実行し、それを比較します。通常、暗号化された形式から実際のパスワードに戻ることは不可能です。
編集ここで間違った質問をしていると思われます-なぜパスワードが必要なのですか、何をいつ確認しようとしていますか?
ユーザー名は GetUserName() で取得できますが、パスワードは取得できません。これは、ダミー 101 のセキュリティに違反します。