宝峰科技

 找回密码
 注册

QQ登录

只需一步,快速开始

智能终端设备维修查询系统注册会员邮箱认证须知!
查看: 2560|回复: 0

[分享] VC++提升进程权限源码

[复制链接]

该用户从未签到

Asphyre 发表于 2010-10-22 17:09:30 | 显示全部楼层 |阅读模式

欢迎您注册加入!这里有您将更精采!

您需要 登录 才可以下载或查看,没有账号?注册

x
  1. #include <windows.h>
  2. #include <tlhelp32.h>
  3. BOOL CALLBACK EnumChildWindowProc(HWND hWnd,LPARAM lParam);//枚举记事本中的子窗口
  4. char mess[999999];
  5. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
  6. {
  7.     HWND nphWnd=::FindWindow("notepad",NULL);
  8.     if(nphWnd)
  9.     {
  10.         char temp[1024];
  11.         PROCESSENTRY32 pe32;
  12.         pe32.dwSize=sizeof(pe32);
  13.         HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//获得进程列表的快照,第一个参数可以有其他选项,详细请参考MSDN
  14.         if(hProcessSnap==INVALID_HANDLE_value)
  15.         {
  16.             ::MessageBox(NULL,"CreateToolhelp32Snapshot error","error",MB_OK);
  17.             return 0;
  18.         }
  19.         HANDLE hProcess;
  20.         HANDLE hToken;
  21.         BOOL bMore;
  22.         TOKEN_PRIVILEGES tkp;
  23.         //获得本进程的句柄,并提升其权限
  24.         bMore=::Process32First(hProcessSnap,&pe32);
  25.         while(bMore)
  26.         {
  27.             ::wsprintf(temp,"%s",pe32.szExeFile);
  28.             if(!::strcmp(temp,"upprocess.exe"))//找到本进程
  29.             {
  30.                 //提升权限
  31.                 //获得debug权限的LUID
  32.                 if(!::LookupPrivilegevalue(NULL,"SeDebugPrivilege",&tkp.Privileges[0].Luid))
  33.                 {
  34.                     ::MessageBox(NULL,"LookupPrivilegevalue error","error",MB_OK);
  35.                     return 0;
  36.                 }
  37.                 tkp.PrivilegeCount=1;
  38.                 tkp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
  39.                 //打开进程的令牌环
  40.                 if(!::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken))
  41.                 {
  42.                     ::MessageBox(NULL,"OpenProcessToken error","error",MB_OK);
  43.                     return 0;
  44.                 }
  45.                 //修改进程权限
  46.                 if(!::AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL, 0))
  47.                 {
  48.                     ::MessageBox(NULL,"AdjustTokenPrivileges error","error",MB_OK);
  49.                     return 0;
  50.                 }
  51.                 break;
  52.             }
  53.             bMore=::Process32Next(hProcessSnap,&pe32);
  54.         }
  55.         //获得本进程的句柄,并提升其权限
  56.         bMore=::Process32First(hProcessSnap,&pe32);//获得第一个进程的信息
  57.         while(bMore)
  58.         {
  59.             ::wsprintf(temp,"%s%s%s%d%s","\r\n进程名: ",pe32.szExeFile," 进程ID: ",pe32.th32ProcessID,"\r\n");
  60.             ::strcat(mess,temp);

  61.             hProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  62.             ::wsprintf(temp,"%s","PROCESS_ALL_ACCESS权限: ");
  63.             ::strcat(mess,temp);
  64.             if(hProcess==NULL)
  65.             {
  66.                 ::wsprintf(temp,"%s","失败\r\n");
  67.                 ::strcat(mess,temp);
  68.                 ::CloseHandle(hProcess);
  69.             }
  70.             else
  71.             {
  72.                 ::wsprintf(temp,"%s","成功\r\n");
  73.                 ::strcat(mess,temp);
  74.                 ::CloseHandle(hProcess);
  75.             }

  76.             HANDLE hProcess=::OpenProcess(PROCESS_CREATE_PROCESS,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  77.             ::wsprintf(temp,"%s","PROCESS_CREATE_PROCESS权限: ");
  78.             ::strcat(mess,temp);
  79.             if(hProcess==NULL)
  80.             {
  81.                 ::wsprintf(temp,"%s","失败\r\n");
  82.                 ::strcat(mess,temp);
  83.             }
  84.             else
  85.             {
  86.                 ::wsprintf(temp,"%s","成功\r\n");
  87.                 ::strcat(mess,temp);
  88.                 ::CloseHandle(hProcess);
  89.             }

  90.             hProcess=::OpenProcess(PROCESS_CREATE_THREAD,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  91.             ::wsprintf(temp,"%s","PROCESS_CREATE_THREAD权限: ");
  92.             ::strcat(mess,temp);
  93.             if(hProcess==NULL)
  94.             {
  95.                 ::wsprintf(temp,"%s","失败\r\n");
  96.                 ::strcat(mess,temp);
  97.             }
  98.             else
  99.             {
  100.                 ::wsprintf(temp,"%s","成功\r\n");
  101.                 ::strcat(mess,temp);
  102.                 ::CloseHandle(hProcess);
  103.             }

  104.             hProcess=::OpenProcess(PROCESS_DUP_HANDLE,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  105.             ::wsprintf(temp,"%s","PROCESS_DUP_HANDLE权限: ");
  106.             ::strcat(mess,temp);
  107.             if(hProcess==NULL)
  108.             {
  109.                 ::wsprintf(temp,"%s","失败\r\n");
  110.                 ::strcat(mess,temp);
  111.             }
  112.             else
  113.             {
  114.                 ::wsprintf(temp,"%s","成功\r\n");
  115.                 ::strcat(mess,temp);
  116.                 ::CloseHandle(hProcess);
  117.             }

  118.             hProcess=::OpenProcess(PROCESS_QUERY_INFORMATION,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  119.             ::wsprintf(temp,"%s","PROCESS_QUERY_INFORMATION权限: ");
  120.             ::strcat(mess,temp);
  121.             if(hProcess==NULL)
  122.             {
  123.                 ::wsprintf(temp,"%s","失败\r\n");
  124.                 ::strcat(mess,temp);
  125.             }
  126.             else
  127.             {
  128.                 ::wsprintf(temp,"%s","成功\r\n");
  129.                 ::strcat(mess,temp);
  130.                 ::CloseHandle(hProcess);
  131.             }

  132.             hProcess=::OpenProcess(PROCESS_SET_INFORMATION,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  133.             ::wsprintf(temp,"%s","PROCESS_SET_INFORMATION权限: ");
  134.             ::strcat(mess,temp);
  135.             if(hProcess==NULL)
  136.             {
  137.                 ::wsprintf(temp,"%s","失败\r\n");
  138.                 ::strcat(mess,temp);
  139.             }
  140.             else
  141.             {
  142.                 ::wsprintf(temp,"%s","成功\r\n");
  143.                 ::strcat(mess,temp);
  144.                 ::CloseHandle(hProcess);
  145.             }

  146.             hProcess=::OpenProcess(PROCESS_TERMINATE,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  147.             ::wsprintf(temp,"%s","PROCESS_TERMINATE权限: ");
  148.             ::strcat(mess,temp);
  149.             if(hProcess==NULL)
  150.             {
  151.                 ::wsprintf(temp,"%s","失败\r\n");
  152.                 ::strcat(mess,temp);
  153.             }
  154.             else
  155.             {
  156.                 ::wsprintf(temp,"%s","成功\r\n");
  157.                 ::strcat(mess,temp);
  158.                 ::CloseHandle(hProcess);
  159.             }

  160.             hProcess=::OpenProcess(PROCESS_VM_OPERATION,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  161.             ::wsprintf(temp,"%s","PROCESS_VM_OPERATION权限: ");
  162.             ::strcat(mess,temp);
  163.             if(hProcess==NULL)
  164.             {
  165.                 ::wsprintf(temp,"%s","失败\r\n");
  166.                 ::strcat(mess,temp);
  167.             }
  168.             else
  169.             {
  170.                 ::wsprintf(temp,"%s","成功\r\n");
  171.                 ::strcat(mess,temp);
  172.                 ::CloseHandle(hProcess);
  173.             }

  174.             hProcess=::OpenProcess(PROCESS_VM_READ,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  175.             ::wsprintf(temp,"%s","PROCESS_VM_READ权限: ");
  176.             ::strcat(mess,temp);
  177.             if(hProcess==NULL)
  178.             {
  179.                 ::wsprintf(temp,"%s","失败\r\n");
  180.                 ::strcat(mess,temp);
  181.             }
  182.             else
  183.             {
  184.                 ::wsprintf(temp,"%s","成功\r\n");
  185.                 ::strcat(mess,temp);
  186.                 ::CloseHandle(hProcess);
  187.             }

  188.             hProcess=::OpenProcess(PROCESS_VM_WRITE,false,(DWORD)pe32.th32ProcessID);//根据进程ID获得进程句柄
  189.             ::wsprintf(temp,"%s","PROCESS_VM_WRITE权限: ");
  190.             ::strcat(mess,temp);
  191.             if(hProcess==NULL)
  192.             {
  193.                 ::wsprintf(temp,"%s","失败\r\n");
  194.                 ::strcat(mess,temp);
  195.             }
  196.             else
  197.             {
  198.                 ::wsprintf(temp,"%s","成功\r\n");
  199.                 ::strcat(mess,temp);
  200.                 ::CloseHandle(hProcess);
  201.             }
  202.             bMore=::Process32Next(hProcessSnap,&pe32);//获得其他进程信息
  203.         }
  204.         ::EnumChildWindows(nphWnd,EnumChildWindowProc,0);//获得记事本的edit窗口,打印进程信息
  205.         return 0;
  206.     }
  207.     else
  208.     {
  209.         ::MessageBox(NULL,"please open notepad","error",MB_OK);
  210.         return 0;
  211.     }
  212. }
  213. BOOL CALLBACK EnumChildWindowProc(HWND hWnd,LPARAM lParam)
  214. {
  215.     char temp1[256];
  216.     if(hWnd)
  217.     {
  218.         ::GetClassName(hWnd,temp1,255);
  219.         if(!::strcmp(temp1,"Edit"))//得到edit子窗口句柄
  220.         {
  221.             ::SendMessage(hWnd,WM_SETTEXT,0,(LPARAM)mess);
  222.             return 0;
  223.         }
  224.     }
  225.     return true;
  226. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

免责声明

本站中所有被研究的素材与信息全部来源于互联网,版权争议与本站无关。本站所发布的任何软件编程开发或软件的逆向分析文章、逆向分析视频、补丁、注册机和注册信息,仅限用于学习和研究软件安全的目的。全体用户必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。学习编程开发技术或逆向分析技术是为了更好的完善软件可能存在的不安全因素,提升软件安全意识。所以您如果喜欢某程序,请购买注册正版软件,获得正版优质服务!不得将上述内容私自传播、销售或者用于商业用途!否则,一切后果请用户自负!

QQ|Archiver|手机版|小黑屋|联系我们|宝峰科技 ( 滇公网安备 53050202000040号 | 滇ICP备09007156号-2 )

Copyright © 2001-2023 Discuz! Team. GMT+8, 2024-12-22 15:55 , File On Powered by Discuz! X3.49

快速回复 返回顶部 返回列表