﻿{"id":123,"date":"2009-07-17T19:51:19","date_gmt":"2009-07-17T19:51:19","guid":{"rendered":""},"modified":"2011-11-18T16:58:39","modified_gmt":"2011-11-18T08:58:39","slug":"123","status":"publish","type":"post","link":"http:\/\/zerobox.org\/notes\/123.html","title":{"rendered":"\u521b\u5efa\u9ad8\u6743\u9650\u8fdb\u7a0b"},"content":{"rendered":"<p><span style=\"font-size: x-small;\">\u3010\u8f6c\u8f7d\u3011<br \/>\n\/\/ \u5199\u8fd9\u4e2a\u521d\u8877\u662f\u4e3a\u4e86\u8ba9 Windows \u4efb\u52a1\u7ba1\u7406\u5668\u53ef\u4ee5\u7ed3\u675f\u6389\u4e00\u4e9b\u670d\u52a1<br \/>\n\/\/ \u548c\u50f5\u6b7b\u8fdb\u7a0b\uff0c\u7528 pslist\/pskill \u4e4b\u7c7b\u5de5\u5177\u65e0\u6cd5\u83b7\u5f97\u8c61\u4efb\u52a1\u7ba1\u7406<br \/>\n\/\/ \u5668\u90a3\u6837\u4e30\u5bcc\u7684\u4fe1\u606f\uff0c\u8fd8\u5f97\u6765\u56de\u5207\u6362\uff0c\u9ebb\u70e6\u7684\u5f88\u3002\u6700\u521d\u60f3\u5199\u4e2a\u9a71\u52a8<br \/>\n\/\/ \u76d1\u89c6\u4efb\u52a1\u7ba1\u7406\u5668\u8fd0\u884c\uff0c\u4f7f\u7528 SYSTEM \u8fdb\u7a0b TOKEN \u66ff\u6362\u6765\u8fbe\u5230\u76ee\u7684\u3002<br \/>\n\/\/ \u540e\u6765\u89c9\u5f97\u901a\u7528\u6027\u4e0d\u597d\uff0c\u5c31\u6539\u7528\u4e86\u8fd9\u79cd\u65b9\u6cd5\u3002\u6b64\u65b9\u6cd5\u8fd8\u53ef\u4f7f regedit<br \/>\n\/\/ \u67e5\u770b\u3001\u7f16\u8f91 SAM \u7b49\u6ce8\u518c\u8868\u952e\uff0c\u4f55\u4e50\u800c\u4e0d\u4e3a\u3002<br \/>\n\/\/<br \/>\n\/\/ wssrun taskmgr.exe<br \/>\n\/\/ wssrun regedit.exe<br \/>\n\/\/<\/span><\/p>\n<p>#include<br \/>\n#include<br \/>\n#include<br \/>\n#include<br \/>\n#include<br \/>\n#include<br \/>\n#include<\/p>\n<p>#pragma comment(lib,&#8221;Shlwapi.lib&#8221;)<\/p>\n<p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u51fd\u6570\u7c7b\u578b :\u81ea\u5b9a\u4e49\u5de5\u5177\u51fd\u6570<br \/>\n\/\/ \u51fd\u6570\u6a21\u5757 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u529f\u80fd :\u63d0\u5347\u5f53\u524d\u8fdb\u7a0b\u6743\u9650<br \/>\n\/\/ \u6ce8\u610f :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4f5c\u8005 : sinister<br \/>\n\/\/ \u53d1\u5e03\u7248\u672c : 1.00.00<br \/>\n\/\/ \u53d1\u5e03\u65e5\u671f : 2006.2.09<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u91cd\u00a0\u00a0\u5927\u00a0\u00a0\u4fee\u00a0\u00a0\u6539\u00a0\u00a0\u5386\u00a0\u00a0\u53f2<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4fee\u6539\u8005 :<br \/>\n\/\/ \u4fee\u6539\u65e5\u671f :<br \/>\n\/\/ \u4fee\u6539\u5185\u5bb9 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p>\n<p>BOOL<br \/>\nEnableDebugPriv( LPCTSTR szPrivilege )<br \/>\n{<br \/>\nHANDLE hToken;<br \/>\nLUID sedebugnameValue;<br \/>\nTOKEN_PRIVILEGES tkp;<\/p>\n<p>if ( !OpenProcessToken( GetCurrentProcess(),<br \/>\nTOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,<br \/>\n&amp;hToken ) )<br \/>\n{<br \/>\nreturn FALSE;<br \/>\n}<br \/>\nif ( !LookupPrivilegeValue( NULL, szPrivilege, &amp;sedebugnameValue ) )<br \/>\n{<br \/>\nCloseHandle( hToken );<br \/>\nreturn FALSE;<br \/>\n}<\/p>\n<p>tkp.PrivilegeCount = 1;<br \/>\ntkp.Privileges[0].Luid = sedebugnameValue;<br \/>\ntkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;<\/p>\n<p>if ( !AdjustTokenPrivileges( hToken, FALSE, &amp;tkp, sizeof tkp, NULL, NULL ) )<br \/>\n{<br \/>\nCloseHandle( hToken );<br \/>\nreturn FALSE;<br \/>\n}<\/p>\n<p>return TRUE;<br \/>\n}<\/p>\n<p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u51fd\u6570\u7c7b\u578b :\u81ea\u5b9a\u4e49\u5de5\u5177\u51fd\u6570<br \/>\n\/\/ \u51fd\u6570\u6a21\u5757 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u529f\u80fd :\u901a\u8fc7\u6307\u5b9a\u8fdb\u7a0b\u540d\u5f97\u5230\u5176\u8fdb\u7a0b ID<br \/>\n\/\/ \u6ce8\u610f :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4f5c\u8005 : sinister<br \/>\n\/\/ \u53d1\u5e03\u7248\u672c : 1.00.00<br \/>\n\/\/ \u53d1\u5e03\u65e5\u671f : 2006.2.09<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u91cd\u00a0\u00a0\u5927\u00a0\u00a0\u4fee\u00a0\u00a0\u6539\u00a0\u00a0\u5386\u00a0\u00a0\u53f2<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4fee\u6539\u8005 :<br \/>\n\/\/ \u4fee\u6539\u65e5\u671f :<br \/>\n\/\/ \u4fee\u6539\u5185\u5bb9 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p>\n<p>DWORD<br \/>\nGetProcessId( LPCTSTR szProcName )<br \/>\n{<br \/>\nPROCESSENTRY32 pe;<br \/>\nDWORD dwPid;<br \/>\nDWORD dwRet;<br \/>\nBOOL bFound = FALSE;<\/p>\n<p>\/\/<br \/>\n\/\/ \u901a\u8fc7 TOOHLP32 \u51fd\u6570\u679a\u4e3e\u8fdb\u7a0b<br \/>\n\/\/<\/p>\n<p>HANDLE hSP = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );<br \/>\nif ( hSP )<br \/>\n{<br \/>\npe.dwSize = sizeof( pe );<\/p>\n<p>for ( dwRet = Process32First( hSP, &amp;pe );<br \/>\ndwRet;<br \/>\ndwRet = Process32Next( hSP, &amp;pe ) )<br \/>\n{<br \/>\n\/\/<br \/>\n\/\/ \u4f7f\u7528 StrCmpNI \u6bd4\u8f83\u5b57\u7b26\u4f20\uff0c\u53ef\u5ffd\u7565\u5927\u5c0f\u5199<br \/>\n\/\/<br \/>\nif ( StrCmpNI( szProcName, pe.szExeFile, strlen( szProcName ) ) == 0 )<br \/>\n{<br \/>\ndwPid = pe.th32ProcessID;<br \/>\nbFound = TRUE;<br \/>\nbreak;<br \/>\n}<br \/>\n}<\/p>\n<p>CloseHandle( hSP );<\/p>\n<p>if ( bFound == TRUE )<br \/>\n{<br \/>\nreturn dwPid;<br \/>\n}<br \/>\n}<\/p>\n<p>return NULL;<br \/>\n}<\/p>\n<p>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u51fd\u6570\u7c7b\u578b :\u81ea\u5b9a\u4e49\u5de5\u5177\u51fd\u6570<br \/>\n\/\/ \u51fd\u6570\u6a21\u5757 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u529f\u80fd : \u521b\u5efa\u5177\u6709\u9ad8\u6743\u9650\u7684\u8fdb\u7a0b<br \/>\n\/\/ \u6ce8\u610f :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4f5c\u8005 : sinister<br \/>\n\/\/ \u53d1\u5e03\u7248\u672c : 1.00.00<br \/>\n\/\/ \u53d1\u5e03\u65e5\u671f : 2006.2.09<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u91cd\u00a0\u00a0\u5927\u00a0\u00a0\u4fee\u00a0\u00a0\u6539\u00a0\u00a0\u5386\u00a0\u00a0\u53f2<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<br \/>\n\/\/ \u4fee\u6539\u8005 :<br \/>\n\/\/ \u4fee\u6539\u65e5\u671f :<br \/>\n\/\/ \u4fee\u6539\u5185\u5bb9 :<br \/>\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<\/p>\n<p>BOOL<br \/>\nCreateSystemProcess( LPTSTR szProcessName )<br \/>\n{<br \/>\nHANDLE hProcess;<br \/>\nHANDLE hToken, hNewToken;<br \/>\nDWORD dwPid;<\/p>\n<p>PACL pOldDAcl = NULL;<br \/>\nPACL pNewDAcl = NULL;<br \/>\nBOOL bDAcl;<br \/>\nBOOL bDefDAcl;<br \/>\nDWORD dwRet;<\/p>\n<p>PACL pSacl = NULL;<br \/>\nPSID pSidOwner = NULL;<br \/>\nPSID pSidPrimary = NULL;<br \/>\nDWORD dwAclSize = 0;<br \/>\nDWORD dwSaclSize = 0;<br \/>\nDWORD dwSidOwnLen = 0;<br \/>\nDWORD dwSidPrimLen = 0;<\/p>\n<p>DWORD dwSDLen;<br \/>\n<span class=\"t_tag\" onclick=\"tagshow(event)\">EXP<\/span>LICIT_ACCESS ea;<br \/>\nPSECURITY_DESCRIPTOR pOrigSd = NULL;<br \/>\nPSECURITY_DESCRIPTOR pNewSd = NULL;<\/p>\n<p>STARTUPINFO si;<br \/>\nPROCESS_INFORMATION pi;<\/p>\n<p>BOOL bError;<\/p>\n<p>if ( !EnableDebugPriv( &#8220;SeDebugPrivilege&#8221; ) )<br \/>\n{<br \/>\nprintf( &#8220;EnableDebugPriv() to failed!<br \/>\n&#8221; );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u9009\u62e9 WINLOGON \u8fdb\u7a0b<br \/>\n\/\/<br \/>\nif ( ( dwPid = GetProcessId( &#8220;WINLOGON.EXE&#8221; ) ) == NULL )<br \/>\n{<br \/>\nprintf( &#8220;GetProcessId() to failed!<br \/>\n&#8221; );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid );<br \/>\nif ( hProcess == NULL )<br \/>\n{<br \/>\nprintf( &#8220;OpenProcess() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>if ( !OpenProcessToken( hProcess, READ_CONTROL | WRITE_DAC, &amp;hToken ) )<br \/>\n{<br \/>\nprintf( &#8220;OpenProcessToken() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u8bbe\u7f6e ACE \u5177\u6709\u6240\u6709\u8bbf\u95ee\u6743\u9650<br \/>\n\/\/<br \/>\nZeroMemory( &amp;ea, sizeof( EXPLICIT_ACCESS ) );<br \/>\nBuildExplicitAccessWithName( &amp;ea,<br \/>\n&#8220;Everyone&#8221;,<br \/>\nTOKEN_ALL_ACCESS,<br \/>\nGRANT_ACCESS,<br \/>\n0 );<\/p>\n<p>if ( !GetKernelObjectSecurity( hToken,<br \/>\nDACL_SECURITY_INFORMATION,<br \/>\npOrigSd,<br \/>\n0,<br \/>\n&amp;dwSDLen ) )<br \/>\n{<br \/>\n\/\/<br \/>\n\/\/ \u7b2c\u4e00\u6b21\u8c03\u7528\u7ed9\u51fa\u7684\u53c2\u6570\u80af\u5b9a\u8fd4\u56de\u8fd9\u4e2a\u9519\u8bef\uff0c\u8fd9\u6837\u505a\u7684\u76ee\u7684\u662f<br \/>\n\/\/ \u4e3a\u4e86\u5f97\u5230\u539f\u5b89\u5168\u63cf\u8ff0\u7b26 pOrigSd \u7684\u957f\u5ea6<br \/>\n\/\/<br \/>\nif ( GetLastError() == ERROR_INSUFFICIENT_BUFFER )<br \/>\n{<br \/>\npOrigSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwSDLen );<br \/>\nif ( pOrigSd == NULL )<br \/>\n{<br \/>\nprintf( &#8220;Allocate pSd memory to failed!<br \/>\n&#8221; );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u518d\u6b21\u8c03\u7528\u624d\u6b63\u786e\u5f97\u5230\u5b89\u5168\u63cf\u8ff0\u7b26 pOrigSd<br \/>\n\/\/<br \/>\nif ( !GetKernelObjectSecurity( hToken,<br \/>\nDACL_SECURITY_INFORMATION,<br \/>\npOrigSd,<br \/>\ndwSDLen,<br \/>\n&amp;dwSDLen ) )<br \/>\n{<br \/>\nprintf( &#8220;GetKernelObjectSecurity() = %d<br \/>\n&#8220;, GetLastError() );<br \/>\nbError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nprintf( &#8220;GetKernelObjectSecurity() = %d<br \/>\n&#8220;, GetLastError() );<br \/>\nbError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u5f97\u5230\u539f\u5b89\u5168\u63cf\u8ff0\u7b26\u7684\u8bbf\u95ee\u63a7\u5236\u5217\u8868 ACL<br \/>\n\/\/<br \/>\nif ( !GetSecurityDescriptorDacl( pOrigSd, &amp;bDAcl, &amp;pOldDAcl, &amp;bDefDAcl ) )<br \/>\n{<br \/>\nprintf( &#8220;GetSecurityDescriptorDacl() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u751f\u6210\u65b0 ACE \u6743\u9650\u7684\u8bbf\u95ee\u63a7\u5236\u5217\u8868 ACL<br \/>\n\/\/<br \/>\ndwRet = SetEntriesInAcl( 1, &amp;ea, pOldDAcl, &amp;pNewDAcl );<br \/>\nif ( dwRet != ERROR_SUCCESS )<br \/>\n{<br \/>\nprintf( &#8220;SetEntriesInAcl() = %d<br \/>\n&#8220;, GetLastError() );<br \/>\npNewDAcl = NULL;<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>if ( !MakeAbsoluteSD( pOrigSd,<br \/>\npNewSd,<br \/>\n&amp;dwSDLen,<br \/>\npOldDAcl,<br \/>\n&amp;dwAclSize,<br \/>\npSacl,<br \/>\n&amp;dwSaclSize,<br \/>\npSidOwner,<br \/>\n&amp;dwSidOwnLen,<br \/>\npSidPrimary,<br \/>\n&amp;dwSidPrimLen ) )<br \/>\n{<br \/>\n\/\/<br \/>\n\/\/ \u7b2c\u4e00\u6b21\u8c03\u7528\u7ed9\u51fa\u7684\u53c2\u6570\u80af\u5b9a\u8fd4\u56de\u8fd9\u4e2a\u9519\u8bef\uff0c\u8fd9\u6837\u505a\u7684\u76ee\u7684\u662f<br \/>\n\/\/ \u4e3a\u4e86\u521b\u5efa\u65b0\u7684\u5b89\u5168\u63cf\u8ff0\u7b26 pNewSd \u800c\u5f97\u5230\u5404\u9879\u7684\u957f\u5ea6<br \/>\n\/\/<br \/>\nif ( GetLastError() == ERROR_INSUFFICIENT_BUFFER )<br \/>\n{<br \/>\npOldDAcl = ( PACL ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwAclSize );<br \/>\npSacl = ( PACL ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwSaclSize );<br \/>\npSidOwner = ( PSID ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwSidOwnLen );<br \/>\npSidPrimary = ( PSID ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwSidPrimLen );<br \/>\npNewSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(),<br \/>\nHEAP_ZERO_MEMORY,<br \/>\ndwSDLen );<\/p>\n<p>if ( pOldDAcl == NULL ||<br \/>\npSacl == NULL ||<br \/>\npSidOwner == NULL ||<br \/>\npSidPrimary == NULL ||<br \/>\npNewSd == NULL )<br \/>\n{<br \/>\nprintf( &#8220;Allocate SID or ACL to failed!<br \/>\n&#8221; );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u518d\u6b21\u8c03\u7528\u624d\u53ef\u4ee5\u6210\u529f\u521b\u5efa\u65b0\u7684\u5b89\u5168\u63cf\u8ff0\u7b26 pNewSd<br \/>\n\/\/ \u4f46\u65b0\u7684\u5b89\u5168\u63cf\u8ff0\u7b26\u4ecd\u7136\u662f\u539f\u8bbf\u95ee\u63a7\u5236\u5217\u8868 ACL<br \/>\n\/\/<br \/>\nif ( !MakeAbsoluteSD( pOrigSd,<br \/>\npNewSd,<br \/>\n&amp;dwSDLen,<br \/>\npOldDAcl,<br \/>\n&amp;dwAclSize,<br \/>\npSacl,<br \/>\n&amp;dwSaclSize,<br \/>\npSidOwner,<br \/>\n&amp;dwSidOwnLen,<br \/>\npSidPrimary,<br \/>\n&amp;dwSidPrimLen ) )<br \/>\n{<br \/>\nprintf( &#8220;MakeAbsoluteSD() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nprintf( &#8220;MakeAbsoluteSD() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u5c06\u5177\u6709\u6240\u6709\u8bbf\u95ee\u6743\u9650\u7684\u8bbf\u95ee\u63a7\u5236\u5217\u8868 pNewDAcl \u52a0\u5165\u5230\u65b0\u7684<br \/>\n\/\/ \u5b89\u5168\u63cf\u8ff0\u7b26 pNewSd \u4e2d<br \/>\n\/\/<br \/>\nif ( !SetSecurityDescriptorDacl( pNewSd, bDAcl, pNewDAcl, bDefDAcl ) )<br \/>\n{<br \/>\nprintf( &#8220;SetSecurityDescriptorDacl() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u5c06\u65b0\u7684\u5b89\u5168\u63cf\u8ff0\u7b26\u52a0\u5230 TOKEN \u4e2d<br \/>\n\/\/<br \/>\nif ( !SetKernelObjectSecurity( hToken, DACL_SECURITY_INFORMATION, pNewSd ) )<br \/>\n{<br \/>\nprintf( &#8220;SetKernelObjectSecurity() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u518d\u6b21\u6253\u5f00 WINLOGON \u8fdb\u7a0b\u7684 TOKEN\uff0c\u8fd9\u65f6\u5df2\u7ecf\u5177\u6709\u6240\u6709\u8bbf\u95ee\u6743\u9650<br \/>\n\/\/<br \/>\nif ( !OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &amp;hToken ) )<br \/>\n{<br \/>\nprintf( &#8220;OpenProcessToken() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>\/\/<br \/>\n\/\/ \u590d\u5236\u4e00\u4efd\u5177\u6709\u76f8\u540c\u8bbf\u95ee\u6743\u9650\u7684 TOKEN<br \/>\n\/\/<br \/>\nif ( !DuplicateTokenEx( hToken,<br \/>\nTOKEN_ALL_ACCESS,<br \/>\nNULL,<br \/>\nSecurityImpersonation,<br \/>\nTokenPrimary,<br \/>\n&amp;hNewToken ) )<br \/>\n{<br \/>\nprintf( &#8220;DuplicateTokenEx() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>ZeroMemory( &amp;si, sizeof( STARTUPINFO ) );<br \/>\nsi.cb = sizeof( STARTUPINFO );<\/p>\n<p>\/\/<br \/>\n\/\/ \u4e0d\u865a\u62df\u767b\u9646\u7528\u6237\u7684\u8bdd\uff0c\u521b\u5efa\u65b0\u8fdb\u7a0b\u4f1a\u63d0\u793a<br \/>\n\/\/ 1314 \u5ba2\u6237\u6ca1\u6709\u6240\u9700\u7684\u7279\u6743\u9519\u8bef<br \/>\n\/\/<br \/>\nImpersonateLoggedOnUser( hNewToken );<\/p>\n<p>\/\/<br \/>\n\/\/ \u6211\u4eec\u4ec5\u4ec5\u662f\u9700\u8981\u5efa\u7acb\u9ad8\u6743\u9650\u8fdb\u7a0b\uff0c\u4e0d\u7528\u5207\u6362\u7528\u6237<br \/>\n\/\/ \u6240\u4ee5\u4e5f\u65e0\u9700\u8bbe\u7f6e\u76f8\u5173\u684c\u9762\uff0c\u6709\u4e86\u65b0 TOKEN \u8db3\u591f<br \/>\n\/\/<\/p>\n<p>\/\/<br \/>\n\/\/ \u5229\u7528\u5177\u6709\u6240\u6709\u6743\u9650\u7684 TOKEN\uff0c\u521b\u5efa\u9ad8\u6743\u9650\u8fdb\u7a0b<br \/>\n\/\/<br \/>\nif ( !CreateProcessAsUser( hNewToken,<br \/>\nNULL,<br \/>\nszProcessName,<br \/>\nNULL,<br \/>\nNULL,<br \/>\nFALSE,<br \/>\nNULL, \/\/NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE,<br \/>\nNULL,<br \/>\nNULL,<br \/>\n&amp;si,<br \/>\n&amp;pi ) )<br \/>\n{<br \/>\nprintf( &#8220;CreateProcessAsUser() = %d<br \/>\n&#8220;, GetLastError() );<\/p>\n<p>bError = TRUE;<br \/>\ngoto Cleanup;<br \/>\n}<\/p>\n<p>bError = FALSE;<\/p>\n<p>Cleanup:<br \/>\nif ( pOrigSd )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pOrigSd );<br \/>\n}<br \/>\nif ( pNewSd )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pNewSd );<br \/>\n}<br \/>\nif ( pSidPrimary )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pSidPrimary );<br \/>\n}<br \/>\nif ( pSidOwner )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pSidOwner );<br \/>\n}<br \/>\nif ( pSacl )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pSacl );<br \/>\n}<br \/>\nif ( pOldDAcl )<br \/>\n{<br \/>\nHeapFree( GetProcessHeap(), 0, pOldDAcl );<br \/>\n}<\/p>\n<p>CloseHandle( pi.hProcess );<br \/>\nCloseHandle( pi.hThread );<br \/>\nCloseHandle( hToken );<br \/>\nCloseHandle( hNewToken );<br \/>\nCloseHandle( hProcess );<\/p>\n<p>if ( bError )<br \/>\n{<br \/>\nreturn FALSE;<br \/>\n}<\/p>\n<p>return TRUE;<br \/>\n}<\/p>\n<p>void<br \/>\nmain( int argc, char** argv )<br \/>\n{<br \/>\nif ( argc &lt; 2 )<br \/>\n{<br \/>\nprintf( &#8220;Usage: wssrun<br \/>\n&#8221; );<br \/>\nreturn ;<br \/>\n}<\/p>\n<p>if ( CreateSystemProcess( argv[1] ) == FALSE )<br \/>\n{<br \/>\nprintf( &#8220;wssrun: CreateSystemProcess() to failed!<br \/>\n&#8221; );<br \/>\nreturn ;<br \/>\n}<br \/>\n}<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-size: x-small;\">Author:\u00a0\u00a0sinister<br \/>\nEmail:\u00a0\u00a0<\/span><a href=\"mailto:sinister@whitecell.org\"><span style=\"font-size: x-small;\">sinister@whitecell.org<\/span><\/a><br \/>\n<span style=\"font-size: x-small;\">Homepage:<\/span><a href=\"http:\/\/www.whitecell.org\/\" target=\"_blank\"><span style=\"font-size: x-small;\">http:\/\/www.whitecell.org<\/span><\/a><span style=\"font-size: x-small;\"><br \/>\n<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u3010\u8f6c\u8f7d\u3011 \/\/ \u5199\u8fd9\u4e2a\u521d\u8877\u662f\u4e3a\u4e86\u8ba9 Windows \u4efb\u52a1\u7ba1\u7406\u5668\u53ef\u4ee5\u7ed3\u675f\u6389\u4e00\u4e9b\u670d\u52a1 &hellip;<\/p>\n<p class=\"read-more\"><a href=\"http:\/\/zerobox.org\/notes\/123.html\">\u7ee7\u7eed\u9605\u8bfb &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[109],"class_list":["post-123","post","type-post","status-publish","format-standard","hentry","tag-109"],"views":794,"_links":{"self":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts\/123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":0,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"wp:attachment":[{"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/zerobox.org\/notes\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}