Проблема с функциями безопасности в SwiftIOS

Программируем под IOS
Ответить
Anonymous
 Проблема с функциями безопасности в Swift

Сообщение Anonymous »

У меня возникли проблемы с одобрением моего кода Swift в AppStore, где проверки безопасности распределены по нескольким методам. Если один из них возвращает true, приложение предполагает, что существует инструмент отладчика, встроенная платформа или какая-либо другая причина, по которой приложение не работает должным образом.
Ниже у меня есть этот случай переключения:

Код: Выделить всё

securityChannel.setMethodCallHandler { [weak self] (call, result) in
guard let self = self else { return }
switch call.method {
case "isEmulator":
result(self.isProbablyEmulator())
case "isDebuggerAttached":
result(self.isDebuggerAttached())
case "hasFrida":
result(self.hasFridaLoaded())
case "isDeviceRooted":
result(self.isJailbroken())
case "hasHookingFramework":
result(self.hasSubstrateLikeHooks())
case "isInstalledFromTrustedDistribution":
result(self.isInstalledFromTrustedDistribution())
default:
result(FlutterMethodNotImplemented)
}
}

return super.application(application, didFinishLaunchingWithOptions: launchOptions)

А вот реализация каждого метода:

Код: Выделить всё

private func isProbablyEmulator() -> Bool {
#if targetEnvironment(simulator)
return true
#else
if ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"] != nil { return true }
return false
#endif
}

private func isDebuggerAttached() -> Bool {
var info = kinfo_proc()
var size = MemoryLayout.stride
var name: [Int32] = [CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()]

let rc = name.withUnsafeMutableBufferPointer { ptr -> Int32 in
sysctl(ptr.baseAddress, u_int(ptr.count), &info, &size, nil, 0)
}

if rc != 0 { return false }

return (info.kp_proc.p_flag & P_TRACED) != 0
}

private func hasFridaLoaded() -> Bool {
let suspicious = ["frida", "re.frida", "libfrida", "frida-gadget", "gum-js-loop"]
let count = _dyld_image_count()

for i in 0.. Bool {
#if targetEnvironment(simulator)
return false
#else
let suspicious = [
"/Applications/Cydia.app",
"/Library/MobileSubstrate/MobileSubstrate.dylib",
"/bin/bash",
"/usr/sbin/sshd",
"/etc/apt"
].contains { FileManager.default.fileExists(atPath: $0) }

let cydia = UIApplication.shared.canOpenURL(URL(string: "cydia://package/com.example.package")!)
let writeTest: Bool = {
let p = "/private/\(UUID().uuidString)"
do {
try "x".write(toFile: p, atomically: true, encoding: .utf8)
try FileManager.default.removeItem(atPath: p);
return true
} catch { return false }
}()

let dyld = getenv("DYLD_INSERT_LIBRARIES") != nil

return suspicious || cydia || writeTest || dyld
#endif
}

private func hasSubstrateLikeHooks() -> Bool {
let suspects = ["substrate", "libsubstrate", "fishhook"]
let count = _dyld_image_count()

for i in 0.. Bool {
if Bundle.main.path(forResource: "embedded", ofType: "mobileprovision") != nil {
return false
}

guard let receiptURL = Bundle.main.appStoreReceiptURL else { return false }
let last = receiptURL.lastPathComponent

if last == "sandboxReceipt" {
return true
}

let hasReceipt = FileManager.default.fileExists(atPath: receiptURL.path)
return hasReceipt
}
Я считаю, что реализации в порядке, настолько, что они уже были одобрены этими проверками.
Есть ли какая-либо проблема, которую можно выявить в этом случае? Есть ли какой-либо «излишек» для блокировки в любом из этих методов?

Подробнее здесь: https://stackoverflow.com/questions/797 ... s-in-swift
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»