不知道现在还有多少人在使用xp,个人感觉像xp之类的系统早就应该退役了。但是相信还有很多人坚守在xp的阵地上,如果是作为一个游戏玩家也会发现很多的游戏已经抛弃了xp了,这里要说的是xp底下的一个小的技巧,说不上什么高深的技术。我提供的也只是这个问题的一个解决方法,当然也可能有别的解决方法,这个也不在本文的探讨范围之内。上面的是正常启动下的windows gina模块,而到了安全模式下不管设不设置这个东西系统都不会调用这个模块来启动自定义认证。
当然了这个东西还是有办法进行处理,让系统来加载自己的gina模块的。有的可能没有想到这个东西该怎么处理,当初这个东西也困扰了我好久,最后才想到既然登录是由winlogon.exe控制的,那干吗不直接从这个东西入手呢。事实证明这个想法是可行的,修改之后的效果:
修改的方法也比较简单,关键代码片段如下:
.text:01031B1A push edi ; nSize
.text:01031B1B push esi ; lpFilename
.text:01031B1C call _WlpInitSideBySide@8 ; WlpInitSideBySide(x,x)
.text:01031B21 mov eax, [ebp+lpParameter]
.text:01031B27 cmp [eax+30h], ebx
.text:01031B2A push edi ; nSize
.text:01031B2B push esi ; lpDst
.text:01031B2C jz short loc_1031B3B; 修改这个跳转
.text:01031B2E push offset aSystemrootSyst ; "%SystemRoot%\\system32\\msgina.dll"
.text:01031B33 call ds:__imp__ExpandEnvironmentStringsW@12 ; ExpandEnvironmentStringsW(x,x,x)
.text:01031B39 jmp short loc_1031B6B
.text:01031B3B ; ---------------------------------------------------------------------------
.text:01031B3B
.text:01031B3B loc_1031B3B: ; CODE XREF: WinMain(x,x,x,x)+4B9j
.text:01031B3B mov edi, offset Default ; "msgina.dll"
.text:01031B40 push edi ; lpDefault
.text:01031B41 push offset aGinadll ; "GinaDll"
.text:01031B46 push offset AppName ; "WINLOGON"
.text:01031B4B call ds:__imp__GetProfileStringW@20 ; GetProfileStringW(x,x,x,x,x)
.text:01031B51 cmp _g_Console, ebx
.text:01031B57 jnz short loc_1031B6B
.text:01031B59 cmp _g_fHelpAssistantSession, ebx
.text:01031B5F jz short loc_1031B6B
.text:01031B61 push edi ; Source
.text:01031B62 push esi ; Dest
.text:01031B63 call ds:__imp__wcscpy
.text:01031B69 pop ecx
.text:01031B6A pop ecx
.text:01031B6B
.text:01031B6B loc_1031B6B: ; CODE XREF: WinMain(x,x,x,x)+4C6j
.text:01031B6B ; WinMain(x,x,x,x)+4E4j ...
.text:01031B6B mov edi, [ebp+lpParameter]
.text:01031B71 push 0Ch
.text:01031B73 lea eax, [ebp+var_238]
.text:01031B79 push eax
.text:01031B7A push esi
.text:01031B7B push edi
.text:01031B7C call _RtlCheckProcessParameters@16 ; RtlCheckProcessParameters(x,x,x,x)
.text:01031B81 lea eax, [ebp+var_21C]
.text:01031B87 push eax ; int
.text:01031B88 push esi ; lpLibFileName
.text:01031B89 push edi ; int
.text:01031B8A mov [ebp+var_21C], ebx
.text:01031B90 call _LoadGinaDll@12 ; LoadGinaDll(x,x,x)
.text:01031B95 test eax, eax
.text:01031B97 jnz short loc_1031BAB
.text:01031B99 push 402h ; uExitCode
.text:01031B9E call ds:__imp__GetCurrentProcess@0 ; GetCurrentProcess()
.text:01031BA4 push eax ; hProcess
.text:01031BA5 call ds:__imp__TerminateProcess@8 ; TerminateProcess(x,x)