cra*_*535 14 xcode otool ios stack-smash ios11
我希望能够检查在Xcode 9上构建的iOS应用程序中是否启用了堆栈粉碎保护(-fstack-protector-all),目标是iOS 11.
我在"其他C标志"中启用了-fstack-protector-all的应用程序,它确实构建并运行,但是如何验证是否启用了堆栈粉碎保护?
有很多较旧的(2013年及之前的)资源提到otool -Iv appName |grep stack_chk
,但我在我的应用程序二进制文件上运行它,并且在输出中找不到stack_chk.
那个命令有现代的等价物吗?是-fstack-protector - 根据Xcode中当前的默认设置,所有甚至都是必需的?
您可以自己检查生成的代码。在有保护和无保护的情况下进行编译,然后查看反汇编代码(对于 XCode,您可以使用:在 XCode 4(或 Xcode 5 或 Xcode 6)中查看反汇编,或者仅使用您最喜欢的反汇编程序)。
两种情况下生成的代码示例可以在此处找到:https ://security.stackexchange.com/questions/158609/how-is-the-stack-protection-enforced-in-a-binary?newreg=af786a3bcdc841e1b92110299a2951af
最后但并非最不重要的一点是,尝试编写自己的一个小测试,该测试会尝试破坏堆栈。一旦你能够破坏堆栈,启用保护标志,重建并看看它是否有任何效果。当然,可以在这里找到简单的示例: https: //en.wikipedia.org/wiki/Stack_buffer_overflow