最近在研究nt5src代码,一直困惑在激活的问题上。其实,只要有winlogon.exe的源代码就没有问题啦!(废话)
原指南上有两个版本的winlogon:
1、“Winlogon200X_v3c.zip”这个轻松编译完成(需要先编译“win2003_pidgenXP_cracked.zip”),但是这个程序很多bug,登录后配置经常出问题,还有莫名的bug,估计是2000的机制与2003差异太大了。不推荐大家研究它。
2、“ds.zip_decompiled_XPSP1_winlogon.zip”这个是编译不通过的。经过我研究后,终于编译通过,而且经过测试完美的解除了激活的问题。而且这个不需要“win2003_pidgenXP_cracked.zip”。
具体修改过程如下:
1、编译“licensing”目录
先修改目录“ds\security\licensing\explib”下面的文件“sources”,增加include头文件搜素位置
INCLUDES=$(BASE_INC_PATH);$(TERMSRV_INC_PATH); $(SDK_INC_PATH)\crt\stl60;
增加“includes”搜索目录“$(SDK_INC_PATH)\crt\stl60;”(红色字体部分),实际缺少“utility、xutility”文件的搜索位置,该两条文件在目录“public\sdk\inc\crt\stl60”下。
进入到“ds\security\licensing”下,进行编译“build /cZP”
2、编译“winlogon”
在编译“winlogon.exe”前需要修改目录“ds\security\gina\winlogon”下五条文件,修改的地方分别如下:
2.1、sclogon2.c
找到以下几个函数的实现地方
NTSTATUS s_RPC_ScHelperGetProvParam(
handle_t h,
BINDING_CONTEXT BindingContext,
LPCWSTR wszPIN,
DWORD dwParam,
DWORD *pdwDataLen,
OUT_BUFFER1 *pbData,
DWORD dwFlags)
NTSTATUS s_RPC_ScHelperSignMessage(
handle_t h,
BINDING_CONTEXT BindingContext,
LPCWSTR wszPIN,
ULONG Algorithm,
ULONG BufferLength,
BYTE *Buffer,
ULONG *pSignatureLength,
OUT_BUFFER2 *pSignature)
NTSTATUS s_RPC_ScHelperSignPkcsMessage(
handle_t h,
BINDING_CONTEXT BindingContext,
LPCWSTR wszPIN,
LPSTR AlgorithmPszObjId,
DWORD AlgorithmParametersLength,
BYTE *AlgorithmParameters,
DWORD dwSignMessageFlags,
ULONG BufferLength,
BYTE *Buffer,
ULONG *pSignedBufferLength,
OUT_BUFFER2 *pSignedBuffer)
NTSTATUS s_RPC_ScHelperDecryptMessage(
handle_t h,
BINDING_CONTEXT BindingContext,
LPCWSTR wszPIN,
ULONG CipherLength,
BYTE *CipherText,
ULONG *pClearTextLength,
OUT_BUFFER2 *pClearText)
把函数以上函数的定义修改成如下(原来的定义3790头文件函数定义不一致)
NTSTATUS s_RPC_ScHelperGetProvParam(
/* [in] */ handle_t h,
/* [in] */ BINDING_CONTEXT BindingContext,
/* [unique][in] */ LPCWSTR wszPIN,
/* [in] */ BOOL fBindingIsCertAndKey,
/* [in] */ DWORD dwParam,
/* [out][in] */ DWORD *pdwDataLen,
/* [out] */ OUT_BUFFER1 *pbData,
/* [in] */ DWORD dwFlags)
NTSTATUS s_RPC_ScHelperSignMessage(
/* [in] */ handle_t h,
/* [in] */ BINDING_CONTEXT BindingContext,
/* [unique][in] */ LPCWSTR wszPIN,
/* [in] */ BOOL fBindingIsCertAndKey,
/* [in] */ ULONG Algorithm,
/* [in] */ ULONG BufferLength,
/* [size_is][in] */ BYTE *Buffer,
/* [out][in] */ ULONG *pSignatureLength,
/* [out] */ OUT_BUFFER2 *pSignature)
NTSTATUS s_RPC_ScHelperSignPkcsMessage(
/* [in] */ handle_t h,
/* [in] */ BINDING_CONTEXT BindingContext,
/* [unique][in] */ LPCWSTR wszPIN,
/* [in] */ BOOL fBindingIsCertAndKey,
/* [in] */ LPSTR AlgorithmPszObjId,
/* [in] */ DWORD AlgorithmParametersLength,
/* [size_is][unique][in] */ BYTE *AlgorithmParameters,
/* [in] */ DWORD dwSignMessageFlags,
/* [in] */ ULONG BufferLength,
/* [size_is][in] */ BYTE *Buffer,
/* [out][in] */ ULONG *pSignedBufferLength,
/* [out] */ OUT_BUFFER2 *pSignedBuffer)
LONG s_RPC_ScHelperDecryptMessage(
/* [in] */ handle_t h,
/* [in] */ BINDING_CONTEXT BindingContext,
/* [unique][in] */ LPCWSTR wszPIN,
/* [in] */ BOOL fBindingIsCertAndKey,
/* [in] */ ULONG CipherLength,
/* [size_is][in] */ BYTE *CipherText,
/* [out][in] */ ULONG *pClearTextLength,
/* [out] */ OUT_BUFFER2 *pClearText)
它们都是缺少一个参数。再在当前文件,搜素以下代码
Status = ScHelperGetProvParam(
pucPIN,
pContext->pbLogonInfo,
dwParam,
pbData->pb,
pdwDataLen,
dwFlags);
把它修改成以下(也是缺少一个参数)
Status = ScHelperGetProvParam(
pucPIN,
pContext->pbLogonInfo,
0,
dwParam,
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!