整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

「原创」用Htmlhelp Workshop制作Wi

「原创」用Htmlhelp Workshop制作Windows 帮助文件


(本?文?作?于?2013年?并?发?表?在?其?它?平台,因?时?间太久?个?别?配?图?已?不?能加?载?)对于经常开发应用软件的人来说,都希望创建一个帮助系统,帮助使用者了解自己软件的功能与应用方法。如何创建自己软件的帮助系统呢?本文就这方面的问题谈谈自己的应用方法,也希望通过自己的实际应用经验能对朋友们有所帮助。

Windows 98及以上版本的帮助文件与Windows 95的有比较大的改变,它使用一种基于HTML文件特征的帮助文件,用Internet Explorer显示帮助内容,支持HTML、ActiveX、Java、脚本(Java脚本和VB脚本)以及HTML图像格式(.JPEG、GIF、PNG),它的图标也变了,后缀名为chm,Windows 98称之为Compiled HTML Help File。为了叙述方便,下面就称之为chm文件。典型的Windows 98规范的帮助文件(.chm文件)的窗口和Windows 98资源管理器差不多,左侧是目录、索引和搜索这三个功能项,通过选项卡切换;右侧是HTML文件的显示部分,改变了原来帮助文件目录窗口和主题窗口分离的情况。由于HTML文件具有多媒体表现力,因此chm文件的内容不再局限于文字和静态图像,在其中可以插入GIF动画,也可以利用浏览器的插件在文档中播放声音文件、动画影片、或其它格式的多媒体内容。加入URL地址可与因特网联系在一起,这样chm文件就不局限于包装好的内容了,它是微软公司的下一代联机帮助系统。同时,chm文件的核心是充分利用HTML文件的表现能力,对分散的HTML文件作整体的包装,这也是目前在Web网页以外利用HTML文件的一个趋势。如果你用这个方式制作学习教程、电子图书和杂志,或为用户提供产品目录和宣传材料,比已经流行的PDF文件更简洁和方便。

  chm文件从结构上来看可分为两个部分:运行器和文档内容。运行器是操作系统的一部分,而文档内容随其所附的应用程序而变化。这与以前的Winhelp的结构没有多少差别。不过运行器部分有了较大的改进,运行器很小巧并且不直接运行HTML文件,而是操作一个ActiveX 的组件,控制支持ActiveX 组件的网页浏览器,如微软的Explorer 3.0以上版本的浏览器。它的一个好处是能跨平台运行,只要有不同平台上的运行器和浏览器,chm文件不再需要重新编制。  制作chm文件的工具是微软公司的Htmlhelp Workshop工具包,目前,最新的HTML Help Workshop版本是4.74。这是中文版的,安装Htmlhelp Workshop很方便,只要按照提示进行即可。它的使用也很方便,没有编程和写语言的要求,只要你会制作HTML文件就行了。

  制作chm文件很方便,也很简单。大量的工作是以编写HTML文件为主,它的每个主题就是一个HTML文件,这些主题应该事先编辑好,并用Internet Explorer检查确认无误。主题文件可以用任何一个HTML编辑器编辑,也可用Htmlhelp Workshop编辑。如果不熟悉HTML文件的编辑,还可用Word,因为Word 97以上版本可以把Word文档(.doc文件)另存为HTML文件,还可以将Word文档批量转换成HTML文件。这样就可以完全按照编辑Word文档的习惯编辑成Word文档,再转换成HTML文件。

  运行Htmlhelp Workshop时,它的工作窗口很简单,菜单栏上有五个命令,分别是“文件”、“视图”、“测试”、“工具”、“帮助”。下面的工具栏有五个按钮,分别是“新建”、“打开”、“编译HTML文件”、“校验编译文件”、“联机帮助”。下面介绍具体步骤:

一、创建帮助文本

创建帮助文本是创建帮助系统的第一步。所谓帮助文本,就是针对自己开发的应用软件的功能、使用方法的介绍和说明。这里,以我开发的《通信工程(概)预算系统》为例,谈谈其帮助系统的创建过程。用WORD2000创建《通信工程(概)预算系统帮助》文本。

通信工程(概)预算系统主界面

通信工程(概)预算系统帮助文本

二、创建分页网页文件

根据帮助系统框架结构,将每一段需要分页显示的帮助文本用WORD2000转换成网页文件。下图是通信工程(概)预算系统帮助需要的分页网页文件。

分页网页文件  

三、创建项目文件 

 启动Htmlhelp Workshop系统,打开主界面。







新建一个方案

单击Htmlhelp Workshop菜单或工具栏中的“新建”命令,这时出现“选择新建内容”的对话框。这里有五个选项:“方案”、“文本”、“HTML文件”、“目录”、“索引”。选择“方案”,接着出现“方案”向导,告诉你这个向导可以转换的文件格式,一般情况下我们是要创建方案(.hhp)文件,不需要转换。直接进入“下一步”指定放置的目录和输入文件名就可以了,单击“下一步”,进入了“现有文件”对话框,如果你想将已经存在的文件包含进“方案”里,在下面列表中选择。这里一般空着,这些文件(包括已经编辑好的主题文件)以后可以添加。进入“下一步”后再“确定”就进入了Htmlhelp Workshop工作窗口。在窗口的上方是3个选项卡,分别是“方案”、“目录”、“索引”。在“方案”窗口的左侧是7个按钮,它们的功能名称自上而下分别是:“改变项目选项”、“添加/删除主题文件”、“添加/修改窗口定义”、“HHTML帮助API信息”、“校验HTML源文件”、“保存项目、目录和索引文件”、“保存全部文件并编译”。

  单击“改变项目选项”按钮,出现“选项”对话框,光标在“常规”选项卡的“标题”文本框内闪烁,在这里加入标题,编译后这个标题将出现在chm文件窗口的标题栏中。其它的内容暂时用系统的默认值。然后单击“添加/删除主题文件”按钮,再选择“添加”按钮,把作为封面页的HTML文件添上。封面页的文件一定要有,否则编译的帮助文件运行后,系统会报错。好了,简单的“方案”编辑就完成了。  

四、创建目录文件 

 单击“目录”选项卡,这时系统弹出一个对话框,提示你“方案”还没有关联目录文件(.hhc),你可以创建一个新的目录文件,或者指定一个现有的。这里选择“创建一个新目录文件”,进入下一步请你选定一个新目录文件的名称和存放路径,指定后出现目录编辑窗口。在目录窗口的左侧有11个按钮,前5个分别是:“目录工具”、“插入标题”、“插入页面”、“编辑选择”、“删除选择”,中间4个箭头用来调整指定标题或页面的位置,最后两个已在项目编辑窗口中出现过。根据需要插入标题或页面目录,按下“插入标题”或“插入页面”按钮,都会弹出“目录条目”对话框,在“条目标题”文本框中输入条目的标题,并根据情况选定对应的主题(HTML文件),单击“条目标题”下的“添加”按钮,在弹出的对话框的下面“文件或URL地址”文本框中输入文件名或URL地址并确定;单击“高级”选项卡,在“图像索引”栏中为条目指定图标,比如包含其它条目的条目可以用书形图标,而页面条目的可以用问号图标。如果在单击“插入页面”按钮之前所选择的条目不包含别的条目,也不被别的条目所包含,那么会询问“是否要创建一个起始条目”,选择了“是”会增加起始条目(一级条目),选择了“否”会增加一个子条目。标题可以不添加主题文件或URL地址,也可放置需要的主题文件,作为标题的说明内容。标题可以分为多级,要按照制作的内容统一考虑。如果觉得不满意,可以用左侧的箭头进行调整,也可以选定该条目,单击鼠标右键,不但可以调整,还可以插入标题、主题或目录文件。编辑目录文件是制作chm文件最关键的工作,目录文件应该包含一个chm文件所有目录(主题),而每个目录又包含条目标题(名称)和该条目的主题文件,要避免条目标题与对应的主题不一致的情况出现。等所有目录都添加好后目录就算完成了。

创建目录

已生成的帮助文件 

 完成目录编制后,一个chm文件已具备了雏形,索引的内容暂时空着。保存项目文件和目录文件后就可以编译,编译就是把所有用到的HTML文件统统压缩后包装在一起,形成一个后缀名是.chm的文件。在主工具栏按钮中可以找到编译按钮和试运行按钮,也可直接按项目窗口左下方的“保存全部文件并编译”按钮进行编译。编译后再运行就可以看到作品的面貌了。目录的内容在编译后显示在chm文件窗口的左侧,可以展开标题后显示以下的目录,单击目录可以打开相应的主题文件,显示相应的内容。如果发现问题,还可以进行修改调整。

  五、创建索引文件 

 在Htmlhelp Workshop的工作窗口上单击“索引”选项卡,和创建目录文件一样,也会弹出一个对话框,操作也是一样的。进入索引编辑窗口,左侧也有11个按钮,有8个是已经熟悉的,还有3个分别是:“索引工具”、“插入关键字”、“排序关键字”。所谓关键字是用户可能用到的并与一个或多个帮助主题文件关联在一起的字、词或短语,索引文件(.hhk)也是一个HTML文件,它包含若干个关键字,当用户打开chm文件后,单击索引标签并输入一个关键字后,chm文件将显示与这个关键字有关的主题的列表,非常方便地找到相关主题。单击“插入关键字”按钮,出现一个“索引项”对话框,在“常规”选项卡的“关键字”文本框中输入关键字,单击“添加”按钮指定与该关键字相关联的主题文件。如果想跳转到另一个关键字,在“索引项”对话框中按“高级”选项卡,选中下面的“目的地是另一个关键字”,单击“常规”选项卡,单击“添加”按钮,在“文件或URL地址”框中输入要跳转的关键字,单击“确定”。

创建索引

六、创建搜索 

 chm文件的“搜索”选项卡允许用户在所有主题文件中搜索字、词或短语,将它们的标题显示出来,而且在主题中用醒目的方式来显示。打开一个方案文件,单击“方案”选项卡的“改变方案选项”,在“选项”对话框的“编译”选项卡中选中“编译全文搜索信息”即可。  上述介绍的是编制HTML帮助文件的基本步骤,上手很容易。但它的功能远非这些,如在窗口定义中可以设计你所喜爱的形式,几乎所有的窗口要素都可以改变。向HTML文件中插入快捷方式、相关主题、关键字链接、联想链接、HTML Help ActiveX控件、Java脚本、弹出式窗口等等,详细的内容请参考Htmlhelp Workshop的帮助文件,或微软的相应网页。相信你试过以后一定会喜欢它。

. 前言

最近在查阅Tkinter相关资料,由于在安装后的Tkinter包路径(Python安装路径下的lib\tkinter目录)并没有找到相关的官方文档(诸如pdf、html、chm、txt等格式的文件),所以就只能借助help()函数来查看其官方帮助信息了。

通过摸索,发现Python内置的help()函数能提供不少有用的信息,我在此做了一些归纳总结,特此分享给需要的朋友们。

本文分享内容的目录如下:

前言

help()函数简介

help()语法说明

help()使用实例

结束语

注:本机使用的是Python自带的 IDLE (Python 3.8 64-bit)


1. help()函数简介

help()Python的内置函数之一。通过help()可以调用Python内置的帮助系统,help()函数主要在交互式中使用。

我们在编写Python语言代码使用包、模块、类、函数或方法时,有时会记不清其用途,此时就可以通过help()函数来快捷地查看相关帮助信息。

help()函数特性:

1) 使用方便(是Python内置函数,无需import,直接调用help()即可)

2) 能查看多种类型的帮助信息(包括:包Package、模块Module、类Class、函数Function、方法Method等)

3) 可以将查看的帮助信息保存到指定路径文件中

注意help()函数与dir()函数的区别:

1) help()函数用于查看给定对象的用途的详细说明。

2) dir()函数用于查看给定对象的属性、方法列表。



2. help()语法说明

一、语法:

 help([object])

二、参数及返回:

  • 如果没有给定参数(如help()),则解释器控制台里会启动交互式帮助系统。
  • help()

  • 如果给定的参数是一个字符串(如help('<string>')),则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。
  • help('math.sin')

  • 如果给定的参数是其他任意对象(如help(<object>)),则会生成该对象的帮助页。
  • 注:如果给定的参数列表中出现斜杠/,则意味着斜杠/之前的参数仅是定位的。



    3. help()使用实例

    3.1 查看包的帮助信息

    如,通过执行help('tkinter')查看tkinter包的帮助信息:

    help('tkinter')

    上图中可以看到在控制台上输出了提示信息(Squeezed text (21469 lines).)。原因是由于查询到的tkinter包的帮助信息比较多,所以没有直接在控制台上打印输出。鼠标移动到该提示文字区域时,会弹出浮动提示信息Double-click to expand, right-click for more options.,提示:

    一、双击该文字区域可以在控制台展开显示该帮助信息

     >>> help('tkinter')
     Help on package tkinter:
     
     NAME
         tkinter - Wrapper functions for Tcl/Tk.
     
     MODULE REFERENCE
         https://docs.python.org/3.8/library/tkinter
     ..........
     ..........
     ..........
     FILE
         c:\develop\python\lib\tkinter\__init__.p

    二、或者右击显示菜单选项(如下图示)

    右击菜单

    1)选择copy菜单项:复制该帮助信息到剪贴板,可以复制到一个文件中进行保存。

    2)选择view菜单项:直接打开一个新窗口显示该帮助信息(如下),可以在该新窗口中方便地进行查看。

    新窗口

    3.2 查看模块的帮助信息

    如,通过执行help('tkinter.ttk')查看tkinter包下的ttk模块的帮助信息:

    help('tkinter.ttk')

    3.3 查看某个包/模块下的类的帮助信息

    如,通过执行help('tkinter.XView')查看tkinter包下XView类的帮助信息:

     Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
     Type "help", "copyright", "credits" or "license()" for more information.
     >>> import tkinter
     >>> help('tkinter.XView')
     Help on class XView in tkinter:
     
     tkinter.XView=class XView(builtins.object)
      |  Mix-in class for querying and changing the horizontal position
      |  of a widget's window.
      |  
      |  Methods defined here:
      |  
      |  xview(self, *args)
      |      Query and change the horizontal position of the view.
      |  
      |  xview_moveto(self, fraction)
      |      Adjusts the view in the window so that FRACTION of the
      |      total width of the canvas is off-screen to the left.
      |  
      |  xview_scroll(self, number, what)
      |      Shift the x-view according to NUMBER which is measured in "units"
      |      or "pages" (WHAT).
      |  
      |  ----------------------------------------------------------------------
      |  Data descriptors defined here:
      |  
      |  __dict__
      |      dictionary for instance variables (if defined)
      |  
      |  __weakref__
      |      list of weak references to the object (if defined)


    3.4 查看某个包/模块下的某个类下的某个函数的帮助信息

    如,通过执行help('tkinter.XView.xview')查看tkinter包下的XView类下的xview()函数的帮助信息:

     >>> help('tkinter.XView.xview')
     Help on function xview in tkinter.XView:
     
     tkinter.XView.xview=xview(self, *args)
         Query and change the horizontal position of the view.

    3.5 查看本机Python所有已安装的模块

    通过执行help('modules')查看本机Python所有已安装的模块:

     >>> help('modules')
     
     Please wait a moment while I gather a list of all available modules...
     IPython             binascii            mailcap             squeezer
     MySQLdb             binhex              mainmenu            sre_compile
     PIL                 bisect              markupsafe          sre_constants
     ......................................................................
     base64              macosx              sqlite3             zzdummy
     bdb                 mailbox             sqlparse            
     
     Enter any module name to get more help.  Or, type "modules spam" to search
     for modules whose name or summary contain the string "spam".

    3.6 查看本机python所有模块中包含指定字符串的模块

    如,通过执行help('modules ttk')查看本机Python所有模块中在模块名或概述中包含指定字符串'ttk'的模块:

     >>> help('modules ttk')
     
     Here is a list of modules whose name or summary contains 'ttk'.
     If there are any, enter a module name to get more help.
     
     test.test_ttk_guionly 
     test.test_ttk_textonly 
     tkinter.test.test_ttk 
     tkinter.test.test_ttk.test_extensions 
     tkinter.test.test_ttk.test_functions 
     tkinter.test.test_ttk.test_style 
     tkinter.test.test_ttk.test_widgets 
     tkinter.ttk - Ttk wrapper.

    3.7 查看Python所有的关键字

    通过执行help('keywords')查看Python所有的关键字:

     >>> help('keywords')
     
     Here is a list of the Python keywords.  Enter any keyword to get more help.
     
     False               class               from                or
     None                continue            global              pass
     True                def                 if                  raise
     and                 del                 import              return
     as                  elif                in                  try
     assert              else                is                  while
     async               except              lambda              with
     await               finally             nonlocal            yield
     break               for                 not                 

    3.8 查看常见的主题

    通过执行help('topics')查看Python常见的主题:

     >>> help('topics')
     
     Here is a list of available topics.  Enter any topic name to get more help.
     
     ASSERTION           DELETION            LOOPING             SHIFTING
     ASSIGNMENT          DICTIONARIES        MAPPINGMETHODS      SLICINGS
     ATTRIBUTEMETHODS    DICTIONARYLITERALS  MAPPINGS            SPECIALATTRIBUTES
     ATTRIBUTES          DYNAMICFEATURES     METHODS             SPECIALIDENTIFIERS
     AUGMENTEDASSIGNMENT ELLIPSIS            MODULES             SPECIALMETHODS
     BASICMETHODS        EXCEPTIONS          NAMESPACES          STRINGMETHODS
     BINARY              EXECUTION           NONE                STRINGS
     BITWISE             EXPRESSIONS         NUMBERMETHODS       SUBSCRIPTS
     BOOLEAN             FLOAT               NUMBERS             TRACEBACKS
     CALLABLEMETHODS     FORMATTING          OBJECTS             TRUTHVALUE
     CALLS               FRAMEOBJECTS        OPERATORS           TUPLELITERALS
     CLASSES             FRAMES              PACKAGES            TUPLES
     CODEOBJECTS         FUNCTIONS           POWER               TYPEOBJECTS
     COMPARISON          IDENTIFIERS         PRECEDENCE          TYPES
     COMPLEX             IMPORTING           PRIVATENAMES        UNARY
     CONDITIONAL         INTEGER             RETURNING           UNICODE
     CONTEXTMANAGERS     LISTLITERALS        SCOPING             
     CONVERSIONS         LISTS               SEQUENCEMETHODS     
     DEBUGGING           LITERALS            SEQUENCES           

    3.9 查看内置的类型的帮助信息

    如,通过执行help('str')查看内置的str类型的帮助信息:

    help('str')

    3.10 查看类型的成员方法的帮助信息

    如,通过执行help('str.find')查看内置的str类型的find()方法的帮助信息:

     >>> help('str.find')
     Help on method_descriptor in str:
     
     str.find=find(...)
         S.find(sub[, start[, end]]) -> int
         
         Return the lowest index in S where substring sub is found,
         such that sub is contained within S[start:end].  Optional
         arguments start and end are interpreted as in slice notation.
         
         Return -1 on failure.

    3.11 将帮助信息存入指定路径文件名中

    如将tkinter包的帮助信息存入指定路径:C:/MyHelp/tkinter_help.txt

     >>> import os, sys, string
     >>> sys.stdout=open('c:/MyHelp/tkinter_help.txt', 'a')
     >>> help('tkinter')
     >>> sys.stdout.close()
     >>> 

    如将tkinter.ttk模块的帮助信息存入指定路径:C:/MyHelp/tkinter.ttk_help.txt

     >>> import os, sys, string
     >>> sys.stdout=open('c:/MyHelp/tkinter.ttk_help.txt', 'a')
     >>> help('tkinter.ttk')
     >>> sys.stdout.close()
     >>> 


    结束语

    希望本次分享的对Python内置help()函数的介绍能对您有所帮助! 喜欢的话就点个赞加关注支持一下哈:)

    evice Guard是什么?


    Device Guard将 Windows 10 操作系统限制为仅运行由受信任的签署人签名的应用程序,该功能有助于抵御0day攻击,并且还能有效地应对多态病毒的挑战。它是硬件和软件安全功能的结合,当两者一起配置时,Windows将锁定设备,以使其只能运行受信任的应用程序。如果系统中的应用程序不受信任,则该应用程序将无法运行。在现实情况中,即使攻击者能够获取到Windows内核的控制权,由于设备保护能够对何时可以运行哪些可信任的应用程序具有严格的决策权,因此在计算机重新启动后,恶意软件运行的可能性也将大幅降低。

    如何绕过Device Guard?


    你可以通过自定义CHM文件来绕过Device Guard UMCI (用户模式代码完整性)并执行任意不可信的代码。

    在过去6个月的时间里,出于兴趣的使然,我利用业余时间对如何绕过Device Guard进行了一些安全研究。在此期间,我很幸运地找到了另一个有效绕过设备保护 UMCI的方法,并将该安全漏洞报告给了微软安全应急响应中心(secure@microsoft.com)。

    在与微软应急响应中心的安全研究人员进行沟通之后得知:在此之前,这个安全漏洞已经被另一个安全研究人员发现,不过令我十分兴奋的是,我上报的这个安全漏洞将以我的名字命名并被收录到CVE(公共漏洞库)中。微软应急响应中心的安全研究人员们并不知道另一位研究人员是谁,但是Matt Graeber知道:另一位研究员是马特?纳尔逊,他在之前就已经发现这个绕过Device Guard UMCI的安全漏洞了,这个家伙真的很厉害。

    在这篇博文中,我将阐述我是如何发现这个安全漏洞的以及跟这个安全漏洞相关的一些PoC代码。由于我不是一个资深的逆向工程师,所以在这篇博文中,我将不会对微软针对该安全漏洞发布的补丁进行逆向分析,而是专注于阐述我是如何发现这个安全漏洞的。

    对我来说,我经常在Windows系统以及system32文件夹中查找一些二进制文件来进行研究和分析,这样做的目的是希望可以发现一些新的、有趣的东西去研究和分析。果然,在某些文件夹中,我发现了一个名为hh.exe的二进制文件。接着,我在命令行里运行“hh.exe /?”这个命令,通过情况下,运行这条命令要么会得到一些关于该命令的帮助信息,要么就是一些错误信息。但是,当我在运行上述那条命令的时候,上述两种情况都没有发生,我得到了如下图所示的结果:

    上面这张图片触发了我对hh.exe这个程序的好奇心,这个小技巧在最新的Windows 10操作系统中仍然适用,我猜我们如果需要在一个锁定的系统环境(终端服务器等)中打开一个资源管理器,我们可以通过运行“hh.exe c:\”这条命令来做到这一点。

    在尝试了很多不同的操作后,我意识到我们也可以通过hh.exe浏览互联网。只需要在命令行中输入

    1
    hh.exe "http://www.google.com"

    就可以做到这一点。(以下测试仍然在最新的Windows 10操作系统中进行)执行上述命令后,我得到了如下图所示的结果:

    在所有的尝试操作之后,第一件令我想到的就是去检查hh.exe这个进程的完整性等级,结果如下图所示:

    正如上图所示,在我的系统中,通过hh.exe打开的浏览器是以中等完整性模式运行的,而通过普通方式打开的iexplore进程运则是以低级完整性模式运行,针对我们现在发现的有关hh.exe这个程序相关的信息使得我们有更多的工作需要去研究。

    尝试了很多不同的方法后,我想我应该去创建一个包含有某些代码的自定义帮助文件,因为hh.exe这个应用程序主要用于显示帮助文件。我在网上搜索了与创建自定义帮助文件相关的开源项目,并在下面这篇文章中找到了解决方法:

    https://raw.githubusercontent.com/samratashok/nishang/master/Client/Out-CHM.ps1

    要运行此脚本,我必须首先下载并安装“HTML Help Workshop and Documentation”,下载链接如下所示:

    http://www.microsoft.com/en-us/download/details.aspx?id=21138

    我最终创建了我自己的脚本程序,因为我只想证明我的PoC的正确性并试图弹出一个计算器,所以在PoC脚本里我没有去做其他的一些操作。我的PoC脚本可以在这里找到:

    https://gist.githubusercontent.com/api0cradle/95ae3c7120f16255d94088bd8959f4b2/raw/fa25b85e85bbb64c5cf021adf92b125357086a6f/GenerateCHM_1.0.ps1

    此脚本生成一个简单的自定义的CHM文件,并通过ActiveX启动Calc.exe,不过除了弹出计算器程序之外,或者可以有更有意思的事情可以做,例如,运行Cn33liz StarFighters以获取Empire 代理:https://github.com/Cn33liz/StarFighters/

    下图所示的是我的PoC脚本中的部分代码截图:

    下面这个gif显示了绕过Device Guard相关的一些操作:

    微软在Windows 10 Creators更新版v1703(又叫Redstone 2)中已解决此问题,或者如果要在旧版本的Windows 10上进行修补,可以通过下面这个链接下载补丁包:https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2017-8625

    之后,我将机器更新到Windows 10的v1703,当我尝试运行自定义的CHM文件时,我的系统中得到了如下图所示的报错信息:

    总结


    希望这篇博文能够启发你去进行自己的安全研究,以使得Windows更安全。如果你有兴趣了解有关Device Guard的更多信息,我建议你阅读Microsoft官方文档和Matt Graeber的一些博客:

    https://docs.microsoft.com/en-us/windows/device-security/device-guard/device-guard-deployment-guide

    http://www.exploit-monday.com/2016/09/introduction-to-windows-device-guard.html

    http://www.exploit-monday.com/2016/09/using-device-guard-to-mitigate-against.html

    http://www.exploit-monday.com/2016/10/code-integrity-policy-reference.html

    http://www.exploit-monday.com/2016/11/code-integrity-policy-audit-methodology.html

    http://www.exploit-monday.com/2016/11/Effectiveness-of-Device-Guard-UMCI.html

    http://www.exploit-monday.com/2016/12/updating-device-guard-code-integrity.html