Swift和Stack粉碎保护

Dan*_*ara 10 security xcode ios swift

如何在纯swift应用程序中启用Stack Smashing Protection?

我确实尝试将"-fstack-protector-all"标志放在xCode中项目构建设置选项卡下的其他C++标志中,但似乎这个标志未使用或对构建的应用程序没有影响.

为了验证我正在使用的构建otool -Iv AppBinary | grep stack.

Joe*_*Joe 7

在Swift中,默认情况下启用堆栈粉碎,只需要在objective-c应用程序的构建设置下添加"-fstack-protector-all"标志.

如何检查是否启用了堆栈粉碎. 运行的otool命令和存在stack_chk_guardstack_chk_fail装置的代码被堆栈溢出保护.

$ otool -Iv <appname>|grep stack
0x0013dfg   520 ___stack_chk_fail
0x001d009   521 ___stack_chk_guard
0x001fd345   520 ___stack_chk_fail
0x000000010087efd   513 ___stack_chk_fail
0x0000000100098hf3 514 ___stack_chk_guard
0x00000001000897gfr   513 ___stack_chk_fail
Run Code Online (Sandbox Code Playgroud)

  • 在构建设置的确切位置,我们必须设置“ -fstack-protector-all” (3认同)
  • 我使用临时签名导出了 IPA。我抓住了其中的二进制文件。我运行了 otool,结果很好地显示了。但对于使用应用商店签名的 ipa 来说,这种情况不会发生。正常吗? (2认同)
  • 没有看到它默认启用。在 XCode 中创建了单视图模板应用程序,临时构建和导出,并且没有堆栈保护器标志 (2认同)

bty*_*ype 5

我在 100% Swift 项目中也遇到过这个问题。

\n\n

每当我添加-fstack-protector-all到“其他 C 标志”构建设置时,这些标志都不会显示在二进制文件中,如其他评论中所述。

\n\n

在此输入图像描述

\n\n

我所做的是创建一个 Objective-C Class\xe2\x80\xa6

\n\n
// DummyClassForSSP.h\n#import <Foundation/Foundation.h>\n\nNS_ASSUME_NONNULL_BEGIN\n\n@interface DummyClassForSSP : NSObject\n+ (void)dummyCallSoFlagsShowUpInIPA;\n@end\n\nNS_ASSUME_NONNULL_END\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 添加了一个虚拟实现 \xe2\x80\xa6

\n\n
// DummyClassForSSP.m\n#import "DummyClassForSSP.h"\n\n@implementation DummyClassForSSP\n\n+ (void)dummyCallSoFlagsShowUpInIPA {}\n\n@end\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x80\xa6 并从我的 AppDelegate 调用它。

\n\n
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {\n....\nDummyClassForSSP.dummyCallSoFlagsShowUpInIPA()\n...\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

之后,标志如所描述的那样出现。

\n