未发布 轻松审计代码安全性,Windows 10有妙招 如果你是软件开发人员,又希望自己开发的软件安全性高一点,那么当前的Windows 10企业内部预览版(10.0.16253)中就有一个功能可以做到。
它的位置在“设置 – > Windows Defender – > Windows Defender安全中心 – >应用程序和浏览器控制 – >漏洞保护设置”中,你可以为整个系统或特定程序启用自定义漏洞利用设置。其中有很多不同的保护特性并且许多都可以在审计模式下打开。在审计模式下,它不是在出现情况时终止进程,而是将事件写入事件日志。对于管理员,这就意味着其会允许软件继续运行,同时能够使我们意识到这一情况是何时发生的。对于希望通过了解这些情况以此来改进产品的人来说,它其实是提供了一个启用安全功能的附加好处,即无需重新编译(在某些情况下),就能告诉你确切的程序代码在当它在运行时遇到问题的位置。在版本10.0.16253中,可以进行审计的保护特性包括:
任意代码保护 - 防止非图像支持的执行代码和代码页修改(例如VirtualAlloc / VirtualProtect创建/修改的代码)
阻止低完整性图像
阻止远程图像
阻止不受信任的字体
代码完整性守护者
禁用Win32k系统调用
不允许子进程
导出地址过滤 - 将功能修补到另一个功能的一个常见方法中的一个步骤
导入地址过滤 - 将功能修补到另一个功能的一个常见方法中的一个步骤
模拟执行
验证API调用(CallerCheck)
验证图像依赖完整性
验证堆栈完整性
要充分利用此功能,我们需要安装Windows Performance Toolkit。它是Windows SDK安装程序的安装选项之一。当您启用了您感兴趣的设置后,打开管理命令提示符并浏览到Windows Performance Toolkit目录(通常为Program Files(x86) Windows Kits {Version} Windows Performance Toolkit)。您可以通过运行以下两个命令(在替换文件名所需的任何路径之后)启动并开始收集上述漏洞保护设置的跟踪以及解析堆栈跟踪所需的数据: xperf - “PROC_THREAD + LOADER”-f“wdeg_klogger.etl”
xperf -start“WDEG” - “Microsoft-Windows-Security-Mitigations:0xFFFFFFFFFFFFFF:0xFF:'stack'”-f“wdeg_unmerged.etl”
在您运行任何想要收集的方案之后,您可以停止跟踪并将数据与以下内容合并(再次替换文件名所需的任何路径):
xperf -stop -stop“WDEG”-d“wdeg_merged.etl”
然后,您可以删除创建的前两个文件,因为此时您将拥有第三个所需的所有数据。您可以在Windows Performance Analyzer(WPA)中打开生成的etl文件,并查看数据。
您可以使用wpaPreset文件扩展名保存它,在WPA中加载数据,转到我的预设(在WPA的较新版本中的文件 – >窗口 – >我的存在),选择导入,浏览到保存预设的任何地方,选择它,并双击它以显示视图。另外,您还需要加载符号,以充分利用这一点。您可以在WPA中在File-> Configure Symbols下设置符号; 您需要将其指向msdl.microsoft.com/download/symbols上的Microsoft符号服务器以及您的符号服务器(或您没有符号服务器设置的符号文件的位置)。您可以在加载跟踪时自动配置WPA加载符号,但也可以通过转到文件 – >加载符号来手动加载符号。一旦完成,您将能够轻松地查看堆栈跟踪。它就会像下面这样:
以下是在创建上述过程中我为x64控制台应用程序编译的示例代码:
#include #include using namespace std;void* CreateCodeInVirtualMemory(BOOL writable)
{ BYTE code[3] = { 0x33, 0xc0, 0xc3 }; LPVOID result = VirtualAlloc(NULL, sizeof(code), MEM_COMMIT | MEM_RESERVE, writable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE); if (result)
{
memcpy(result, code, sizeof(code));
} else cout << "VirtualAllocEx failed with error " << GetLastError() << endl; return result;
}void CreateCodeInVirtualMemoryAndExecute(BOOL useWritableMemory)
{ LPTHREAD_START_ROUTINE addr = (LPTHREAD_START_ROUTINE)CreateCodeInVirtualMemory(useWritableMemory); if (addr)
{ DWORD result = addr(NULL);
cout << "Code at 0x" << hex << (void*)addr << " returned " << result << endl;
} else cout << "NULL address was not executed" << endl;
}void ExecuteIllegalMemory()
{
CreateCodeInVirtualMemoryAndExecute(FALSE);
}
void PrintOptions()
{
cout << "Enter one of the following options:" << endl;
cout << "1 - Execute Memory Not Marked As Executable" << endl;
cout << "2 - Create Code in Virtual Memory" << endl;
cout << "3 - Create Code in Virtual Memory and Execute" << endl;
cout << "0 - Exit" << endl;
}void DecisionLoop()
{ while (true)
{ int selection;
PrintOptions();
cin >> selection; switch (selection)
{ case 0: return; case 1:
ExecuteIllegalMemory(); break; case 2:
CreateCodeInVirtualMemory(TRUE); break; case 3:
CreateCodeInVirtualMemoryAndExecute(TRUE); break; default:
cout << "Invalid input" << endl;
}
}
}int main()
{
DecisionLoop(); return 0;
}
在这里我没有去对它的应用做更多的介绍,但我相信我的抛砖引玉一定能够让更多的人对这一功能产生兴趣。
对于在事件查看器中的应用程序和服务日志中找到的大多数内容,您也可以以相同的方式完成此类操作——单击特定日志的属性,它将具有Provider-Name-Parts / LogName形式的名称。您只需要在xperf命令中使用“Provider-Name-Parts”部分即可。
未发布 图形图表设计软件Edraw Max更新至v9.1丨8.5折特惠 Edraw Max(亿图图示)是一款综合图形图表制作软件,它包含丰富的实例和模版,帮助您轻松创建流程图、网络拓扑图、组织结构图、商业图表、工程图,思维导图、软件设计图和平面布局图等。亿图采用更智能和人性化的绘制方式,包括丰富的图形模板库和特色实例库,最大程度帮助设计者降低工作量,更快捷阐述设计思想,提升创作灵感。
v9.1更新内容:
- 添加了平移/手形工具,只需按住鼠标右键即可自由平移画布。
添加插入QR码的功能。
新增屏幕捕捉功能。捕捉的图像可以立即插入到您的绘图中。
增加了设置默认字体的功能。您可以在选项菜单中选择“使用默认字体而不是主题字体”。
改进了PDF和Word导出的效果,解决了文本错位的问题。
增加了语言更改功能。现在您可以直接从选项菜单更改UI语言。
添加并改进了更多的线框符号库,包括网站线框元素、线框图标、iOS图标和Andriod线框图标。添加了更多的线框模板。
添加Genogram符号和模板。
为K-12教育添加了大量的科学示例和模板。
为物联网、智能家居、大数据、人工智能等添加了剪贴画。
试用、下载、了解更多产品信息请点击"咨询在线客服"

未发布 JavaScript网络摄像头和视频捕获Dynamsoft Camera SDK v5.2发布 JavaScript网络摄像头和视频捕获Dynamsoft Camera SDK v5.2发布。新版本将Windows服务部分重组为common Dynamsoft Service,由其他Dynamsoft Web-based Imaging SDKs共享。使用common Dynamsoft Service,你可以轻松地在应用程序中实现多个Dynamsoft HTML5 / JavaScript imaging SDK。
【Dynamsoft Camera SDK v5.2点击下载>>>】
例如,你的Web应用程序可能需要实现以下功能:
- 扫描纸质文件
- 从网络摄像头中捕获图像
- 从扫描的文档或网络摄像头中读取条形码
你可以同时使用Dynamic Web TWAIN、Dynamsoft Camera SDK和Dynamsoft Barcode Reader来满足你的要求。他们共享common Dynamsoft Service进行通信。你也可以轻松地在产品之间共享图像数据。
v5.2更新内容
- 更改了摄像头授权对话框的行为,默认情况下不会显示。
- 添加了一个新的方法dynamsoft.dcsEnv.setLanguage,用来设置摄像头授权对话框中使用的语言。
- 添加了一个新的方法getImagePartUrl,根据图像查看器中的索引获取图像的URL。
未发布 VintaSoftTwain.NET SDK更新至v10.2发布,增加Visual Studio .NET 2017演示丨附下载
VintaSoft Twain .NET SDK v10.2更新内容:
新的Vintasoft.Twain.Web.Services.dll程序集,其中包含一个独立的Web服务,用于与TWAIN设备配合使用。该Web服务能够为任何.NET兼容的Web平台(例如ASP.NET WebForms、ASP.NET MVC、ServiceStack)快速创建其他Web服务。
新的Vintasoft.Twain.Web.Api2Controllers.dll程序集,其中包括用于在ASP.NET MVC 5中与TWAIN设备配合使用的Web API 2控制器。
已验证Vintasoft.Twain.js的JavaScript代码与jQuery 2和3的兼容性。
现在,VintaSoft Web TWAIN解决方案可用于安全的HTTPS服务器:
· VintaSoft Web TWAIN服务(VintasoftWebTwainService项目)可以同时提供HTTP和HTTPS请求。
· VintaSoft ASP.NET MVC TWAIN演示(AspNetMvcTwainDemos项目)可以在HTTP和HTTPS服务器上使用。
新增Visual Studio .NET 2017演示项目。
未发布 .NET图像处理库ImageGear for .NET v23.2发布,增加新的PDF压缩功能 ImageGear for .NET是一款图形图像处理控件,具有扫描,压缩,浏览、添加注释,打印,图像编辑,OCR以及PDF和矢量图像支持,使开发人员可以快速地开发出图像处理程序,可用于.NET Framework2.0、3.0、3.5、4.0,ASP.NET,WPF,SilverLight,DirectX 10和Direct3D 10。支持超过100种图片格式,包含:TIFF, JPEG, CAD, Vector, 3D PDF, PDF/A, PS等。
PDF优化和压缩可以让用户删除元数据并将大型文件和图像压缩45%。这样可以节省宝贵的存储空间,同时保持原始图像或文档的保真度。
ImageGear的新Acroforms自定义窗口小部件允许自定义PDF中的表单域,例如:背景颜色、边框颜色宽度和样式以及文本颜色、字体和大小。用户能够自定义他们的PDF表单,以适应其独特的需求和风格。
通过添加Visual Studio 2017示例代码和Windows Server 2016支持,Accusoft将不断提供编程环境和代码示例。
ImageGear for .NET v23.2有哪些新功能?
未发布 Oracle正式发布Java 9,引入新的Java编程组件 Java SE 9.0于2017年9月21日发布。
JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可命名的、自描述的代码和数据集合。模块技术的核心目标是减少Java应用和Java核心运行时环境的大小与复杂性。为此,JDK本身进行了模块化,Oracle希望通过这种方式提升性能、安全性和可维护性。为了支持Java 9的模块,引入一种新的模块化JAR文件形式,按照这种形式会在其根目录中包含一个module-info.class文件。Oracle同时提供了工具,允许我们组合和优化一组模块,形成自定义的运行时镜像(image),这样的镜像不必将整个Java运行时包含进来。模块化所带来的其他变化包括从Java运行时镜像中移除了rt.jar和tools.jar。 Java社区进程(JCP)执行委员会的成员Ben Evans认为最急需重构的应用恰好就是最适合进行模块化的应用。如果你已经备受Lava Flow/God Class/Stovepipe System地狱的折磨,而且你的利益相关方明确知道这一点,那么你可能更容易说服他们进行一次完整的底层重构,通过渐进式的努力形成一个完成的模块解决方案(而不是简单重构并迁移至Java 8)是值得去做的。
Oracle宣布Java 8会是一个长期支持的发布版本,会一直支持到2022年,因此Evans认为很多的应用将会停留在Java 8上,根本不会升级到Java 9。Evans补充说,有些应用可能会让开发和构建工具链使用Java 8版本,而在生产环境使用Java 9的运行时。
对特定类型的应用来说,这是很有帮助的。例如,我曾经见到有的电子商务网站具有非常大的堆空间,其中包含了大约40G的字符串数据。Java 9的ompact Strings技术能够将这种类型的内存使用减半。这反过来又会对GC的性能带来积极的影响。对于有些应用来说(这可能就包括大型的Solr安装环境及类似场景),单单这一项收益就值得将运行时升级到Java 9。
Java 9使用G1作为默认的垃圾收集器,替代了之前默认使用的Parallel GC。Evans对这项变化的评论:
这项变更是很重要的,因为相对于Parallel来说,G1会在应用线程上做更多的事情,而Parallel几乎没有在应用线程上做任何事情,它基本上完全依赖GC线程完成所有的内存管理。这意味着切换到G1将会为应用线程带来额外的工作,从而直接影响到应用的性能。
在很多(甚至可以说大多数)场景中,这种额外的性能损耗都不是什么问题。但是,在这方面,我确实也曾经见过从Parallel切换到G1时,有一定比例的工作负载会引起性能的下降。对于这些应用来说,这种性能下降是无法接受的,所以他们无法切换至G1收集器。随着G1成为默认的收集器,这将会影响到升级至Java 9的每个应用。
JClarity的CEO Martijn Verburg认为大型的代码库需要重构为模块的形式。Verburg给出了一些通用的模块化建议,并且指出了开发人员在采用Java 9模块系统时,需要注意的一些事情:
- 阅读Paul和Sander的图书“Java 9 modularity”:它是本权威指南,提到了所有需要注意的地方,阐述了模块、包以及JAR之间如何运行的关联关系;
- 在模块边界的地方,使用定义良好的接口并且针对这些接口编程;
- 不要拆分包(split package),也就是说一个包不要分散到两个模块中。Adopt OpenJDK有个探测工具,我们可以用它来探测已有的代码;
- 确保不要存在循环依赖(Jigsaw不允许这样);
- 模块在源码的布局上与我们已习惯的方式有所不同,需要确保构建工具能够进行对应的处理;
- Jigsaw不支持多版本。
按照Verburg的说法,核心要点在于处理循环依赖、拆分包的问题,并确保针对接口进行编码。在尝试使用Jigsaw模块化重构之前,针对已有的代码库,这些工作需要预先完成。他还澄清了一个误解,那就是只有模块化的应用才能在Java 9上运行。
由于误解,在这方面有一种FUD(恐惧、不确定和怀疑)情绪,有人误认为在Java 9上运行的必须是模块化的应用。事实并非如此,我们可以将已有的基于类路径的应用直接在Java 9上运行。这里会有一些新的安全限制,因此我们需要设置一些特定的运行时标记(除非你重构代码,使用更安全的方式来访问Java的内部资源),即便如此,默认的行为也只是警告,而不是完全阻止我们(Java 10的限制会更严格)。
Verburg认为Jigsaw会是一个基石,会让Java的演进更快,这要归功于Mark Reinhold、Alan Bateman、Mandy Chung以及Jigsaw团队的其他成员多年来不知疲倦的工作,正是他们的努力使这一切得以实现。
Java 9还引入了jshell工具。这个命令行环境为Java平台带来了读入-求值-打印-循环(Read-Eval-Print-Loop,REPL)功能。它的目的在于以即时结果和反馈的形式,简化原型的实现并帮助我们探索语言在编码时的可选项。
Verburg和Evans看到Java 9中包含了jShell都非常兴奋,但令他们失望的是,HTTP/2只是作为Java 9的一个孵化模块(incubator module)提供的。鉴于社区对这项特性的兴趣和提供的帮助,Evans认为Oracle应该投入足够的工程资源,将HTTP/2交付为GA版本。
JDK 9完整的变更列表可以在Oracle的站点上查阅。Oracle宣布会按照每六个月一次的节奏进行发布,意味着Java 9是最后一次“keystone”特性驱动的版本发布,这反映出了Oracle目前管理Java的特点。Java下一阶段的演化将会按照更短的发布周期并且会按照更加面向特性的方式来发布。Java是否依然能够在服务端技术中占据领导者地位尚有待观察。
更多资讯点击查看>>>
未发布 矢量图形引擎库VectorDraw Developer Framework v7.7011.0.1发布 
VectorDraw Developer Framework(VDF)是一款构建2D、3D图形并用于应用程序可视化的矢量图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。该库还支持许多矢量和栅格输入和输出格式,包括本地PDF和SVG导出。
VectorDraw Developer Framework(VDF)更新至v7.7011.0.1,新版本针对提出的需求和bug做了调整和优化。
VectorDraw Developer Framework点击下载>>>
WebJS
新增需求
| 版本 | 需求 |
7.7011.0.1 | 70001006 支持webgl渲染模式的webgl图像 |
| 70001016 支持webgl节剪辑 |
| 70001019 支持使用scriptCommand hatch绘制阴影边框 |
| 70001024 使用鼠标进行缩放 |
| 70001029 实体选择回调 |
Converter
新增需求
| 版本 | 需求 |
| 7.7011.0.1 | 70001015 具有相同名称的vdXproperties导出不正确 |
漏洞
| 版本 | 漏洞 |
| 7.7011.0.1 | 70001009 DXF代理对象读取出错 |
| 70001020 某些DWF文件未正确打开 |
| 70001025 DGN Xrefs的问题 |
| 70001033 Layout paper未正确初始化 |
vdDXF
漏洞
| 版本 | 漏洞 |
| 7.7011.0.1 | 70001011 HANDLE类型的XProperty在DXF中未正确导出 |
Engine
新增需求
| 版本 | 需求 |
| 7.7011.0.1 | 70001008 改进ClearEraseItems方法的速度 |
| 70001012 MergeSelection方法用于传递对象的GUIDs |
| 70001027 虚拟机中的OpenGL问题 |
| 70001034 能够设置UCS图标字母的颜色 |
漏洞
| 版本 | 漏洞 |
| 7.7011.0.1 | 70001007 当文本具有斜角时,EditText和AddText命令不会正确显示光标 |
| 70001010 点上的多点折线未正确显示 |
| 70001013 Inserts Inside Blocks层是处于ON状态时仍不可见 |
| 70001014 图层组和滤镜在删除后仍会保存到DXF中 |
| 70001017 图像在nonused Block中使用时会被删除 |
| 70001018 线型折线显示不正确 |
| 70001021 RenderToGraphics和RenderToDC会清除目标图形上下文的背景 |
| 70001022 尺寸对象未正确导入PDF |
| 70001026 在vdraw Idle中很少会随机出现exeption |
| 70001030 Bhatch命令为创建的polyhatch添加白色作为fillcolor |
| 70001031 用户选择部分文字的拉伸命令会出现错误 |
| 70001032 vdMtext对象没有对齐 |
【本文作者慧都Elyn】