13

对于 Windows 8 应用程序认证,有(除其他外)以下要求:

  • 3.2 必须使用/SafeSEH标志编译您的应用程序以确保安全的异常处理
  • 3.3 你的app必须使用/NXCOMPATflag编译,防止数据执行
  • 3.4 您的应用程序必须使用/DYNAMICBASE地址空间布局随机化 (ASLR) 标志进行编译

我无法找到如何在 C++Builder XE 中启用其中任何一个。

对于/NXCOMPATand /DYNAMICBASE,可以editbin.exe从 VS 或peflags.exeCygwin 使用。虽然我会对可能的副作用更有信心,但如果有本地方法来启用这些。

无论如何,我完全不知所措/SafeSEH

4

2 回答 2

5

首先,/SafeSEH 仅适用于 x86,不适用于 x64 或 ARM。它要求您的编译器生成附加表来指示出于安全原因被视为有效异常处理程序的函数地址。您可以自己执行此操作的可能性很小,但这需要您查看已fs:0编译的汇编代码中的异常处理链并枚举该链上曾经推送过的所有地址,然后按照此处记录的方式描述它们: http:// msdn.microsoft.com/en-us/library/9a89h429(v=VS.80).aspx。您的代码实际上没有任何处理程序的可能性很小,并且它们都在 C++Builder 的运行时中(如果运行时是单独的 DLL,可能会很容易)。

您应该尝试说服 C++Builder 更新他们的编译器以支持 SafeSEH。它自 XP SP2 以来一直存在于 Windows 平台中,并填补了一个非常讨厌的安全漏洞(x86 中的堆栈中存在异常处理程序地址,只是等待缓冲区溢出以将任何随机地址放在那里执行)

于 2012-08-24T23:45:41.313 回答
1

对于与/NXCOMPAT和相关的问题/DYNAMICBASE,我在此处创建了一个 C++ Builder 链接器请求以支持这些标志:https ://quality.embarcadero.com/browse/RSP-13072

从 Visual C++使用editbin.exe几乎不是一个理想的解决方案,它们的链接器需要原生支持这些标志。

更新:这里创建了一个附加请求,用于分发已设置这些标志的 C++ Builder/Delphi 运行时文件(DLL/BPL),以避免必须使用 Visual C++ 中的 EDITBIN 自行设置它们: https:/ /quality.embarcadero.com/browse/RSP-13231

于 2015-12-02T21:59:50.547 回答