我需要在Swift中编写一些许可证检查代码。我知道Swift首先不是那种代码的最佳选择,因为它更难以混淆。但是,如果需要知道应用程序是否已注册的代码是用Swift编写的,那么这仍然比将许可证检查代码放在可以换出的单独框架中更好。
为了使攻击代码变得更难,我试图通过至少删除与其相关的符号来混淆代码。
为此,我有一些带内部可见性的内联方法如下:
@inline(__always) static func checkLicense() { /* license checking code */ }
鉴于该方法应始终内联,因此不需要在二进制符号表中包含方法的名称。 (我知道inline
注释通常只是编译器的提示,但我有理由相信它们在这种情况下有用。)
与此相符,nm MyApp.app/Contents/MacOS/MyApp
不包含对checkLicense
的引用。
但是,strings MyApp.app/Contents/MacOS/MyApp
的输出仍然包含对checkLicense
的引用,我担心攻击者可以使用该信息更轻松地攻击许可证检查代码。
以下是我的问题:
nm
会公开),它们会无用吗?我目前正在使用以下构建选项:
答案 0 :(得分:2)
我再次对此进行了调查,发现以下剥离设置对发布版本有效:
-Xlinker -s
)-Xlinker -x
)