Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找未使用SafeSEH编译的Windows DLL_Windows_Dll_Portable Executable - Fatal编程技术网

查找未使用SafeSEH编译的Windows DLL

查找未使用SafeSEH编译的Windows DLL,windows,dll,portable-executable,Windows,Dll,Portable Executable,我想知道我安装的各种软件中的哪些DLL是用SafeSEH编译的,哪些没有。有没有一个工具可以给我提供这些信息,否则,编写能够进行验证的代码的最佳解决方案是什么 提前感谢。您可以从使用此工具开始,并检查输出。根据所有DLL的列表批量运行它应该不会太难。您需要创建一个登录名才能下载它。这里也引用了SafeSEH Dump,但该页面上的下载链接似乎已失效。您还可以使用dumpbin.exe/loadconfig查找是否存在安全异常处理程序表。更多信息:我知道这是一个古老的问题,我正在从死亡中挖掘出来,

我想知道我安装的各种软件中的哪些DLL是用SafeSEH编译的,哪些没有。有没有一个工具可以给我提供这些信息,否则,编写能够进行验证的代码的最佳解决方案是什么


提前感谢。

您可以从使用此工具开始,并检查输出。根据所有DLL的列表批量运行它应该不会太难。您需要创建一个登录名才能下载它。这里也引用了SafeSEH Dump,但该页面上的下载链接似乎已失效。

您还可以使用dumpbin.exe/loadconfig查找是否存在安全异常处理程序表。更多信息:

我知道这是一个古老的问题,我正在从死亡中挖掘出来,但是有一个程序化的解决方案

首先,解析PE格式。这有各种各样的解决方案,所以我不想深入讨论。我只想说,这是一个比我在这里能谈到的更大的话题。如果您决定使用自己的,请注意32位和64位可执行文件之间的差异

解析完PE文件后,跳过DOS头、NT签名、文件头(又称COFF头)、可选头,最后转到数据目录。每个目录都有一个RVA和一个大小。查找配置目录的RVA和大小(列表中的第10项)

我们可以从这里开始检测。如果RVA或大小为零,则不启用SafeSEH。如果大小不是0x40,则它是使用(可能)易受攻击的编译器构建的。不过,不要相信大小值-它不一定与中的数据大小匹配,因为Windows XP有一些怪癖-有关更多详细信息,请参阅上一个链接


如果RVA和大小似乎合理,请按照RVA进行操作。解析该值,然后读取
sehandler表
sehandler计数
值。如果处理程序表指针为null(即零),则不启用SafeSEH。如果处理程序计数为零,则没有注册任何处理程序,即使SafeSEH可能已打开。

如果需要以编程方式执行此操作,请解析PE格式,查看目录项,检查异常目录的RVA是否为0。如果有,就没有安全了。