实现自定义Windows身份验证包

时间:2010-10-13 04:35:46

标签: c++ windows winapi local-security-authority

我正在为Windows 7的MSV1_0构建自定义身份验证子包。我已经使用了Windows SDK中的msvsubauth示例,我对我遇到的一些问题有两个问题:

  1. 当我正在尝试确保调用例程get并将注册表中的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文件夹并重新启动它。有没有更简单的方法呢?

  3. 提前感谢!

2 个答案:

答案 0 :(得分:3)

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

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

  1. 将真实AP从已知位置复制到临时位置。
  2. LoadLibrary表示DLL,GetProcAddress的所有内容,并将收到的任何调用转发给新加载的DLL。
  3. 注意从
  4. 复制原始AP的目录中的更改
  5. 发生更改时(如果您的AP发生变化)FreeLibrary并转到第2步
  6. 但是你需要紧紧抓住开发目标上发生的事情,因为在处理来自多线程的请求时处理dll开关可能会成为你想要解决的更糟糕的噩梦。

    LogonUI.exe每次都会启动一个新实例,但LSASS.exe很长时间。

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

答案 1 :(得分:1)

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

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

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

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