【问题标题】:Can Swift Scripts Execute in a Swift iOS App?Swift 脚本可以在 Swift iOS 应用程序中执行吗?
【发布时间】:2021-10-21 12:15:12
【问题描述】:

我们有一个 iOS 应用程序 (Obj-C),它从 AWS S3 抓取一个 JavaScript 文件,以便在 iPhone 上对一堆原始图像数据运行我们的专有算法(我猜 Lambda 函数会产生一些延迟)。为了安全起见,JavaScript 被混淆了,完全不可读,更难调试。

好吧,JavaScript 将 NaN 结果值吐回 iPhone,我什至很难找到 NaN 污染从哪里开始。非常沮丧。

在幕后,我正在重构整个项目以改用 Swift。它比 Objective-C(恕我直言)更容易开发/维护。此外,Swift 可以用于脚本,所以我想我可以通过完全删除 JavaScript 来减少我的技术栈。

问题:Swift 脚本能否像 JavaScript 一样在 Swift iPhone 应用程序中执行?如果是,如何?

Objective-C 代码 sn-p(为简洁而修改)

functionCall = [NSString stringWithFormat: @"some JS function call"];
[jsContext evaluateScript: functionCall];
JSValue* jsv = [jsContext objectForKeyedSubscript: @"result"];
NSDictionary* result = [jsv toDictionary];
// result is != nil, but the values are all NaN
// Can't find the error when debugging JavaScript in Chrome
// C# utility app that does the same thing produces good results

我知道,如果检测到在源代码上使用了混淆工具,Apple 将拒绝 App Store 的应用程序,或者我会考虑购买一个许可证。此外,我们有一个相同的 Android 应用程序,所以如果我可以使用 Kotlin 脚本做同样的事情,那么我将是一个快乐的露营者。

我担心的另一个问题是,经过混淆的 JavaScript 代码是否会提高安全性。我知道越狱设备可以访问设备内存并在运行时获取代码,这让我觉得我在徒劳地进行练习。换句话说,混淆的 JavaScript 是否比手动/原始混淆的 Swift 源代码更安全?

【问题讨论】:

  • 不,您将无法在 iOS 应用中动态运行下载的 Swift 脚本。
  • 该死的。如果我继续这种模式,我还有 JavaScript 的替代品吗?
  • 这似乎是一个奇怪的架构决定。为什么不将算法嵌入到应用程序中编译的 Swift 代码中?它经常变化吗?至少在开发过程中,您不应该使用混淆代码。也许有一种方法可以让您在开发时将您的应用程序指向该 JS 的未处理源代码。
  • @AlexWayne,感谢您与我们联系。就个人而言,我很想用 Swift 编写算法,但这是一个管理决策(出于几个原因,我不同意这个决策)。此后,我将脚本开发移至 VS Code(可靠调试),并且我正在使用 TypeScript 来避免诸如 NaN 污染之类的类型问题。到目前为止,这是可行的。
  • 那么祝你好运:) 关于你的最后一个问题,混淆代码比普通 JS 更安全,但不是很多。归根结底,它仍然是必须在结构上与源代码保持相似的解释代码。编译后的字节码更加更安全,因为从中重建原始源代码要困难得多。如果安全是首要考虑的问题,那么与应用程序一起提供的编译后的 Swift 将比从互联网上下载的易于拦截和分析的混淆 JS 更安全。

标签: javascript ios swift obfuscation


【解决方案1】:

正如用户 jvnpdx 所说,无法在应用程序中动态运行 Swift 脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2019-07-14
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多