开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 10376|回复: 41
打印 上一主题 下一主题
收起左侧

[易源码分享] 驱动级结束进程

[复制链接]
跳转到指定楼层
发表于 2018-1-26 19:49:45 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   黑龙江省*
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 sna1 于 2018-1-26 19:52 编辑

emmmm,开始打算发到别的区,发现Python/VC/VB/汇编区只有求助贴,就发到了这里





可以结束一些任务管理器无法结束的进程 比如 火绒的 HipsDaemon.exe



可以看到 这里已经结束掉了


.sys文件已签名,是一个吊销签名,如不可以吧把计算机时间改到2013-05-20到2014-05-20之间即可

驱动是x64的


下面是demo的代码


  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include "ScmDrvCtrl.h"

  4. #pragma comment(lib,"user32.lib")
  5. void GetAppPath(char *szCurFile) //最后带斜杠
  6. {
  7.         GetModuleFileNameA(0,szCurFile,MAX_PATH);
  8.         for(SIZE_T i=strlen(szCurFile)-1;i>=0;i--)
  9.         {
  10.                 if(szCurFile[i]=='\\')
  11.                 {
  12.                         szCurFile[i+1]='\0';
  13.                         break;
  14.                 }
  15.         }
  16. }

  17. int main()
  18. {
  19.         BOOL b;
  20.         cDrvCtrl dc;
  21.         char szSysFile[MAX_PATH]={0};
  22.         char szSvcLnkName[]="KillPid";;
  23.         GetAppPath(szSysFile);
  24.         strcat(szSysFile,"KillPid.sys");
  25.         //安装并启动驱动
  26.         printf("加载驱动\n");
  27.         b=dc.Install(szSysFile,szSvcLnkName,szSvcLnkName);
  28.         b=dc.Start();
  29.         if (b == 1)
  30.                 printf("加载驱动成功\n");
  31.         else
  32.                 printf("加载驱动失败\n");
  33.         //“打开”驱动的符号链接
  34.         dc.Open("\\\\.\\KillPid");
  35.         DWORD x,y;
  36.         printf("输入进程pid:");
  37.         scanf_s("%lu",&x);
  38.         dc.IoControl(0x802, &x, sizeof(x), &y, sizeof(y),0);
  39.         printf("Pid:%d已结束\n",y);
  40.         //关闭符号链接句柄
  41.         printf("完成,关闭符号链接句柄\n");
  42.         CloseHandle(dc.m_hDriver);
  43.         //停止并卸载驱动
  44.         printf("卸载驱动\n");
  45.         b=dc.Stop();
  46.         b=dc.Remove();
  47.         if (b == 1)
  48.                 printf("卸载驱动成功\n");
  49.         else
  50.                 printf("卸载驱动失败\n");
  51.         system("pause");
  52.         return 0;
  53. }
复制代码
以及类

  1. /*============================
  2. Drvier Control Class (SCM way)
  3. ============================*/

  4. #pragma comment(lib,"advapi32.lib")

  5. class cDrvCtrl
  6. {
  7. public:
  8.         cDrvCtrl()
  9.         {
  10.                 m_pSysPath = NULL;
  11.                 m_pServiceName = NULL;
  12.                 m_pDisplayName = NULL;
  13.                 m_hSCManager = NULL;
  14.                 m_hService = NULL;
  15.                 m_hDriver = INVALID_HANDLE_VALUE;
  16.         }
  17.         ~cDrvCtrl()
  18.         {
  19.                 CloseServiceHandle(m_hService);
  20.                 CloseServiceHandle(m_hSCManager);
  21.                 CloseHandle(m_hDriver);
  22.         }
  23. public:
  24.         DWORD m_dwLastError;
  25.         PCHAR m_pSysPath;
  26.         PCHAR m_pServiceName;
  27.         PCHAR m_pDisplayName;
  28.         HANDLE m_hDriver;
  29.         SC_HANDLE m_hSCManager;
  30.         SC_HANDLE m_hService;
  31. public:
  32.         BOOL Install(PCHAR pSysPath,PCHAR pServiceName,PCHAR pDisplayName);
  33.         BOOL Start();
  34.         BOOL Stop();
  35.         BOOL Remove();
  36.         BOOL Open(PCHAR pLinkName);
  37.         BOOL IoControl(DWORD dwIoCode, PVOID InBuff, DWORD InBuffLen, PVOID OutBuff, DWORD OutBuffLen, DWORD *RealRetBytes);
  38. private:
  39.         BOOL GetSvcHandle(PCHAR pServiceName);
  40.         DWORD CTL_CODE_GEN(DWORD lngFunction);
  41. protected:
  42.         //null
  43. };

  44. BOOL cDrvCtrl::GetSvcHandle(PCHAR pServiceName)
  45. {
  46.         m_pServiceName = pServiceName;
  47.         m_hSCManager = OpenSCManagerA(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  48.         if (NULL == m_hSCManager)
  49.         {
  50.                 m_dwLastError = GetLastError();
  51.                 return FALSE;
  52.         }
  53.         m_hService = OpenServiceA(m_hSCManager,m_pServiceName,SERVICE_ALL_ACCESS);
  54.         if (NULL == m_hService)
  55.         {
  56.                 CloseServiceHandle(m_hSCManager);
  57.                 return FALSE;
  58.         }
  59.         else
  60.         {
  61.                 return TRUE;
  62.         }
  63. }

  64. BOOL cDrvCtrl::Install(PCHAR pSysPath,PCHAR pServiceName,PCHAR pDisplayName)
  65. {
  66.         m_pSysPath = pSysPath;
  67.         m_pServiceName = pServiceName;
  68.         m_pDisplayName = pDisplayName;
  69.         m_hSCManager = OpenSCManagerA(NULL,NULL,SC_MANAGER_ALL_ACCESS);
  70.         if (NULL == m_hSCManager)
  71.         {
  72.                 m_dwLastError = GetLastError();
  73.                 return FALSE;
  74.         }
  75.         m_hService = CreateServiceA(m_hSCManager,m_pServiceName,m_pDisplayName,
  76.                                     SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,
  77.                                     m_pSysPath,NULL,NULL,NULL,NULL,NULL);
  78.         if (NULL == m_hService)
  79.         {
  80.                 m_dwLastError = GetLastError();
  81.                 if (ERROR_SERVICE_EXISTS == m_dwLastError)
  82.                 {
  83.                         m_hService = OpenServiceA(m_hSCManager,m_pServiceName,SERVICE_ALL_ACCESS);
  84.                         if (NULL == m_hService)
  85.                         {
  86.                                 CloseServiceHandle(m_hSCManager);
  87.                                 return FALSE;
  88.                         }
  89.                 }
  90.                 else
  91.                 {
  92.                         CloseServiceHandle(m_hSCManager);
  93.                         return FALSE;
  94.                 }
  95.         }
  96.         return TRUE;
  97. }

  98. BOOL cDrvCtrl::Start()
  99. {
  100.         if (!StartServiceA(m_hService,NULL,NULL))
  101.         {
  102.                 m_dwLastError = GetLastError();
  103.                 return FALSE;
  104.         }
  105.         return TRUE;
  106. }

  107. BOOL cDrvCtrl::Stop()
  108. {
  109.         SERVICE_STATUS ss;
  110.         GetSvcHandle(m_pServiceName);
  111.         if (!ControlService(m_hService,SERVICE_CONTROL_STOP,&ss))
  112.         {
  113.                 m_dwLastError = GetLastError();
  114.                 return FALSE;
  115.         }
  116.         return TRUE;

  117. }

  118. BOOL cDrvCtrl::Remove()
  119. {
  120.         GetSvcHandle(m_pServiceName);
  121.         if (!DeleteService(m_hService))
  122.         {
  123.                 m_dwLastError = GetLastError();
  124.                 return FALSE;
  125.         }
  126.         return TRUE;
  127. }

  128. BOOL cDrvCtrl::Open(PCHAR pLinkName)//example: \\\\.\\xxoo
  129. {
  130.         if (m_hDriver != INVALID_HANDLE_VALUE)
  131.                 return TRUE;
  132.         m_hDriver = CreateFileA(pLinkName, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
  133.         if(m_hDriver != INVALID_HANDLE_VALUE)
  134.                 return TRUE;
  135.         else
  136.                 return FALSE;
  137. }

  138. BOOL cDrvCtrl::IoControl(DWORD dwIoCode, PVOID InBuff, DWORD InBuffLen, PVOID OutBuff, DWORD OutBuffLen, DWORD *RealRetBytes)
  139. {
  140.         DWORD dw;
  141.         BOOL b=DeviceIoControl(m_hDriver,CTL_CODE_GEN(dwIoCode),InBuff,InBuffLen,OutBuff,OutBuffLen,&dw,NULL);
  142.         if(RealRetBytes)
  143.                 *RealRetBytes=dw;
  144.         return b;
  145. }

  146. DWORD cDrvCtrl::CTL_CODE_GEN(DWORD lngFunction)
  147. {
  148.         return (FILE_DEVICE_UNKNOWN * 65536) | (FILE_ANY_ACCESS * 16384) | (lngFunction * 4) | METHOD_BUFFERED;
  149. }
复制代码
驱动部分的核心代码(结束进程)

  1. void ZwKillProcess(int pid)
  2. {
  3.         HANDLE hProcess = NULL;
  4.         CLIENT_ID ClientId;
  5.         OBJECT_ATTRIBUTES oa;
  6.         //填充 CID
  7.         ClientId.UniqueProcess = (HANDLE)pid;
  8.         ClientId.UniqueThread = 0;
  9.         //填充 OA
  10.         oa.Length = sizeof(oa);
  11.         oa.RootDirectory = 0;
  12.         oa.ObjectName = 0;
  13.         oa.Attributes = 0;
  14.         oa.SecurityDescriptor = 0;
  15.         oa.SecurityQualityOfService = 0;
  16.         //打开进程,如果句柄有效,则结束进程
  17.         ZwOpenProcess(&hProcess, 1, &oa, &ClientId);
  18.         if (hProcess)
  19.         {
  20.                 ZwTerminateProcess(hProcess, 0);
  21.                 ZwClose(hProcess);
  22.         };
  23. }
复制代码
可能写的有些乱,不喜勿喷,可以x掉;


下面是源代码以及成品


Demo.zip (87.27 KB, 下载次数: 192)


exe 源码


Demo.zip (87.27 KB, 下载次数: 146)


驱动源码

Driver.zip (2.14 KB, 下载次数: 137)


点评

本模块在X64位下蓝屏   广东省河源市  发表于 2018-7-8 07:09
直接重启,-6666精币!   山东省日照市  发表于 2018-1-31 09:24
直接蓝屏,-6666精币!   四川省宜宾市  发表于 2018-1-28 16:32

37
发表于 2023-11-25 00:37:06 | 只看该作者   贵州省黔西南布依族苗族自治州
的娃啊娃娃法国
回复 支持 反对

使用道具 举报

36
发表于 2023-10-26 18:06:01 | 只看该作者   广西壮族自治区桂林市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)
35
发表于 2022-12-4 02:54:05 | 只看该作者   重庆市重庆市
支持啊 好东西
回复 支持 反对

使用道具 举报

结帖率:78% (14/18)
34
发表于 2022-4-23 00:29:34 | 只看该作者   广东省广州市
支持一下
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)
33
发表于 2022-3-26 23:41:05 | 只看该作者   广东省广州市
感谢分享,很给力
回复 支持 反对

使用道具 举报

结帖率:100% (18/18)

签到天数: 9 天

32
发表于 2021-12-7 06:42:51 | 只看该作者   福建省泉州市
所以说    这到底是不是安全可用的?    好像是就发这么一个帖     人就没了?
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
31
发表于 2021-12-7 06:08:56 | 只看该作者   福建省莆田市
蓝屏666666
回复 支持 反对

使用道具 举报

结帖率:100% (12/12)

签到天数: 9 天

30
发表于 2021-5-22 15:02:10 | 只看该作者   山东省济宁市
我擦 电脑冒烟了
回复 支持 反对

使用道具 举报

29
发表于 2021-5-22 14:58:16 | 只看该作者   陕西省宝鸡市
66666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

结帖率:46% (17/37)

签到天数: 3 天

28
发表于 2019-7-5 11:54:49 | 只看该作者   上海市上海市
66666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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