现在的位置: 首页 > 综合 > 正文

Mgen 海棠果工程 早期预览版2 – 控制台脚本系统执行主体

2012年10月10日 ⁄ 综合 ⁄ 共 4030字 ⁄ 字号 评论关闭

 

注意

“早期预览版”代表这是软件的部分功能实现和预览,且现有功能也是不稳定的。后续版本更新可能会有大的修改。欢迎用户反馈Bug并请关注更新。

 

版本更新请参考:Mgen 海棠果工程

 

海棠果工程 早期预览版1中,仅仅演示了选择器和筛选器的使用,在早期预览版2后,整个控制台脚本系统的执行主体就完成了。

 

 

当前版本的程序下载

下载地址

注意:此为微软SkyDrive存档,请用浏览器直接下载,用某些下载工具可能无法下载

示例程序运行环境:.NET Framework 3.0(在Windows Vista和Windows 7中默认已经被安装)

 

更新:

有人反映海棠果工程 早期预览版2的主程序(htg.exe)被360安全卫士检测为木马病毒。我测试后发现的确如此,360安全卫士给予的信息如下:

类型:木马-HEUR/Malware.QVM03.Gen

描述:木马通常利用系统的漏洞,绕过系统防御,达到:盗取账号、窃取资料、篡改文件、破坏数据的目的。经过360安全中心检验,此文件是木马,建议您立即处理。

扫描引擎:云特征引擎

文件路径:C:\Users\Mgen\Desktop\Mgen.Htg.EP2\htg.exe

文件大小:108.5K (111,104 字节)

文件版本:1.1.0.0

文件公司:

文件描述:Mgen Htg Project

文件指纹(MD5):6e0cb75b275b10f7b1427411007b5b61

处理建议:隔离文件

 

被误报病的的版本只针对海棠果工程 早期预览版2。我本人对此也表示很无奈,因为海棠果工程完全是C#编写的托管程序,甚至没有任何访问网络的代码,怎么可能是病毒?

简单查找了一下这个所谓的“木马-HEUR/Malware.QVM03.Gen”,发现网上很多人在报怨他们的程序被误报成这个病毒:

比如:链接1链接2链接3

 

如果你不相信我说的话,或许你可以使用一些更专业的杀毒软件来检验一下海棠果工程 早期预览版2是否有病毒。

 

 

返回目录

1. 对早期预览版1部分函数的重命名

为了方便输入,部分早期预览版1的函数被重命名,主要是选择器函数的重命名。

重命名结果如下:

早期预览版1的名称 - 早期预览版2更改后的名称

vtod      - v_d

dtoallf   - d_af

dtoalld   - d_ad   

dtorootf  - d_rf

dtorootd  - d_rd

 

 

返回目录

2. Data Slot - 数据槽的使用

使用数据槽,便可以对当前执行数据进行存储或者重复利用。保存数据槽通过save_slot函数,参数是代表数据槽名称的字符串。加载数据槽函数是load_slot,参数同样是代表数据槽名称的字符串,当load_slot执行完毕后,相应数据槽的内容会替换当前数据(相当于一次setdata调用)。

 

做一个示例,首先用setata选择两个文件夹,然后保存至数据槽s,接着用setdata选择两个文件,然后调用show,这样显示的会是两个文件,因为之前的两个文件夹的数据已经被第二次setdata所覆盖了。然后加载之前保存的数据槽,接着调用show,这次会显示两个文件夹信息。

 

脚本:

ver1;

setdata dir ['c:\\' 'd:\\'];

save_slot 's';

 

setdata file ['c:\\a.txt' 'c:\\b.txt'];

show;

 

load_slot 's';

show;

 

运行结果:

image

 

 

返回目录

3. Actions - 动作的支持

海棠果工程 早期预览版1中讲的选择器和筛选器都是对文件系统的查询操作,那么查询后的结果有什么用呢?第一当然是可以看,是吧,就像你用SQL去查询数据库然后数据库给你返回你需要的结果,海棠果工程的选择器和筛选器是一样的。当然,我们不仅仅可以浏览这些结果,还可以利用这些结果来做操作,这就是“动作”的含义。

 

在详细列举海棠果工程的动作前,我们先看一个简单的示例来说明动作。就拿一个最简单的动作来说吧:文件夹名称随机化,这个动作就是把文件夹的名称改成一个随机文本。函数名称是da.name_rand(da是所有文件夹动作的命名空间)。

 

这是我C盘a文件夹内的内容:

image

下面就利用海棠果工程中的“选择器”,“筛选器”和“动作”把这个文件夹内所有包含“副本”字样的文件夹进行随机重命名。结合已经学到的知识,我们首先需要选择器来选择文件夹C\a,然后再次选择它的所有根文件夹,接着用筛选器筛选出所有包含“副本”字样的文件夹,最后用动作执行随机重命名操作。

 

脚本如下:

ver1;

setdata dir ['c:\\a'];

d_rd;

d.name contain '副本';

save_slot 's';

da.name_rand 's';

 

当执行完毕后,再次打开刚才的C:\a文件夹,你会发现结果会类似这样:

image

 

所有包含“副本”字样的文件夹都被重命名了。

 

OK,一个简单的示例过后,我们继续详细讲海棠果种的“动作”。上面示例脚本的最后一行你可以看到,动作执行函数da.name_rand传入一个参数是s,而这个s正是倒数第二行save_slot保存的数据槽名称。为什么先介绍数据槽,就是因为动作需要参数,而参数的来源就得靠数据槽,随机重命名需要一个参数,所以只需传入一个数据槽名称,还有许多动作函数需要多个数据槽,比如文件复制功能。

 

下面这个例子,我们执行这样一个操作,将C盘b文件夹下的所有文件复制到C盘a文件夹中的所有根文件夹中。C盘a文件夹刚才已经做了重命名操作了(如上图),那么这个操作以后,上图中所有文件夹内都会包含C盘b文件夹中的内容。

 

文件复制到文件夹的操作函数是:fa.copyto(fa是所有文件操作的命名空间)。参数是两个字符串,分别代表两个数据槽名称。第一个数据槽代表所有文件列表。第二个数据槽代表所有复制到的文件夹列表。

 

脚本:

ver1;

setdata dir ['c:\\b'];

d_rf;

save_slot 'src';

 

setdata dir ['c:\\a'];

d_rd;

save_slot 'dest';

 

fa.copyto 'src' 'dest' yes;

 

OK,执行完毕后,每一个C盘a文件夹内的文件夹,都会有C盘b文件夹中的文件内容。

 

早期预览版2中搭载有如下动作函数:

文件操作动作的命名空间:fa

文件夹操作动作的命名空间:da

=========================

copy:复制

参数1:源路径数组

参数2:目标路径数组

参数3:

  对于文件:bool:是否覆盖

  对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite

 

move:剪切

参数1:源路径数组

参数2:目标路径数组

参数3:

  对于文件:bool:是否覆盖

  对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite

 

copyto:复制到文件夹

参数1:源路径数组

参数2:目标文件夹路径数组

参数3:

  对于文件:bool:是否覆盖

  对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite

 

moveto:复制到文件夹

参数1:源路径数组

参数2:目标文件夹路径数组

参数3:

  对于文件:bool:是否覆盖

  对于文件夹:FolderNotOverwrite, FolderOverwrite, FileNotOverwrite, FileOverwrite

 

del:删除

参数1:路径数组

 

tcre, tmod, tacc:修改创建,修改和访问时间。

参数1:路径数组

参数2:时间

 

attr:修改属性

参数1:路径数组

参数2:Set,Add和Remove分别代表设置,增加和移除功能。

参数3:任何System.IO.FileAttributes成员

 

name_rand:随机重命名

参数1:路径数组

参数2(可选):文件名称长度(默认是20)

参数3(只针对文件):是否保留文件扩展名(默认是

 

所有路径数组参数都由数据槽来加载。

 

返回目录

4. 对驱动器的选择器和筛选器支持

早期预览版1中只有最简单的对驱动器的选择器,而且还没有任何筛选器支持。在早期预览版2中添加了更多对驱动器的选择器和筛选器支持。

 

首先在setdata设置驱动器数据时,可以使用冒号来代表所有驱动器,注意setdata的第二个参数是数组,所以还是需要用中括号括住的,那么这样写:

ver1;

setdata drive [':'];

show;

 

结果:

image

 

其次还增加了许多针对驱动器的筛选器,如下:

驱动器筛选器

命名空间:v

 

type:驱动器类型

参数1:System.IO.DriveType枚举值

 

format:驱动器文件系统格式

参数1:字符串

 

total:总大小(容量)

参数1:大小(最小值)

参数2:大小(最大值)

 

free:可用空间

参数1:大小(最小值)

参数2:大小(最大值)

 

free_quota:可用空间(考虑用户配额)

参数1:大小(最小值)

参数2:大小(最大值)

 

volume_label:卷标

参数1:字符串比较类型

参数2:目标字符串

 

举例,首先输出所有可移动驱动器名称,接着输出所有文件系统格式是NTFS的驱动器。

 

脚本:

ver1;

setdata drive [':'];

v.type removable;

print '所有可移动磁盘';

show;

 

setdata drive [':'];

v.format 'ntfs';

print '所有文件格式为NTFS的磁盘';

show;

 

运行结果:

image

 

下方还会有提示:某些驱动器(比如光盘驱动器)因为没有插入任何光盘从而无法检查其文件格式。

【上篇】
【下篇】

抱歉!评论已关闭.