LDP.exe 是直通 LDAP 协议栈的底层探针,需以域管理员身份运行、完成简单绑定、加载 Deleted Objects 控制三步基础准备;可查看/修改底层属性,但不自动校验逻辑,须严格遵循 Schema、大小写、类型等规则。
用 ldp.exe 深度探测和修改 ad 底层属性,关键不在“能不能点”,而在“是否满足前提、是否符合 schema、是否绕过隐藏限制”。它不是图形化管理工具的替代品,而是直通 ldap 协议栈的探针——能看见、能写入、但不自动校验逻辑合理性。
必须先完成的三步基础准备
没做完这三项,后续所有操作都可能静默失败或报错:
- 以域管理员身份运行:右键 ldp.exe → “以管理员身份运行”,否则绑定后无权读取高权限属性(如 msDS-UserPasswordExpiryTimeComputed)或触发 dbdump
- 本地连接 + 简单绑定:Connection → Connect 填 DC 的 FQDN 和端口 389;再 Connection → Bind,选 Simple bind,输入 DOMAIN\Administrator 及密码;SSL 不勾选(除非明确启用 LDAPS 且证书可信)
- 加载 Deleted Objects 控制(如需恢复):Options → Controls → Load → Return deleted objects → OK;否则在 Tree 中看不到 CN=Deleted Objects 容器
探测底层属性的实用技巧
默认 Properties 窗口只显示常用字段,真正有用的底层字段(如冲突对象标记、复制元数据、内部计数器)需要主动调出:
- 查看全部属性:右键对象 → Properties → 勾选 Show all attributes;注意 unicodePwd、ntPwdHistory 等安全敏感属性始终为空,这是 AD 强制限制,非工具问题
- 精准过滤指定字段:Browse → Search → Filter 输入 (objectClass=*) → 勾选 Extended → Return only these attributes → 在框中填逗号分隔的字段名,例如:lastLogonTimestamp,msDS-LastKnownRDN,whenChanged,usnChanged
- 识别时间戳真实值:lastLogon 是单 DC 值,不可跨控器比对;accountExpires 和 pwdLastSet 是 100 纳秒单位的大整数,LDP 不自动换算,需配合 PowerShell 解析(如 [datetime]::FromFileTime(133245678900000000))
安全修改底层字段的操作要点
Modify → Modify… 看似简单,但属性名拼写、值类型、Schema 规则三者任一出错都会导致 0x57(Invalid parameter)或 0x2093(链接表冲突)错误:
- 属性名严格区分大小写且不可空格:填 mail,不能是 Email 或 mail (前后带空格);批量修改时从 Excel 复制要粘贴到记事本再中转,避免不可见字符
- 数值型字段必须输数字,非字符串:禁用账户设 userAccountControl = 514,不是 "514";启用则为 512;设密码永不过期是加 0x10000(即 65536),需用十进制输入
- 恢复误删对象需两步原子操作:先删 isDeleted 属性(Operation = Delete,Values 空),再 Replace distinguishedName 为原始 DN;缺一不可,顺序不能颠倒
触发在线数据库快照(dbdump)查内核状态
当遇到 CNF 冲突、SPN 异常、或事件 ID 1645 报错时,需直接查看 NTDS.dit 运行时内存映像:
- 仅限本地连接的企业管理员执行:Connection → Connect → 选本机 DC 主机名,端口 389,再 Bind 用 Enterprise Admin 账户
- 设置 dumpDatabase 属性:Browse → Modify → Attribute 填 dumpDatabase → Value 填空格分隔的扩展字段,例如:name ncname objectclass objectguid instancetype
- 执行并定位输出:点 Enter → 点 Extended → Run;生成 %systemroot%\NTDS\Ntds.dmp 文本文件,用记事本打开,搜索 GUID 或 CNF 字样定位冲突条目










