# @nativescript/ios-security ## Contents * [Intro](#intro) * [Installation](#installation) * [Prerequisites](#prerequisites) * [Specify the URLs to be queried](#specify-the-urls-to-be-queried) * [Use @nativescript/ios-security](#use-nativescriptios-security) * [Detect jailbreaking](#detect-jailbreaking) * [Detect debugger attachment](#detect-bebugger-attachment) * [Prevent Debugger Attachment](#prevent-debugger-attachment) * [Emulator detection](#emulator-detection) * [Detect the use of reverse engineering tools](#detect-the-use-of-reverse-engineering-tools) * [System proxy detection](#system-proxy-detection) * [Runtime Hooks Detection](#runtime-hooks-detection) * [App tampering detection](#app-tampering-detection) * [License](#license) ## Intro 🔒 [IOSSecuritySuite](https://github.com/securing/IOSSecuritySuite) for NativeScript. > 🌏 iOS Security Suite is an advanced and easy-to-use platform security & anti-tampering library. If you are developing for iOS and you want to protect your app according to the OWASP [MASVS](https://github.com/OWASP/owasp-masvs) standard, chapter v8, then this library could save you a lot of time. 🚀 > What ISS detects: > * Jailbreak (even the iOS 11+ with brand new indicators! 🔥) > * Attached debugger 👨🏻🚀 > * If an app was run in an emulator 👽 > * Common reverse engineering tools running on the device 🔭 ## Installation To install the plugin, run the following command in your app's root folder: ```cli npm install @nativescript/ios-security ``` ## Prerequisites ### Specify the URLs to be queried In the jailbreak detection module, there is a check that uses the [canOpenURL(_:)](https://developer.apple.com/documentation/uikit/uiapplication/1622952-canopenurl) method and it requires specifying the URLs that will be queried. Specify those URLs in the `App_Resources/iOS/Info.plist` file as follows: ```xml <key>LSApplicationQueriesSchemes</key> <array> <string>cydia</string> <string>undecimus</string> <string>sileo</string> <string>zbra</string> <string>filza</string> <string>activator</string> </array> ``` ## Use @nativescript/ios-security The following sections describe how to use `@nativescript/ios-security`. ### Detect jailbreaking For a simple check of whether the device is jailbroken, use the `amIJailbroken()` method. ```ts const isJailBroken: boolean = IOSSecurity.amIJailbroken() if (isJailBroken) { console.log("This device is jailbroken"); } else { console.log("This device is not jailbroken"); } ``` --- ### Detect bebugger attachment To detect if a debugger is attached to the app, use the `amIDebugged()` method. ```ts const amIDebugged: boolean = IOSSecurity.amIDebugged(); ``` --- ### Prevent debugger attachment To prevent the debugger from being attached to the app, call the `denyDebugger()` method. ```ts IOSSecurity.denyDebugger(); ``` --- ### Emulator detection To detect if the app is being run on an emulator, call the `amIRunInEmulator()` method. ```ts const runInEmulator: boolean = IOSSecurity.amIRunInEmulator(); ``` --- ### Detect the use of reverse engineering tools To detect if a common reverse engineering tool is being used on the app, call the `amIReverseEngineered()` method. ```ts const amIReverseEngineered: boolean = IOSSecurity.amIReverseEngineered(); ``` --- ### System proxy detection To detect if the user is using a proxy, call the `amIProxied()` method. ```ts const amIProxied: boolean = IOSSecurity.amIProxied(); ``` --- ### Runtime Hooks Detection To detect if a hook is placed in the application's code, call the `amIRuntimeHookedWithDyldWhiteListDetectionClassSelectorIsClassMethod()` method. ```ts let amIRuntimeHooked: boolean = IOSSecurity.amIRuntimeHookedWithDyldWhiteListDetectionClassSelectorIsClassMethod(dyldWhiteList: NSArray<string> | string[], detectionClass: typeof NSObject, selector: string, isClassMethod: boolean) ``` --- ### App tampering detection To detect if an app has been tampered with, call the `amITampered()` method. ```ts let amITampered: NSArray<any> = IOSSecurity.amITampered(checks: NSArray<any> | any[]) ``` ## License Apache License Version 2.0