开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

12
返回列表 发新帖
楼主: Wenle
收起左侧

[已解决] 如何检测进程

 关闭 [复制链接]
结帖率:95% (18/19)
发表于 2025-2-27 14:47:32 | 显示全部楼层   山东省潍坊市
如果是自己写的程序,可以用进程通信进行验证,如果不是自己写的,那确实没有啥好办法。
回复

使用道具 举报

头像被屏蔽

签到天数: 1 天

发表于 2025-2-27 14:51:41 | 显示全部楼层   广东省广州市
多重检测,先检测标题,再检测类名
回复

使用道具 举报

结帖率:100% (105/105)

签到天数: 2 天

发表于 2025-2-27 16:46:46 | 显示全部楼层   浙江省温州市
所监控的程序 他得pid 顶级窗口 子窗口各种参数多次检查对比
回复

使用道具 举报

结帖率:100% (20/20)
发表于 2025-2-27 17:15:14 | 显示全部楼层   河南省新乡市
你提出的这个问题非常具有普遍性,所以我专门花了一些时间整理了方法,希望能得到你的最佳(注:所有命令均需要精易模块,请自行调用)
(草,我特么自己读一遍感觉好像AI啊,但这全是我自己一个字一个字抠出来的)
首先最简单的方法,判断进程名
  
子程序名返回值类型公开备 注
方法1_检测进程名逻辑型 若检测到返回真
参数名类 型参考可空数组备 注
欲检测进程名文本型
返回 (进程_是否存在 (欲检测进程名, ))

此检测的问题在于:如果文件名被修改,进程名也不同,此检测就会失效
由此我写了第二种检测
  
子程序名返回值类型公开备 注
方法2_模糊检测窗口名逻辑型 枚举所有窗口名,若检测到返回真
参数名类 型参考可空数组备 注
欲检测窗口名的一部分文本型
欲检测窗口的类名文本型可不填
如果 (窗口_模糊遍历窗口 (, 欲检测窗口的类名, 欲检测窗口名的一部分, ) = 0)
返回 ()
返回 ()


这种检测可以针对窗口名和窗口类名进行模糊搜索查找但问题在于:窗口名的修改十分容易,只要有对应句柄就能够进行修改,或者干脆程序启动时直接随机化窗口名,甚至压根就不弹出窗口,只在后台做小动作,此检测自然就会失效了
同时由于检测方法调用了精易模块的模糊遍历,还有误判的可能
我又从窗口格式进行下手
  
子程序名返回值类型公开备 注
方法3_检测窗口宽高逻辑型 枚举所有窗口,取出所有窗口的宽度和高度进行判断,若有完全符合条件的窗口返回真
参数名类 型参考可空数组备 注
整数型
整数型
变量名类 型静态数组备 注
窗口信息数组精易_窗口信息0
i整数型 
窗口_枚举 (窗口信息数组)
计次循环首 (取数组成员数 (窗口信息数组), i)
如果真 (窗口取宽度 (窗口信息数组 [i].窗口句柄) = 宽 窗口取高度 (窗口信息数组 [i].窗口句柄) = 高)
返回 ()

计次循环尾 ()
返回 ()


i支持库列表   支持库注释   
ExuiKrnln(未知支持库)

这种检测能够暴力枚举所有窗口,同时检查有没有窗口满足了所提供的宽和高
但程序只需在启动时随机化窗口的宽度和高度,甚至压根没有窗口,此检测自然也就失效了
同时还有一个问题:如果目标程序的窗口大小恰好为全屏,或者恰好与某些应用窗口大小相等,还会导致误判
我又尝试用曾经检测CE时用到的一种方法:枚举dll
  
子程序名返回值类型公开备 注
方法4_检测进程调用dll逻辑型 枚举所有进程,再枚举其内涵的所有dll,若检测到有进程含有提供的dll名则返回真
参数名类 型参考可空数组备 注
检测dll名文本型
变量名类 型静态数组备 注
进程信息数组进程信息0
进程_模块信息进程_模块信息0
i1整数型 
i2整数型 
逻辑值逻辑型用于返回结果
逻辑值 = 假
进程信息数组 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程信息数组), i1)
进程_枚举进程模块 (进程信息数组 [i1].进程标识符, 进程_模块信息)
计次循环首 (取数组成员数 (进程_模块信息), i2)
如果真 (进程_模块信息 [i2].模块文件名 = 检测dll名)
逻辑值 = 真

计次循环尾 ()
计次循环尾 ()
返回 (逻辑值)


i支持库列表   支持库注释   
eAPI应用接口支持库

这种检测暴力枚举所有进程,再二次枚举出每个进程所调用的dll,这个的确非常有效,只要你调用了具有特异性的dll,就难以逃脱这种方法的追杀
但问题仍然存在:如果目标程序只调用了大众化的系统dll,使用这种方法不仅无法准确判断,还会误判其他程序
所以我又尝试从目录下手

  
子程序名返回值类型公开备 注
方法5_检测进程目录下是否存在指定文件逻辑型 枚举所有进程目录,若某进程下有指定的文件,则返回真
参数名类 型参考可空数组备 注
文件名文本型完整文件名,例如data.ini,问号.dll等,也可以带二级目录,例如“子目录1\子目录2\指定文件.dll”
变量名类 型静态数组备 注
进程信息数组进程信息0
i整数型 
临时路径文本型 
进程信息数组 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程信息数组), i)
临时路径 = 子文本替换 (进程_PID取路径 (进程信息数组 [i].进程标识符), 进程信息数组 [i].进程名称, “”, , , )
如果真 (文件是否存在 (临时路径 + 文件名))
返回 ()

计次循环尾 ()
返回 ()


i支持库列表   支持库注释   
eAPI应用接口支持库

首先枚举所有进程,然后得到所有进程的当前目录,再判断其目录下方有没有要寻找的文件
这种方法适合某些必须依托同一文件夹下资源文件才能运行的程序
但反制同样简单,只要我不在程序所在文件夹下存放资源即可,甚至压根不写出资源,不调用资源
还有一个问题:如果判断的文件名比较大众化,例如data.ini,还可能会导致误判
这个时候我打开任务管理器,发现每个进程都会有“描述”,我再次尝试从这个方向下手
  
子程序名返回值类型公开备 注
方法6_检测文件信息逻辑型 枚举所有进程,取出其路径,再取出文件信息进行比对,若符合则返回真
参数名类 型参考可空数组备 注
欲比对文件信息整数型1备注,2公司名,3描述,4文件版本,5内部名称,6版权,7合法商标,8原文件名,9个人用编译版说明,10产品名称,11产品版本,12特殊编译版说明
比对内容文本型
变量名类 型静态数组备 注
进程信息数组进程信息0
i整数型 
临时路径文本型 
进程信息数组 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程信息数组), i)
如果真 (文件_取文件信息 (进程_PID取路径 (进程信息数组 [i].进程标识符), 欲比对文件信息) = 比对内容)
返回 ()

计次循环尾 ()
返回 ()


i支持库列表   支持库注释   
eAPI应用接口支持库

这个判断应该比较稳定,也可能是我对文件信息这方面了解的不多
例如e.exe的描述为“易语言”,精易编程助手.exe的描述为“编程必备工具”
同时还可以从文件版本内部名称公司名备注产品名称等等等等方面进行多重判断,相对来说比较稳定
但要注意,如果比对内容较为大众化,会出现误判的情况,例如描述为:“Windows 服务主进程”或“易语言”


以上我提供的这么多方法,尽量要融合起来使用,多重检测,这样一来概率就会大很多
同时,被检测程序如果仍然在保持更新,你也要跟着一起更新,以确保每个版本都能被准确检测到


检测与过检测一直都在相互对抗,没有万无一失的方法,要灵活应用!


回复

使用道具 举报

结帖率:90% (9/10)

签到天数: 1 天

发表于 2025-2-27 22:50:24 | 显示全部楼层   吉林省松原市
  
子程序名返回值类型公开备 注
检测进程路径特征  
变量名类 型静态数组备 注
进程列表进程信息0
i整数型 
进程列表 = 取系统进程列表 ()
计次循环首 (取数组成员数 (进程列表), i)
如果真 (寻找文本 (进程列表[i].进程路径, "Tencent", , ) ≠ -1)  ' 路径包含特征字符
信息框 ("目标程序存在", 0, , )
跳出循环 ()

计次循环尾 ()


i支持库列表   支持库注释   
eAPI应用接口支持库

回复

使用道具 举报

结帖率:92% (12/13)

签到天数: 2 天

 楼主| 发表于 2025-2-28 00:50:01 | 显示全部楼层   河北省邯郸市
憨憨问号 发表于 2025-2-27 11:48
这个检测是无解的,改名之后用进程是否存在肯定是找不到了
我推荐几个方法:
1.枚举窗口

那如果检测的程序没有调用dll呢
回复

使用道具 举报

结帖率:92% (12/13)

签到天数: 2 天

 楼主| 发表于 2025-2-28 00:50:26 | 显示全部楼层   河北省邯郸市
萧楚楠 发表于 2025-2-27 13:49
是的大佬占用确实比较高,所以是说这只是一种很粗糙的办法,MD5是不可行的,文件更名之后MD5也会改变 ...

所以这种检测进程是不是有点无解
回复

使用道具 举报

签到天数: 3 天

发表于 2025-2-28 01:06:24 | 显示全部楼层   河北省张家口市
Wenle 发表于 2025-2-28 00:50
所以这种检测进程是不是有点无解

办法很多阿,我说的是一种最简单方便理解的
你也可以取进程取路径,然后取文件大小,精确到字节,快速高效占用低
回复

使用道具 举报

结帖率:43% (3/7)
发表于 2025-2-28 01:37:14 | 显示全部楼层   江苏省徐州市
憨憨问号 发表于 2025-2-27 17:15
你提出的这个问题非常具有普遍性,所以我专门花了一些时间整理了方法,希望能得到你的最佳(注:所有命令均 ...

企鹅头,我觉得吧,你应该单开个帖子
回复

使用道具 举报

结帖率:92% (12/13)

签到天数: 2 天

 楼主| 发表于 2025-2-28 02:59:30 | 显示全部楼层   河北省邯郸市
gx15x5 发表于 2025-2-27 22:50
[e=0].版本 2
.支持库 eAPI

这种取得是详细信息,只要程序改个名字就遍历不到了
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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