Impacket samedit.py
ローカルの SAM hive にあるユーザーのパスワードハッシュを直接変更します。SYSTEM hive または指定した boot key を使います。
| 項目 | 内容 |
|---|---|
| 実装 | examples/samedit.py |
| カテゴリ | 秘密情報 / DPAPI / レジストリ / ファイル解析 |
| 規模 | 121 行 |
| 配布 | setup.py の scripts=examples/*.py によりスクリプトとしてインストール |
CLI と入力
Section titled “CLI と入力”オプションの最新の定義は python examples/samedit.py -h で確認できます。
| 引数 | 説明 |
|---|---|
user | Name of the user account to replace the password |
sam | SAM hive file to edit |
-password | New password to be set |
-hashes | Replace NTLM hash directly (LM hash is optional) |
-system | SYSTEM hive file containing the bootkey for password encryption |
-bootkey | Bootkey used to encrypt and decrypt SAM passwords |
-debug | Turn DEBUG output ON |
-ts | Adds timestamp to every logging output |
詳細な処理フロー
Section titled “詳細な処理フロー”SAM と SYSTEM/bootkey を開き、LocalOperations が boot key を解決します。SAMHashes が user record/RID を見つけ、password または LM:NT hash を account 固有形式へ暗号化して hive cell を更新します。
仕組みの詳細
Section titled “仕組みの詳細”SAM user record の password field は平文でも単純な NT hash でもなく、boot key、 SAM domain key、user RID を使う層で保護されています。このコマンドは local SAM hive と SYSTEM hive または明示 boot key を開き、既存 user record の 暗号形式/version を確認して新しい hash を同じ形式で書き戻します。
password 入力の場合は LM/NT one-way function を計算し、hash 入力の場合は 指定値を直接 account hash として扱います。その後 RID 由来 key と SAM key で record field を暗号化します。LM hash を無効値にするか、history/長さ field を どう扱うかは Windows version の record layout と整合する必要があります。
in-place edit なので、parse 成功前や record size 確定前に file を更新しては いけません。対象 user の一意性、SAM/SYSTEM の組み合わせ、backup、write 後の 再 parse を確認します。transactional writer ではないため、途中 write failure で hive を壊さないよう更新範囲を最小化することが重要です。
主要な実装要素
Section titled “主要な実装要素”| シンボル | 位置 | 責務を追う入口 |
|---|---|---|
| module-level entry | 1 | トップレベルで引数解析と処理を実行 |
Impacket 内部
Section titled “Impacket 内部”| モジュール | 使用する主な名前 |
|---|---|
impacket | ntlm, version |
impacket.examples | logger |
impacket.examples.secretsdump | LocalOperations, SAMHashes |
出力・副作用・必要権限
Section titled “出力・副作用・必要権限”- 対象の状態を変更する操作があります。変更前に対象名や SID、パスを確認してください。
失敗経路と後始末
Section titled “失敗経路と後始末”- 入力ファイルがない場合、壊れている場合、読み取りが途中で終わる場合、未対応の形式だった場合を区別します。
実装を変更するとき
Section titled “実装を変更するとき”examples.secretsdump.LocalOperations / SAMHashes、impacket.ntlm に依存します。これは破壊的な local file 更新なので、record size、hash 無効化規則、例外時の partial write を重点的にテストします。
- 構文:
python -m py_compile examples/samedit.py - CLI:
python examples/samedit.py -h - このコマンド専用のテストは見つかりません。共有モジュールのテストと、必要に応じて隔離環境での動作確認を選びます。

