wesuex使用说明

wesuex是一款用来辅助用户来管理系统权限的软件,支持最新的Windows 10。通过wesuex可以使指定的进程运行在指定的权限或者账户下,以此可以达到保护系统安全,保障隐私等目的。本产品为开源软件,采用MIT License进行发布。目前发布的版本仅支持64位操作系统,并且要求系统版本高于Windows 7 SP1如果不能满足系统要求则无法正常使用。并且值得注意的是,由于依赖于Windows自身的权限管理机制,Windows内核上的漏洞将会直接降低权限管理的安全性,所以并不推荐使用过旧的操作系统,建议采用最新的Windows 10,并且务必为系统打好补丁。
有关源码请访问:https://github.com/wevsty/wesuex
安装包下载地址:https://github.com/wevsty/wesuex/releases
安装程序采用NSIS进行打包发布,安装过程十分简单,过程不再赘述。
安装完毕后在任意文件上右键可以看到wesuex的菜单,如下图所示。

单击菜单后程序将根据要启动的程序寻找启动配置文件。
比如,对regedit.exe右键选择wesuex打开,那么wesuex会在自己的安装目录中寻找regedit.exe.ini,如果regedit.exe.ini这个配置文件不存在,则会使用程序默认自带的default.ini。
default.ini如下图所示,配置文件中可以记录程序的启动方法,用来详细管理权限。

wesuex将会寻找START_MODE项下的Program作为启动程序Command作为传递给启动程序的命令行并以MODE选项下的指定模式来启动程序。默认配置文件中wesuex_starts.exe是一个启动器,通过启动器使得程序可以开打.docx这样的非可执行文件,如果需要自定义启动程序也可以指定位其他的程序。Command选项在传递过程中将会自动替换%command%为传入的命令。
START_MODE项下的MODE选项用于指定程序将以什么样的权限来支持,目前支持3种选项。
LOW_PERMISSIONS:程序将默认按照低权限来启动指定的程序,这时程序会加载LOW_PERMISSIONS项下的选项。
integrity_level_sid用来指定进程完整性级别(Process integrity levels),UAC通过进程完整性级别来限制程序,UAC开启的状态下程序启动通常为Medium Mandatory Level权限,这个权限将限制程序修改系统中的关键文件或者配置,作为默认配置,推荐使用。
Administrators_SID用来去除Administrators组的权限,此选项无论是否存在都将强制禁用程序的Administrators权限。
AuthenticatedUser_SID选项为”DISABLE”是,将会禁用程序的AuthenticatedUser权限,如果选项不存在则不会禁用此权限。Authenticated Users代表的是Windows系统中所有使用用户名、密码登录并通过身份验证的账户。
通过限制这些权限,我们就可以阻止对系统进行修改。
举例,按照默认配置低权限启动taskmgr.exe(任务栏管理器)后我们就可以很明显的观察到,任务栏管理器中无法显示很多进程的用户组,并且也无法结束那些进程。
效果如下图所示:

也可以使用procexp来详细确认程序的权限。
procexp下载地址:https://technet.microsoft.com/en-us/sysinternals/bb896653/

当配置文件START_MODE项下的MODE为LOGIN_WITH_USER时将会加载LOGON_INFO中的配置,按照指定的用户名和密码登录账户并以此权限执行程序。(程序并不会自动创建账户,默认配置文件中仅作为示例)
注:配置文件中指定的账户可能需要至少登陆过一次,否则启动将可能会出现错误。
运行taskmgr.exe(任务栏管理器)的效果如下图所示:

当配置文件START_MODE项下的MODE为SYSTEM时,wesuex将会以system权限来启动该程序。
注:一般来说不需要使用system权限,如果使用此选项那么程序将拥有较大权限,这可能会产生安全问题。

我们可以为指定的程序创建指定的配置文件,这样使用右键菜单执行程序时,可以让程序以最合适的权限来进行启动。
唯一需要注意的是,如果程序已经以一个权限正在运行,那么在使用wesuex右键执行时可能无法降低或提高程序的权限。比如explorer.exe(资源管理器),如果直接对explorer.exe使用wesuex,由于explorer.exe并不会创建新进程而是以已经存在的进程打开一个新窗口,所以实际上更改权限的操作可能无效。

Qt教程-Qt Creator开发实例-计算器

经过前面的几篇文章,相信大家对于Qt Creator这个IDE以及Qt基本的使用方法有所了解。这篇文章我们使用已经了解过的技术简单的定制一个计算器。
这里我们基于Qt Creator中定制GUI程序04(国际化多语言)中提供的工程在继续往下开发。
相信大家都用过Windows下的计算器,作为一个计算器,我们需要一个用来输入和显示结果的文本框(QTextEdit),我们还需要一些数字符号的按钮(QPushButton)。这些都是常用的控件,我们可以直接在Qt Creator上拖出来。

我们这里对整个窗口使用垂直布局,最上方放置了一个文本框,下方我们放置了一个QGridLayout(珊格)布局在布局中放置了很多个按钮分别表示数字0-9和加减乘除等按钮。
放置后我们需要调整标识控件的名称(objectName属性),控件显示的内容(比如QPushButton中的text属性),控件自动缩放的属性(sizePolicy),并为每个按钮控件设置快捷键(shortcut属性)。
设置完成后结果如下图所示。

如果我们想对用户按下按钮作出反应,常规的做法是,为每个按钮注册Clicked的信号。不过很显然我们一个一个注册实在是太麻烦了,这里我们使用了一个偷懒的办法,按钮组(QButtonGroup)。如果我们需要处理界面上多个类似功能的按钮,我们可以把这些按钮组成一个组,然后为一个组设置一个响应函数就可以了。

在这里需要注意的是Qt Creator不能直接对buttonGroup组本身设置槽函数,所以需要手动创建一个槽函数并手动连接到信号。
这里我选择在界面初始化时connect buttonGroup的buttonClicked信号到一个MainWindow中的Button_clicked函数。

这样组内的任意按钮产生Clicked事件都会调用Button_clicked这个函数,我们可以看到Button_clicked函数传入了一个QAbstractButton对象的指针,这个指针用来确定组中具体是哪个按钮被按下了。
在计算器上,如果用户按下的按钮是数字,则显示在文本框里,如果是符号,则展开清屏或者计算操作。
这里我直接给出实现。

我们简单的解释一下,通过ojbect_button指针我们可以调用text函数获取控件的text属性,通过text属性我们就可以知道是哪一个按钮被按下,如果是数字则直接添加到textEdit文本框中,如果是符号则进行相关处理。通过setText函数我们可以设置文本框显示的内容。
这里为了避免未知的问题,我限制了表达式的长度为20个字符,超过会显示ERROR,大家可以自行修改此处。
我们可以看到当等号按钮被按下时,这里调用了calc_string_to_rpn_string和calc_rpn_string这两个函数。这两个函数用于把我们常见的中缀表达式转换成逆波兰表达式(也叫后缀表达式),最后在计算逆波兰表达式得到结果。
把中缀表达式转换成逆波兰式是为了更方便我们进行计算,这方面网络上有非常多的资料,我不过多赘述,直接给出有关的实现。

这里我们简单的说明一下,QString这个类与std::string有一些区别。我们都知道std::string实际上就像个vector是一个单字节的字符串实现,很显然char类型容纳不了所有的汉字,为了能储存显示汉字(或者其他的语言)std::string在不同平台可能有不同的编码实现,比如在Linux上std::string中的内容采用的是UTF-8编码,而在Windows下使用的则是ANSI编码,对于中文版的Windows来说就是GBK编码。如果全都是UTF-8可能没有什么问题,但是对不同语言版本的Windows编码就成为了大难题,如果开发者想一劳永逸的解决各个语言版本的编码兼容性,Microsoft推荐大家使用UNIOCDE编码(对于高于Windows 2000的系统版本,就是UTF-16编码,至于低于Windows 2000的系统版本,我建议选择拒绝兼容)但是使用UTF-16编码则不能直接与Linux系统兼容。
多系统的兼容很显然是一件非常麻烦的事情,作为传统的开发方法,开发者必须考虑每个平台的特点作出取舍或者写上一堆转换编码的函数互相转换。在Qt中QString这个类为我们提供了统一的解决方案,QString内部采用了UNIOCDE编码,这样使得任何文字都能正确的储存在QString中,在Windows上也可以直接获得良好的兼容性。当然作为牺牲,如果想用我们熟悉的char来解决问题,需要使用toLatin1函数转换成Latin1编码。
QStack和std::stack类似,用来作为栈这种数据结构使用,熟悉栈的同学应该对pop,push,top等操作一目了然。
最后我们可以编译看运行结果。运行结果如下图所示。

当用户按下等号后将会计算出正确结果14.
工程源代码下载地址:
https://www.exvs.org/wp-content/uploads/public/Qt_Tutorial/qt_calculator_FCE2BED0.7z