实现自定义Windows身份验证包

Kar*_*gha 5 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
    
    Run Code Online (Sandbox Code Playgroud)

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

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

预先感谢!

ixe*_*013 4

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 suite)在本地系统帐户中运行示例