具体内容

最近在研究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,
        pbData->pb,
        pdwDataLen,
        dwFlags);

2.2、termutil.c

分别在函数“DeferredTSNotify”和“MultiUserLogonAttempt”增加变量“BOOLEAN bRes;”

BOOLEAN bRes;

然后在函数“DeferredTSNotify”里找到以下代码

if (!_WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(g_TSNotifyData.UserToken),
            g_TSNotifyData.UserToken,
            g_TSNotifyData.DomainName,
            g_TSNotifyData.UserName,
            L"",
            0,
            &g_pTerminals->MuGlobals.UserConfig))

并修改成以下这样(也是因为实现代码的函数参数定义与头文件不一致)

if (!_WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(g_TSNotifyData.UserToken),
            g_TSNotifyData.UserToken,
            g_TSNotifyData.DomainName,
            g_TSNotifyData.UserName,
            L"",
            0,
            &g_pTerminals->MuGlobals.UserConfig,&bRes))

再在函数“MultiUserLogonAttempt”找到以下代码

if (!IsAppServer()) {
        WinStaResult = _WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(hToken), hToken, pMprInfo->pszDomain,
            pMprInfo->pszUserName, L"", 0, &pTerm->MuGlobals.UserConfig);
    } else {
        WinStaResult = _WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(hToken), hToken, pMprInfo->pszDomain,
            pMprInfo->pszUserName, pMprInfo->pszPassword, 0, &pTerm->MuGlobals.UserConfig);
    }

并修改成这样

if (!IsAppServer()) {
        WinStaResult = _WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(hToken), hToken, pMprInfo->pszDomain,
            pMprInfo->pszUserName, L"", 0, &pTerm->MuGlobals.UserConfig,&bRes);
    } else {
        WinStaResult = _WinStationNotifyLogon(
            (BOOLEAN)TestTokenForAdmin(hToken), hToken, pMprInfo->pszDomain,
            pMprInfo->pszUserName, pMprInfo->pszPassword, 0, &pTerm->MuGlobals.UserConfig,&bRes);
    }

2.3、win31mig.c

这里主要是处理win31和win9x升级到xp的登录问题,应该没有人这么做了,直接屏蔽算了别折腾啦!找到以下两个函数

INT_PTR WINAPI
Win31MigrationDlgProc(
    HWND    hDlg,
    UINT    message,
    WPARAM  wParam,
    LPARAM  lParam
    )

BOOL
Windows31Migration(
    PTERMINAL pTerm
    )

直接返回就好啦!

return FALSE;

2.4、winlogon.c

在函数“MiscInitialization”内找到以下代码

if (!IsWin9xUpgrade()) {
        //
        // Check to see if there is any WIN.INI or REG.DAT to migrate into
        // Windows/NT registry.
        //
        // This code is skipped when the previous OS was Win9x.
        //

Win31MigrationFlags = QueryWindows31FilesMigration( Win31SystemStartEvent );
        if (Win31MigrationFlags != 0) {
            SynchronizeWindows31FilesAndWindowsNTRegistry( Win31SystemStartEvent,
                                                           Win31MigrationFlags,
                                                           NULL,
                                                           NULL
                                                         );
            InitSystemFontInfo();
        }
    }

直接把它注释掉就好啦!不处理win31升级的问题(主要是函数“QueryWindows31FilesMigration”实在找不到办法破解出来)。

2.5、wlx.c

重点来啦!其实我们要找的wpa激活相关的代码就在这里。在函数“DoStartShell”里面找以下代码

if (FAILED(sub_1049CA1(
                pWS->hdeskWinlogon,
                pWS->hdeskApplication,
                szDesktop,
                pWS->UserProcessData.pEnvironment,
                pWS->UserProcessData.UserToken,
                pTerm->hwndSAS,
                TRUE,
                FALSE,
                &dwDaysForActivate,
                &dwDaysForEval,
                pWlxResult)))

这个“sub_1049CA1”是wpa相关dll的函数动态内存地址(我还没有找到是对应那个dll的函数),把它注释掉,不要执行就不会进行激活验证了。然后记得把激活成功后,后续的登录流程代码继续执行

sub_10432CC(978, 1);
                sub_10432CC(977, 1);
                KillTimer(pTerm->hwndSAS, 977);

以上都修改完成后,就可以顺利编译成功“winlogon.exe”。我亲测,可以完美登录,只要你安装的时候有正确的cdkey,运行了2个小时也不会有提示激活。


PS

下一步的研究是最。。最。。大的工作量!把E文版翻译编译成中文版的3790。感兴趣的伙伴们可以一起参与,当然这是没有报酬的 ^_^。有感兴趣的伙伴们请留言或发邮件“2098310613@qq.com”联系我!

nt5src去除激活的winlogon相关推荐

  1. wordpress登陆注册 去除激活邮件

    一,wordpress 邮件激活登陆注册插件:Cimy Swift SMTP. 二,由于国内qq邮箱等激活邮件出现<>点击后跳转提示错误.       因此去除激活邮件<> 1 ...

  2. 在javascript中检查相等性的正确方法是什么

    In JavaScript, you can check the equality of any two objects using == or ===. Both the operators che ...

  3. 如何挂载另一个lvm硬盘

    由于测试导致系统启动不了,需要将系统中的数据拷贝出来,所以想到将磁盘挂载到另一个能用的系统中进行拷贝,但是由于创建的系统都是用默认的方式创建的,所以一般的系统盘都是由两个分区组成,例如/dev/sda ...

  4. SAP License:PS中的成本控制

    在SAP的PS模块中,项目成本控制是由一个叫"可用性控制"(Availability control)的系统状态控制的,该状态的代码是AC**. 该状态可以在输入项目预算时候激活, ...

  5. C++程序屏蔽windows2008系统安全界面(ctrl+alt+delete热键)

    win7,win8系统与winxp系统不一样,ctrl+alt+delete热键会打开一个安全界面,而不仅仅是打开任务管理系统,而安全界面是由进程winlogon.exe来控件的,就是说,在按下热键的 ...

  6. 艾滋病/HIV最新研究成果进展(2021年11月)

    推荐阅读:<细胞治疗.基因编辑.生物制药等各领域最新研究进展消息合集> 根据中商产业研究统计数据,中国抗艾滋病治疗药物市场规模已从2013年的7.9亿元增至2018年的20.2亿元,预计2 ...

  7. 【visum工作笔记】之八

    基于上节提到的关于不同版本之间visum的不同特性,其中很多都是新功能的增加,界面的优化以及原本bug的修复.而其中COM一个很明显的,而又常用的东西改变了,导致我花了很长时间才解决了这个问题. 1. ...

  8. 服务器因为断电启动不了

    1.系统启动不起来,主要原因是关机的时候没有停止服务,直接相当于断电 系统启动的时候进度条的时候会报错内存溢出. 1.1首先进入单用户模式 进入控制台倒计时的时候按e–>e–>enter– ...

  9. win10去除右下角激活水印

    1.以win10专业版为例,鼠标右键点击开始图标,选择[windows powershell(管理员)],或者命令提示符管理员: 2.打开命令窗口,复制这个命令slmgr /ipk W269N-WFG ...

最新文章

  1. 人工智能在牙科医疗领域是一片蓝海
  2. 关于C#值类型,引用类型,值传递,引用传递
  3. 运行 vue 报node错
  4. java爬虫之正则表达式
  5. Error creating bean with name 'adminUserController': Injection of autowired dependencies failed;
  6. CM: UPDATE_PAYLOAD_FROM_ADDINSCH
  7. 作者:董西松,男,博士,现任中国科学院自动化研究所助理研究员。
  8. (10)System Verilog 虚方法
  9. Android中下载编译Volley
  10. 常见Linux命令(非文件操作)
  11. OpenDaylight你不可不知的十大问题——OpenDaylight是什么?
  12. jenkins连接Linux
  13. 异步社区本周新上电子书
  14. c语言编写 程序 闰年,C语言计算闰年程序
  15. 3种顺序排序方法。简单排序是指时间复杂度为O(n^2)的排序方法。
  16. 【diannaoxitong】word打不开或发送错误解决办法
  17. windows虚机使用IIS服务搭建ftp
  18. linux桌面分辨率太高,将Ubuntu调整到高DPI分辨率屏幕
  19. 4.千万日活的系统如何统计UV?
  20. vector多维向量初始化等操作

热门文章

  1. 使用两台服务器做负载均衡(nginx版)
  2. 为什么说“汉语难学”?
  3. 几种客户开发的方法及分析!
  4. 金山毒霸安全预警:不安全的dll文件导致Windows被***
  5. 圣诞节贺卡计算机基础知识,圣诞节贺卡的优美句子大全
  6. python蜡烛图预测_【Python量化投资】系列之SVR预测第二天开盘趋势和股价的正负统计分析(附代码)...
  7. 简单四步提升Pinterest有效销售
  8. C/C++后端实习经验大礼包
  9. i3 10100性能参数 i310100怎么样
  10. linux如何从回收站恢复文件在哪里找,回收站文件恢复软件到哪找