5

我正在为 Windows 7 的 MSV1_0 构建一个自定义身份验证子包。我使用了 Windows SDK 中的 msvsubauth 示例,我有 2 个关于我面临的一些问题的问题:

  1. 当我试图确保调用例程并将注册表中的 Auth0 属性设置为我的包并在创建文件的 Msv1_0SubAuthenticationRoutine 末尾添加一个简单的代码时:

    //
    // Cleanup up before returning.
    //
    
    
    Cleanup:
    hTestFile = CreateFile(
                  TEXT("C:\\lsa\\lsa.txt"), 
                  GENERIC_READ|GENERIC_WRITE, 0, 
                  NULL, CREATE_ALWAYS, 
                  FILE_ATTRIBUTE_NORMAL, NULL);
    
    
    if(hTestFile != INVALID_HANDLE_VALUE) {
          CloseHandle(hTestFile);
    }
    
    
    return Status;
    
    
    }  // Msv1_0SubAuthenticationRoutine
    

    显然,该程序包被调用,因为当我输入密码时,我从 Windows 收到一条错误消息“参数不正确”,这是一个好兆头。但为什么我会收到这个错误?当从单独的 .exe 文件执行完全相同的代码时,它会完美运行并创建测试文本文件。我已经检查了权限并为“每个人”设置了“完全控制”。有任何想法吗?SDK 并没有具体提到 LSA 为 auth 包中的代码创建了什么样的隔离。

  2. 第二个问题是测试AP。目前,每次更改我都会重建库,将其复制到测试 VM,然后复制到 System32 文件夹并重新启动它。有没有更简单的方法来做到这一点?

预先感谢!

4

2 回答 2

3

在 Winlogon 和 LSASS 中进行调试是最耗时的调试。

为了简化调试,您可以编写一个代理 AP 来导出相同的功能。加载时,您 proxy_ap 会

  1. 将真实 AP 从已知位置复制到临时位置。
  2. LoadLibrary 该 DLL、GetProcAddress 的所有内容,并将它收到的任何调用转发到该新加载的 DLL。
  3. 注意复制原始 AP 的目录中的更改
  4. 发生更改时(如果您的 AP 更改)FreeLibrary 并转到第 2 步

但是您需要牢牢把握您的开发目标上发生的事情,因为在处理来自多个线程的请求时处理 dll 开关可能会成为您试图解决的更糟糕的噩梦。

LogonUI.exe 每次都会启动一个新实例,但 LSASS.exe 是长期存在的。

+查看 CVSNT 源代码 ( http://cvsnt.sourcearchive.com/ )。他们有一个相当不错的 AP 来实现 su。psexec -s使用(来自 Microsoft/SysInternals pstools 套件)在本地系统帐户中运行示例

于 2011-05-31T19:41:21.357 回答
1

也许您的问题是每个人都只包括经过身份验证的用户?这只是一个猜测。

我建议您使用 Process Monitor 来监控 Access Denied 消息或您的路径。它非常适合调试各种权限/路径问题。

如果您在“解锁工作站”或“更改密码”屏幕上遇到问题,并且它不会阻止您登录,这应该很容易做到 - 将其设置为运行,重现问题,重新登录并嘿presto。

否则,您可能不得不诉诸技巧,例如仅对某些用户帐户执行该代码路径,在第 N 次尝试等。

于 2011-04-02T06:43:08.247 回答