【发布时间】:2012-03-06 21:44:56
【问题描述】:
好的。所以我试图找到一种方法来避免在我的项目中包含 ActiveD,因为我无法让 dll 出现在安装程序中。拥有它的唯一原因是将 pwdLastSet 转换为 LongInteger。
我找到了一个未记录的替代方案。测试时,它要么死机,要么关机 429.49673 秒。我不知道为什么,有人知道吗? (我测试的 20/49 人是 429.49673 秒)。
UPDATE:看起来好像是 LowPart 为负数时发生的。
代码:
private static string DateTest() {
return DateTest(Environment.UserName);
}
private static string DateTest(string userName) {
userName = userName.Trim();
DateTime hacked, normal;
using (DirectorySearcher ds = new DirectorySearcher()) {
ds.SearchScope = SearchScope.Subtree;
ds.PropertiesToLoad.Add("distinguishedName");
ds.PropertiesToLoad.Add("pwdLastSet");
ds.PageSize = 1;
ds.ServerPageTimeLimit = TimeSpan.FromSeconds(2);
ds.Filter = string.Format("(&(objectCategory=user)(sAMAccountName={0}))", userName);
SearchResult sr = ds.FindOne();
hacked = DateTime.FromFileTime((long)sr.Properties["pwdLastSet"][0]);
using (DirectoryEntry user = sr.GetDirectoryEntry()) {
var value = user.Properties["pwdLastSet"][0] as ActiveDs.LargeInteger;
var longValue = (((long)value.HighPart) << 32) + (long)value.LowPart;
normal = DateTime.FromFileTime(longValue);
}
}
return string.Format("{3} - Difference: {0:0.0} seconds. Established Method returns: {1}. Hacked method returns: {2}",
hacked.Subtract(normal).TotalSeconds, normal, hacked, userName);
}
}
参考文献:
- Active DS 类型库
- System.DirectoryServices
【问题讨论】:
-
超过或低于 429 秒?你把它比作什么?
-
如果 LowPart 为负数,那么如果您使用获取它的标准方法选择它,那么我正在做的黑客方式是在您获得它的时间之后 429.49673 秒。如果 LowPart 是肯定的,那么被破解的方法似乎与标准方法的时间相同。
标签: c# active-directory