我必须检查大量的二进制文件是否使用/GS选项进行编译。我认为一个很好的指标是检查它们是否具有堆栈cookie。您是否知道可以执行此操作的任何工具,或者可以在脚本中构建的任何工具,因此不必手动进行操作?

编辑

找到了Binscope,我将检查它是否能够同时检查更多二进制文件或可编写脚本。

Edit2

它需要调试符号,因此这不是解决方案。

Edit3

https://github.com/NetSPI/PEchecker

评论

二进制文件是否有专用调试符号(.pdb)?如果没有,BinScope将无济于事。

我注意到了我只是检查了一下而失败了。

#1 楼


您可以检查IMAGE_LOAD_CONFIG_DIRECTORY结构,该结构在图像中有一个指向SecurityCookie值的指针的字段。即使二进制文件可能使用SecurityCookie,也为0。在这种情况下,您可以扫描/GS函数的特征代码签名:尽管我猜这可能会产生一些误报。


评论


您还可以搜索库函数__report_gsfailure使用的字节字符串68 09 04 00 C0,该字符串为push 0xC0000409(按STATUS_STACK_BUFFER_OVERRUN)。但是,与上述@ igor-skochinsky的第三个建议一样,这可能会导致FP,因此最好与@ igor-skochinsky的其他建议一起使用。

–詹森·格夫纳(Jason Geffner)
2014年11月24日18:52

@JasonGeffner:我在这里使用的旧VC7二进制文件没有该字节序列-它不会引发异常,而只会显示致命的消息框。

–伊戈尔·斯科钦斯基♦
2014年11月24日18:56

好的,我在上面的评论可能会导致FP和FN;)

–詹森·格夫纳(Jason Geffner)
2014年11月24日19:10