国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關注微信公眾號

黑客技巧談之創建高權限進程的方法
2007-01-29   

寫這個初衷是為了讓 Windows 任務管理器可以結束掉一些服務和僵死進程,用 pslist/pskill 之類工具無法獲得象任務管理器那樣豐富的信息,還得來回切換,麻煩的很。最初想寫個驅動監視任務管理器運行,使用 SYSTEM 進程 TOKEN 替換來達到目的。

后來覺得通用性不好,就改用了這種方法。此方法還可使Regedit查看、編輯 SAM 等注冊表鍵,何樂而不為。

// wssrun taskmgr.exe 
// wssrun regedit.exe 
// 


#include 
#include 
#include 
#include 
#include 
#include 
#include 

#pragma comment(lib,"Shlwapi.lib") 


///////////////////////////////////////////////////////////////// 
// 函數類型 :自定義工具函數 
// 函數模塊 : 
//////////////////////////////////////////////////////////////// 
// 功能 :提升當前進程權限 
// 注意 : 
///////////////////////////////////////////////////////////////// 
// 作者 : sinister 
// 發布版本 : 1.00.00 
// 發布日期 : 2006.2.09 
///////////////////////////////////////////////////////////////// 
// 重   大   修   改   歷   史 
//////////////////////////////////////////////////////////////// 
// 修改者 : 
// 修改日期 : 
// 修改內容 : 
///////////////////////////////////////////////////////////////// 

BOOL 
EnableDebugPriv( LPCTSTR szPrivilege ) 
{ 
HANDLE hToken; 
LUID sedebugnameValue; 
TOKEN_PRIVILEGES tkp; 

if ( !OpenProcessToken( GetCurrentProcess(), 
                TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, 
                &hToken ) ) 
{ 
  return FALSE; 
} 
if ( !LookupPrivilegeValue( NULL, szPrivilege, &sedebugnameValue ) ) 
{ 
  CloseHandle( hToken ); 
  return FALSE; 
} 

tkp.PrivilegeCount = 1; 
tkp.Privileges[0].Luid = sedebugnameValue; 
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 

if ( !AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) 
{ 
  CloseHandle( hToken ); 
  return FALSE; 
} 

return TRUE; 
} 

///////////////////////////////////////////////////////////////// 
// 函數類型 :自定義工具函數 
// 函數模塊 : 
//////////////////////////////////////////////////////////////// 
// 功能 :通過指定進程名得到其進程 ID 
// 注意 : 
///////////////////////////////////////////////////////////////// 
// 作者 : sinister 
// 發布版本 : 1.00.00 
// 發布日期 : 2006.2.09 
///////////////////////////////////////////////////////////////// 
// 重   大   修   改   歷   史 
//////////////////////////////////////////////////////////////// 
// 修改者 : 
// 修改日期 : 
// 修改內容 : 
///////////////////////////////////////////////////////////////// 

DWORD 
GetProcessId( LPCTSTR szProcName ) 
{ 
PROCESSENTRY32 pe;   
DWORD dwPid; 
DWORD dwRet; 
BOOL bFound = FALSE; 

// 
// 通過 TOOHLP32 函數枚舉進程 
// 

HANDLE hSP = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); 
if ( hSP ) 
{ 
  pe.dwSize = sizeof( pe ); 

  for ( dwRet = Process32First( hSP, &pe ); 
      dwRet; 
      dwRet = Process32Next( hSP, &pe ) ) 
  { 
    // 
    // 使用 StrCmpNI 比較字符傳,可忽略大小寫 
    // 
    if ( StrCmpNI( szProcName, pe.szExeFile, strlen( szProcName ) ) == 0 ) 
    { 
    dwPid = pe.th32ProcessID; 
    bFound = TRUE; 
    break; 
    } 
  } 

  CloseHandle( hSP ); 

  if ( bFound == TRUE ) 
  { 
    return dwPid; 
  } 
} 

return NULL; 
} 

///////////////////////////////////////////////////////////////// 
// 函數類型 :自定義工具函數 
// 函數模塊 : 
//////////////////////////////////////////////////////////////// 
// 功能 : 創建具有高權限的進程 
// 注意 : 
///////////////////////////////////////////////////////////////// 
// 作者 : sinister 
// 發布版本 : 1.00.00 
// 發布日期 : 2006.2.09 
///////////////////////////////////////////////////////////////// 
// 重   大   修   改   歷   史 
//////////////////////////////////////////////////////////////// 
// 修改者 : 
// 修改日期 : 
// 修改內容 : 
///////////////////////////////////////////////////////////////// 

BOOL 
CreateSystemProcess( LPTSTR szProcessName ) 
{ 
HANDLE hProcess; 
HANDLE hToken, hNewToken; 
DWORD dwPid; 

PACL pOldDAcl = NULL; 
PACL pNewDAcl = NULL; 
BOOL bDAcl; 
BOOL bDefDAcl; 
DWORD dwRet; 

PACL pSacl = NULL; 
PSID pSidOwner = NULL; 
PSID pSidPrimary = NULL; 
DWORD dwAclSize = 0; 
DWORD dwSaclSize = 0; 
DWORD dwSidOwnLen = 0; 
DWORD dwSidPrimLen = 0; 

DWORD dwSDLen; 
EXPLICIT_ACCESS ea; 
PSECURITY_DESCRIPTOR pOrigSd = NULL; 
PSECURITY_DESCRIPTOR pNewSd = NULL; 

STARTUPINFO si; 
PROCESS_INFORMATION pi; 

BOOL bError; 

if ( !EnableDebugPriv( "SeDebugPrivilege" ) ) 
{ 
  printf( "EnableDebugPriv() to failed!\n" ); 

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 選擇 WINLOGON 進程 
// 
if ( ( dwPid = GetProcessId( "WINLOGON.EXE" ) ) == NULL ) 
{ 
  printf( "GetProcessId() to failed!\n" );   

  bError = TRUE; 
  goto Cleanup; 
} 

hProcess = OpenProcess( PROCESS_QUERY_INFORMATION, FALSE, dwPid ); 
if ( hProcess == NULL ) 
{ 
  printf( "OpenProcess() = %d\n", GetLastError() );   

  bError = TRUE; 
  goto Cleanup; 
} 

if ( !OpenProcessToken( hProcess, READ_CONTROL | WRITE_DAC, &hToken ) ) 
{ 
  printf( "OpenProcessToken() = %d\n", GetLastError() ); 

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 設置 ACE 具有所有訪問權限 
// 
ZeroMemory( &ea, sizeof( EXPLICIT_ACCESS ) ); 
BuildExplicitAccessWithName( &ea, 
                    "Everyone", 
                    TOKEN_ALL_ACCESS, 
                    GRANT_ACCESS, 
                    0 ); 

if ( !GetKernelObjectSecurity( hToken, 
                      DACL_SECURITY_INFORMATION, 
                      pOrigSd, 
                      0, 
                      &dwSDLen ) ) 
{ 
  // 
  // 第一次調用給出的參數肯定返回這個錯誤,這樣做的目的是 
  // 為了得到原安全描述符 pOrigSd 的長度 
  // 
  if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER ) 
  { 
    pOrigSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(), 
                                  HEAP_ZERO_MEMORY, 
                                  dwSDLen ); 
    if ( pOrigSd == NULL ) 
    { 
    printf( "Allocate pSd memory to failed!\n" ); 

    bError = TRUE; 
    goto Cleanup; 
    } 

    // 
    // 再次調用才正確得到安全描述符 pOrigSd 
    // 
    if ( !GetKernelObjectSecurity( hToken, 
                        DACL_SECURITY_INFORMATION, 
                        pOrigSd, 
                        dwSDLen, 
                        &dwSDLen ) ) 
    { 
    printf( "GetKernelObjectSecurity() = %d\n", GetLastError() ); 
    bError = TRUE; 
    goto Cleanup; 
    } 
  } 
  else 
  { 
    printf( "GetKernelObjectSecurity() = %d\n", GetLastError() ); 
    bError = TRUE; 
    goto Cleanup; 
  } 
} 

// 
// 得到原安全描述符的訪問控制列表 ACL 
// 
if ( !GetSecurityDescriptorDacl( pOrigSd, &bDAcl, &pOldDAcl, &bDefDAcl ) ) 
{ 
  printf( "GetSecurityDescriptorDacl() = %d\n", GetLastError() ); 

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 生成新 ACE 權限的訪問控制列表 ACL 
// 
dwRet = SetEntriesInAcl( 1, &ea, pOldDAcl, &pNewDAcl ); 
if ( dwRet != ERROR_SUCCESS ) 
{ 
  printf( "SetEntriesInAcl() = %d\n", GetLastError() ); 
  pNewDAcl = NULL; 

  bError = TRUE; 
  goto Cleanup; 
} 

if ( !MakeAbsoluteSD( pOrigSd, 
                pNewSd, 
                &dwSDLen, 
                pOldDAcl, 
                &dwAclSize, 
                pSacl, 
                &dwSaclSize, 
                pSidOwner, 
                &dwSidOwnLen, 
                pSidPrimary, 
                &dwSidPrimLen ) ) 
{ 
  // 
  // 第一次調用給出的參數肯定返回這個錯誤,這樣做的目的是 
  // 為了創建新的安全描述符 pNewSd 而得到各項的長度 
  // 
  if ( GetLastError() == ERROR_INSUFFICIENT_BUFFER ) 
  { 
    pOldDAcl = ( PACL ) HeapAlloc( GetProcessHeap(), 
                        HEAP_ZERO_MEMORY, 
                        dwAclSize ); 
    pSacl = ( PACL ) HeapAlloc( GetProcessHeap(), 
                      HEAP_ZERO_MEMORY, 
                      dwSaclSize ); 
    pSidOwner = ( PSID ) HeapAlloc( GetProcessHeap(), 
                        HEAP_ZERO_MEMORY, 
                        dwSidOwnLen ); 
    pSidPrimary = ( PSID ) HeapAlloc( GetProcessHeap(), 
                          HEAP_ZERO_MEMORY, 
                          dwSidPrimLen ); 
    pNewSd = ( PSECURITY_DESCRIPTOR ) HeapAlloc( GetProcessHeap(), 
                                  HEAP_ZERO_MEMORY, 
                                  dwSDLen ); 

    if ( pOldDAcl == NULL || 
      pSacl == NULL || 
      pSidOwner == NULL || 
      pSidPrimary == NULL || 
      pNewSd == NULL ) 
    { 
    printf( "Allocate SID or ACL to failed!\n" ); 

    bError = TRUE; 
    goto Cleanup; 
    } 

    // 
    // 再次調用才可以成功創建新的安全描述符 pNewSd 
    // 但新的安全描述符仍然是原訪問控制列表 ACL 
    // 
    if ( !MakeAbsoluteSD( pOrigSd, 
                  pNewSd, 
                  &dwSDLen, 
                  pOldDAcl, 
                  &dwAclSize, 
                  pSacl, 
                  &dwSaclSize, 
                  pSidOwner, 
                  &dwSidOwnLen, 
                  pSidPrimary, 
                  &dwSidPrimLen ) ) 
    { 
    printf( "MakeAbsoluteSD() = %d\n", GetLastError() ); 

    bError = TRUE; 
    goto Cleanup; 
    } 
  } 
  else 
  { 
    printf( "MakeAbsoluteSD() = %d\n", GetLastError() ); 

    bError = TRUE; 
    goto Cleanup; 
  } 
} 

// 
// 將具有所有訪問權限的訪問控制列表 pNewDAcl 加入到新的 
// 安全描述符 pNewSd 中 
// 
if ( !SetSecurityDescriptorDacl( pNewSd, bDAcl, pNewDAcl, bDefDAcl ) ) 
{ 
  printf( "SetSecurityDescriptorDacl() = %d\n", GetLastError() ); 

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 將新的安全描述符加到 TOKEN 中 
// 
if ( !SetKernelObjectSecurity( hToken, DACL_SECURITY_INFORMATION, pNewSd ) ) 
{ 
  printf( "SetKernelObjectSecurity() = %d\n", GetLastError() ); 

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 再次打開 WINLOGON 進程的 TOKEN,這時已經具有所有訪問權限 
// 
if ( !OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &hToken ) ) 
{ 
  printf( "OpenProcessToken() = %d\n", GetLastError() );   

  bError = TRUE; 
  goto Cleanup; 
} 

// 
// 復制一份具有相同訪問權限的 TOKEN 
// 
if ( !DuplicateTokenEx( hToken, 
                TOKEN_ALL_ACCESS, 
                NULL, 
                SecurityImpersonation, 
                TokenPrimary, 
                &hNewToken ) ) 
{ 
  printf( "DuplicateTokenEx() = %d\n", GetLastError() );   

  bError = TRUE; 
  goto Cleanup; 
} 


ZeroMemory( &si, sizeof( STARTUPINFO ) ); 
si.cb = sizeof( STARTUPINFO ); 

// 
// 不虛擬登陸用戶的話,創建新進程會提示 
// 1314 客戶沒有所需的特權錯誤 
// 
ImpersonateLoggedOnUser( hNewToken ); 


// 
// 我們僅僅是需要建立高權限進程,不用切換用戶 
// 所以也無需設置相關桌面,有了新 TOKEN 足夠 
// 


// 
// 利用具有所有權限的 TOKEN,創建高權限進程 
// 
if ( !CreateProcessAsUser( hNewToken, 
                  NULL, 
                  szProcessName, 
                  NULL, 
                  NULL, 
                  FALSE, 
                  NULL, //NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, 
                  NULL, 
                  NULL, 
                  &si, 
                  &pi ) ) 
{ 
  printf( "CreateProcessAsUser() = %d\n", GetLastError() );   

  bError = TRUE; 
  goto Cleanup; 
} 

bError = FALSE; 

Cleanup: 
if ( pOrigSd ) 
{ 
  HeapFree( GetProcessHeap(), 0, pOrigSd ); 
} 
if ( pNewSd ) 
{ 
  HeapFree( GetProcessHeap(), 0, pNewSd ); 
} 
if ( pSidPrimary ) 
{ 
  HeapFree( GetProcessHeap(), 0, pSidPrimary ); 
} 
if ( pSidOwner ) 
{ 
  HeapFree( GetProcessHeap(), 0, pSidOwner ); 
} 
if ( pSacl ) 
{ 
  HeapFree( GetProcessHeap(), 0, pSacl ); 
} 
if ( pOldDAcl ) 
{ 
  HeapFree( GetProcessHeap(), 0, pOldDAcl ); 
} 

CloseHandle( pi.hProcess ); 
CloseHandle( pi.hThread ); 
CloseHandle( hToken ); 
CloseHandle( hNewToken ); 
CloseHandle( hProcess ); 

if ( bError ) 
{ 
  return FALSE; 
} 

return TRUE; 
} 


void 
main( int argc, char** argv ) 
{ 
if ( argc 〈 2 ) 
{ 
  printf( "Usage: wssrun \n" ); 
  return ; 
} 

if ( CreateSystemProcess( argv[1] ) == FALSE ) 
{ 
  printf( "wssrun: CreateSystemProcess() to failed!\n" ); 
  return ; 
} 
}


熱詞搜索:

上一篇:系統安全之對簡單Win32伴侶病毒的研究
下一篇:黑客技巧之安全穩定的實現進線程監控

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
亚洲国产精品成人久久综合一区| 色av成人天堂桃色av| 日韩欧美色综合| 美美哒免费高清在线观看视频一区二区 | 3atv在线一区二区三区| 日韩av中文字幕一区二区三区 | 色先锋久久av资源部| 亚洲乱码国产乱码精品精小说 | 国产精品一区专区| 欧美国产日韩a欧美在线观看| 成人性生交大片免费看中文| 18欧美乱大交hd1984| 在线免费一区三区| 日韩成人免费在线| 久久精品免费在线观看| av亚洲产国偷v产偷v自拍| 亚洲综合在线视频| 欧美成人vps| 91色婷婷久久久久合中文| 天天色图综合网| 中文字幕欧美三区| 欧美日韩精品免费| 岛国一区二区三区| 性久久久久久久久久久久| 久久婷婷久久一区二区三区| 久久精品视频一区| 日本强好片久久久久久aaa| 国产婷婷精品av在线| 欧美亚洲综合在线| 色婷婷av一区二区三区gif| 国产精品视频yy9299一区| 成人精品国产福利| 亚洲福利视频一区二区| 国产农村妇女毛片精品久久麻豆| 国产成人欧美日韩在线电影| 亚洲国产精品自拍| 国产精品久久久99| 欧美一区二区在线免费播放| 国产ts人妖一区二区| 亚洲国产精品久久不卡毛片| 久久久久国产精品人| 在线播放日韩导航| av亚洲精华国产精华精| 国产在线不卡一区| 日韩精品一级中文字幕精品视频免费观看 | 欧美一级二级在线观看| 色婷婷精品大在线视频| 国产一区二区三区四区五区入口 | 蜜桃精品视频在线| 亚洲一区二区成人在线观看| 国产欧美日韩另类视频免费观看| 欧美一级精品在线| 欧美性xxxxxx少妇| 色综合天天在线| 国产不卡一区视频| 韩国精品在线观看| 日本美女一区二区三区| 夜夜嗨av一区二区三区四季av| 国产欧美综合色| 精品国产亚洲在线| 欧美电影免费观看完整版| 欧美精品一卡两卡| 欧美日韩一区二区三区在线看| 96av麻豆蜜桃一区二区| 成人精品视频网站| 国产精品12区| 国产一区二区三区av电影 | 一区二区在线观看av| 国产精品免费av| 欧美激情综合网| 亚洲国产精华液网站w| 久久一留热品黄| 国产午夜亚洲精品午夜鲁丝片| 精品国产欧美一区二区| 精品免费日韩av| 久久蜜桃av一区二区天堂| 精品国产第一区二区三区观看体验 | 五月天激情综合网| 亚洲电影在线播放| 亚洲国产aⅴ天堂久久| 亚洲激情五月婷婷| 亚洲永久免费av| 一区二区三区欧美日韩| 夜夜精品浪潮av一区二区三区| 一区二区三区国产豹纹内裤在线 | 国产欧美日韩在线观看| 久久精品日产第一区二区三区高清版 | 色综合天天综合狠狠| 欧美在线三级电影| 欧美三级三级三级| 日韩一二三四区| 精品成人在线观看| 国产精品毛片久久久久久久| 中文字幕亚洲在| 亚洲一区在线免费观看| 日日夜夜精品视频免费| 精品午夜一区二区三区在线观看| 国产夫妻精品视频| gogo大胆日本视频一区| 在线观看视频91| 日韩一区二区在线看| 久久蜜臀精品av| 亚洲自拍偷拍av| 玖玖九九国产精品| 成人亚洲精品久久久久软件| 色狠狠av一区二区三区| 日韩欧美在线123| 国产欧美日韩一区二区三区在线观看 | 亚洲成a天堂v人片| 麻豆91在线观看| 91视频www| 日韩欧美久久久| 亚洲女厕所小便bbb| 日韩高清一区二区| 成人免费av网站| 91麻豆精品国产91久久久久久 | 亚洲精品视频一区| 美女久久久精品| 色综合一区二区| 欧美videos中文字幕| 亚洲免费在线看| 国内精品久久久久影院薰衣草| 91福利国产成人精品照片| 欧美精品一区二区三区一线天视频 | 色噜噜狠狠成人中文综合| 欧美一区二区黄| 麻豆精品国产传媒mv男同| 成人黄色小视频| 日韩一区二区麻豆国产| 亚洲视频狠狠干| 国产精品一级在线| 91 com成人网| 亚洲一区二区视频在线| 成人精品高清在线| 精品成人佐山爱一区二区| 亚洲综合成人在线视频| 成人99免费视频| 久久久综合精品| 蜜桃视频在线观看一区二区| 一本一本久久a久久精品综合麻豆| 日韩精品最新网址| 亚洲成av人片一区二区| 99国产精品久久久久| 久久精品男人的天堂| 久久精品国产澳门| 8x8x8国产精品| 亚洲va欧美va天堂v国产综合| www.视频一区| 日本一区二区三区免费乱视频| 日本不卡123| 欧美人妖巨大在线| 亚洲综合自拍偷拍| 91片在线免费观看| 亚洲天堂精品视频| 99国产麻豆精品| 一区精品在线播放| 成人黄动漫网站免费app| 久久新电视剧免费观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美精品 国产精品| 亚洲国产三级在线| 欧美日韩www| 天堂一区二区在线免费观看| 欧美午夜片在线看| 亚洲成人免费电影| 欧美丰满一区二区免费视频 | 日韩欧美一区二区视频| 免费看黄色91| 日韩欧美一级特黄在线播放| 捆绑变态av一区二区三区| 欧美一区二区三区电影| 免费久久精品视频| 精品久久久久久久人人人人传媒| 美洲天堂一区二卡三卡四卡视频| 日韩三级免费观看| 久久成人av少妇免费| 久久久久亚洲蜜桃| 国产成人av一区二区三区在线| 欧美—级在线免费片| 成人激情图片网| 亚洲一区在线看| 欧美一区二区三区男人的天堂| 奇米在线7777在线精品| 欧美成人精品二区三区99精品| 国产乱一区二区| 日本不卡一二三| 日韩欧美一二三四区| 成熟亚洲日本毛茸茸凸凹| 国产精品国产自产拍高清av王其| 色综合久久久久久久久久久| 亚洲成av人片在线观看| 久久品道一品道久久精品| 9人人澡人人爽人人精品| 一区二区三区在线观看国产| 欧美美女网站色| 国产91精品在线观看| 亚洲摸摸操操av| 日韩欧美亚洲一区二区| 不卡欧美aaaaa| 日韩成人av影视|