精易模块v10版本更新函数使用

精易模块v10.0.0 也是更新了有段时间了,针对主要更新的部分命令UP制作了本章来讲解如何使用这些命令,当然因为中文命名的原因,使用起来还是比较奇怪的。
更新主页:http://ec.125.la/update.htm
下载地址:https://8b5d49.link.yunpan.360.cn/lk/surl_ykriZ24fgyn#/-0
如何使用模块就不介绍了,新手请看:BV1rt411P7HZ
新增
1.系统_遍历右键菜单并执行
这个函数有两个版本,“系统遍历右键菜单并执行W”
系统_遍历右键菜单并执行的参数如下:
返回值类型:逻辑型 参数<1>的名称为“文件路径”,类型为“文本型”。 参数<2>的名称为“欲执行的菜单”,类型为“文本型”。
其中我们使用"系统遍历右键菜单并执行"其实就是在调用"系统遍历右键菜单并执行W"的基础上进行了编码转换。
通过遍历本次测试的文件"Test.txt",我们获得了以下字节集:
字节集:14{83,98,0,95,40,0,38,0,79,0,41,0,0,0} 打开(&O)
字节集:14{22,127,145,143,40,0,38,0,69,0,41,0,0,0}编辑(&E)
字节集:22{40,87,153,108,216,118,45,78,208,143,76,136,40,0,38,0,88,0,41,0,0,0}在沙盘中运行(&X)
字节集:14{252,91,101,81,126,129,175,139,135,101,99,104,0,0}导入腾讯文档
字节集:22{26,144,199,143,32,0,67,0,111,0,100,0,101,0,32,0,83,98,0,95,0,0}通过 Code 打开
字节集:10{113,81,171,78,11,32,11,32,0,0}共享??
字节集:0{}
字节集:0{}
字节集:24{216,143,159,83,229,78,77,82,132,118,72,114,44,103,40,0,38,0,86,0,41,0,0,0}还原以前的版本(&V)
字节集:0{}
字节集:14{106,82,7,82,40,0,38,0,84,0,41,0,0,0}剪切(&T)
字节集:14{13,89,54,82,40,0,38,0,67,0,41,0,0,0}复制(&C)
字节集:22{27,82,250,94,235,95,119,99,185,101,15,95,40,0,38,0,83,0,41,0,0,0}创建快捷方式(&S)
字节集:14{32,82,100,150,40,0,38,0,68,0,41,0,0,0}删除(&D)
字节集:16{205,145,125,84,13,84,40,0,38,0,77,0,41,0,0,0}重命名(&M)
字节集:14{94,92,39,96,40,0,38,0,82,0,41,0,0,0}属性(&R)
其中我们通过翻译第一个参数可以知道是“打开(&O)”,当然不要直接用到文本翻译,因为是Unicode编码,所以我们需要提前用Unicode到Ansi进行转换,不然的话直接转文本出来的是:"Sb"(鬼知道为什么是这个)
然后就简单了,因为第二个参数让我们填的就是执行的名字,当然"系统_遍历右键菜单并执行W"的第一个和第二个参数都是字节集,所以还需要自己手动转字节集一下。
这里为了方便我们直接用转换过来的名称:打开(&O)
结合下参数就成了:系统_遍历右键菜单并执行 (取运行目录 () + “\Test.txt”, “打开(&O)”)
本参数的效果就出现了,我们对一个文件的右键菜单进行了遍历,并找到执行了我们想执行的打开(&O)项目。(其他菜单项也是如此,这里就不一一列举了)。
参考文章:https://blog.twofei.com/663/
2.程序_伪装资源管理器
这个函数听名字就很有意思,伪装成资源管理器诶。
函数无需任何参数,仅有逻辑型返回值,直接调用就行。
具体原理大概就是通过NtQueryInformationProcess修改进程PEB信息而成的,所以可能会被病毒使用而隐藏自身。
参考文章:https://baijiahao.baidu.com/s?id=1680131754365827902&wfr=spider&for=pc
3.程序_从任务栏解锁
这个从名字看就是将项目从我们的任务栏解锁,平时我们会在任务栏固定一些程序方便打开,解锁时使用的命令便是这个。
这里测试时UP先在任务栏固定了测试用的文件:"Test.exe",只有后缀没有数据。
然后调用这条命令解锁,顺带一提,固定的话使用的是:程序_锁定到任务栏 ()
结果UP发现只能针对程序文件,普通的文件比如zip、文件夹都不行。
所以也是一个缺点算是。(测试环境 Windows10 Pro 19042.1288)
4.进程_取资源字符串
这个函数用于提取模块中的字符串资源,我们可以用XNResourceEditor进行查看模块中的资源,比如我们常见的shell32.dll中就不仅有图标资源,还有字符串资源,这里UP使用了其中的id:61 的字符串资源作为演示;
代码:进程_取资源字符串 (“shell32.dll”, 61)
通过返回我们获得了其中的资源:(调试) ,这和在XNResourceEditor中查看的是相同的,在编写国际化的应用程序里,经常要使用不同语言的字符串。比如中文菜单里叫做“文件”,而在英语里叫做“File”。开发这种软件的功能是一样的,只是界面上显示的文字不一样而已。为了方便这种软件的开发,在Windows里经常使用的方法就是替换掉显示的字符串,比如指定在中文里就显示“文件”,在英语里就显示“File”,是通过函数LoadString从不同的资源里加载不同的字符串显示来实现的。其实所有可变的字符串,都可以使用函数LoadString从资源里加载字符串显示。
此函数也是通过间接调用 进程_取资源字符串W 进行的,W所定义的参数是字节集。
参考文章:http://www.hankcs.com/program/cpp/loadstring_usage.html
https://jingyan.baidu.com/article/4ae03de3462cb57ffe9e6b4b.html
https://baike.baidu.com/item/LoadString/6777795?fr=aladdin
5.进程_是否被挂起1
与“进程是否被挂起”定义不同的是“进程是否被挂起”是通过检测响应时间判断进程是否被挂起,而本函数是通过NtQuerySystemInformation判断进程是否被挂起。
参数仅有一个程序的pid,返回值为逻辑型。
测试程序中UP使用了输入框可以自行输入pid测试。
6.程序_自定义列表项目W
描述为:自定义跳转列表的任务类别中的项目。
这里有其自定义数组类型为:精易_任务列表项目 .成员 目标, 字节集 .成员 命令行, 字节集 .成员 图标路径, 字节集, , , icon .成员 起始位置, 字节集 .成员 标题, 字节集
在其测试时UP也遇到了很多麻烦,我们需要对其编译之后才能正常使用,在调试模式下不会被注册跳转列表,也就不会弹出相关项目,其中的几个类型全是字节集型的,我们在使用时候需要使用Ansi编码到Unicode编码进行转换,例如:编码_Ansi到Unicode (取运行目录 () + “\” + 取执行文件名 (), )
其他几个参数这里先不做阐述,我们在使用时需要定义一个数组类型的精易_任务列表项目,不然是无法填入函数的。
例子:
.局部变量 任务列表, 精易_任务列表项目, , "1"
任务列表 [1].目标 = 编码_Ansi到Unicode (取运行目录 () + “\” + 取执行文件名 (), )
程序_自定义列表项目W (任务列表)
这样启动程序后我们便可以在任务栏的跳转列表中添加指定的项目。
参考文章:https://blog.csdn.net/ntwilford/article/details/5623744
https://blog.csdn.net/ntwilford/article/details/5648781
https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/winui/shell/appshellintegration/CustomJumpList/CustomJumpListSample.cpp
https://docs.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-icustomdestinationlist
https://jingyan.baidu.com/article/19020a0ac1b526529d284295.html
7.程序_禁用固定设置
描述:禁用将快捷方式或窗口固定到任务栏或开始菜单的功能。
参数1:窗口句柄 整数型
返回值:逻辑型
使用函数后,指定的窗口在任务栏中右键的菜单当中便没有固定到任务栏选项,但根据UP测试,使用之后扔能通过拖放、文件右键菜单等方式固定到任务栏和开始菜单当中。(汗)
参考文章:https://docs.microsoft.com/zh-cn/windows/win32/properties/props-system-appusermodel-preventpinning
8.文件_是否为64位
间接调用 文件_是否为64位W ,用于判断可执行文件是否为64位。
参数1:文件路径 文本型
返回值:逻辑型
文件_是否为64位W 中文件路径定义为字节集,需要将文本型的路径进行编码转换(Ansi->Unicode)
9.文件_修改访问权限
参数<1>的名称为“文件路径”,类型为“文本型”。注明:文件或目录。 参数<2>的名称为“用户名”,类型为“文本型”。注明:Administrators。(微软账号用户名为邮箱地址或缩写和英文名) 参数<3>的名称为“权限”,类型为“整数型”。 参数<4>的名称为“类型”,类型为“整数型”。注明:#SET_ 或 #DENY_。
前两个参数不是很重要,这里主要讲一下后两个参数及函数。
函数使用BuildExplicitAccessWithNameW修改用户权限,类似于我们平时删除文件时结果发现没有权限,然后在属性>安全选项中编辑权限。
权限种类:
https://docs.microsoft.com/en-us/windows/win32/secauthz/access-mask
0-15 具体权利。包含特定于与掩码关联的对象类型的访问掩码。
16-23 标准权利。包含对象的标准访问权限。
24 访问系统安全 ( ACCESS_SYSTEM_SECURITY )。它用于指示对(SACL) 的访问。这种类型的访问要求调用进程具有SE_SECURITY_NAME(管理审计和安全日志)权限。如果在审计访问 ACE(成功或不成功访问)的访问掩码中设置了此标志,则将审计 SACL 访问。
25 允许的最大值 ( MAXIMUM_ALLOWED )。
26-27 预订的。
28 通用所有(GENERIC_ALL)。
29 通用执行 ( GENERIC_EXECUTE )。
30 通用写入(GENERIC_WRITE)。
31 通用读取 ( GENERIC_READ )。
权限16-23中一部分:
16 DELETE 删除
17 READ_CONTROL 对安全描述符的所有者、组和(DACL) 的读取访问权限
18 WRITE_DAC 对 DACL 的写入权限。
19 WRITE_OWNER 对所有者的写入权限。
20 SYNCHRONIZE 同步访问
类型种类:
https://docs.microsoft.com/en-us/windows/win32/api/accctrl/ne-accctrl-access_mode
NOT_USED_ACCESS 未使用的值
GRANT_ACCESS 指示结构。新的 ACE 将指定的权利与任何现有的受托人允许或拒绝的权利相结合。
SET_ACCESS 指示允许指定权限的在输入时,此值会丢弃受托人的任何现有访问控制信息。
DENY_ACCESS 表示拒绝指定权限的结构。在输入时,除了受托人当前拒绝的任何权利之外,该值还拒绝指定的权利。
REVOKE_ACCESS 指示已删除指定受托者的所有现有或结构。
SET_AUDIT_SUCCESS 指示结构,该结构为成功尝试使用指定的访问权限生成审计消息。在输入时,此值将指定权限与受托人的任何现有审计访问权限相结合。
SET_AUDIT_FAILURE 指示结构,该结构为使用指定访问权限的失败尝试生成审计消息。在输入时,此值将指定权限与受托人的任何现有审计访问权限相结合。
测试程序中UP使用取当前用户名当做参数二(用户名),删除当前用户对测试文件Test.txt的写入权限
参考文章:https://www.cnblogs.com/huhu0013/p/4595650.html
https://docs.microsoft.com/en-us/windows/win32/api/aclapi/nf-aclapi-buildexplicitaccesswithnamew
https://docs.microsoft.com/en-us/windows/win32/secauthz/standard-access-rights
10.系统_是否为Server版本
这个函数非常简单,没有任何参数,使用后仅返回一个逻辑值判断系统是否为Server版本。
测试程序中UP使用信息框弹出其返回值,可查看是否为Server版。
参考文章:https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-verifyversioninfow
https://docs.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-versetconditionmask
11.进程_取执行权限级别
这个函数就很有意思,我们可以通过此函数获取指定进程的权限级别,返回值是整数型,用整数型标识各个级别:0、低级;1、中级;2、高级;3、系统级;-1、未知;
例如在测试程序中,UP在易语言的编译权限设置当中标记了自动获取UAC管理权限,程序启动后所获得取得的权限值就是2(高级),当然在调试时调试等级也一样为2(高级),我们通常可以使用此函数判断是否能进行下一步程序,例如在进行部分需要高权限的操作时,可以先使用此函数判断权限是否可以访问。
测试程序中UP将获得权限值使用多项选择列举权限等级。
代码:id = 进程取执行权限级别 (进程取自进程ID ()) + 1 信息框 (多项选择 (选择 (id = -1, 5, id), “低级”, “中级”, “高级”, “系统级”, “未知”), 0, , )
12.文件_遍历PE导入表
这条函数可以遍历可执行映像的PE导入表获取导入DLL文件的名称,其使用方式主要在其传值的参数上,参数一规定为文件名,不需要做过多描述,参数二为导入DLL文件的名称,是一个自定义文本数组类型,我们需要规定一个数组长度为0的文本型数组传入。
测试程序中UP使用通用对话框中的打开文件方式来选择pe文件,选择完成后我们需要执行一遍此函数,执行后便可以对参数二中传入的文本数组进行遍历,最后输出结果UP用信息框弹出。
另外,此函数的返回值为导入表的dll个体数量。
13.文件_遍历PE导出表
这条函数看似和12的文件_遍历PE导入表相似,但他遍历的是pe的公开函数表,例如我们在dll中公开了一段名叫Test的函数,那么我们使用此函数便可以遍历出来其中公开的Test函数名。
测试程序中使用了和"文件遍历PE导入表"相同的结构,返回值和"文件遍历PE导入表"的一样,都是返回数量,不过这个数量是公开函数的数量。
另外警告,此函数和"文件_遍历PE导入表"只针对可执行映像文件起作用,不要试图对其他文件操作。
14.文件_取MIME类型
有关MIME文件类型的介绍:https://baike.baidu.com/item/MIME/2900607?fr=aladdin
这里就不做太多的MIME文件类型介绍,此函数非常简洁声明,直接就是获取MIME类型,参数也只有一个文件路径,我们传入文件路径后便能获得该文件后缀的MIME类型,例如txt文件就会获得text/plain,而exe文件就会获得:application/x-msdownload
参考文章:https://www.cnblogs.com/tianma3798/p/7054396.html
https://zhidao.baidu.com/question/750558875126710972.html
15.进程_是否有管理员特权
这个函数和11(进程_取执行权限级别)相似,不过是直接判断是否为高级权限,当我们的程序处于非UAC而是正常启动的状态下是中级权限,以管理员模式启动后获取的便是高级权限,当然提权的函数之前也有做过介绍,如果我们要通过取权限级别判断是否有管理员权限的话就直接判断返回值是否为高级或更上一层的权限,使用此函数也是如此,如果我们不想手写一个判断的话可以直接使用此函数来判断进程是否有管理员权限。
‘注明:如果我们在易语言编译配置选项中勾选运行前是否请求管理员权限(UAC)那么我们的程序编译后在图标右下角便会出现那个盾牌标识,有盾牌标识的执行文件在双击运行后会直接以管理员方式运行,没有这个标识的话可以通过相关函数实现提权。
16.SaveBitmapToImage
描述:将位图句柄转换成为BMP图片。
通过此函数我们可以直接将位图句柄转换为BMP文件字节集并返回。
测试程序中UP使用位图类创建了一张200*200像素的白底图片,并在斜线方向画了一条黑色直线,并用SaveBitmapToImage将其创建后的句柄转为图片并显示到图片框上。
17.CopyBitmap
描述:复制位图句柄指定范围,成功返回位图句柄。
这个参数有五个参数,第一个是位图句柄,第二和第三个是在原图上复制矩形的xy坐标,这里我们可以不填写,这样默认就是从图片的左上角开始复制,剩下第四和第五个参数就是复制矩形的大小,这里我们填了10*10大小的矩形大小,相比原图来说是非常小的。
测试程序中在16(SaveBitmapToImage)中创建的位图基础上进行操作,将位图反馈的句柄作为第一个参数,复制矩形的左上角坐标不填写,复制矩形的大小为10*10。