- 移动 ADR
- 保护应用
保护应用
只需几步即可保护 Android APK 或 iOS IPA:上传应用,选择要运行的检测项,进行保护,然后下载受保护的副本。
移动 ADR(移动应用检测与响应)会在您的 Android 或 iOS 应用的副本中加入 RASP(运行时应用自我保护)。受保护的应用会在设备上运行安全检测,例如 Root 或越狱、调试器、Frida Hook 等,并以事件的形式报告检测到的情况。由您选择它运行哪些检测项。
开始之前
- 应用:Android APK 或 iOS IPA,按发布时的方式构建,大小不超过 2 GB。
- iOS:请上传从 Xcode 或您的构建流水线导出的 IPA。从 App Store 下载的 IPA 已加密,无法保护。应用的可执行文件必须为 arm64 构建。受保护的应用支持 iOS 12 及更高版本。
- Android:受保护的应用需要 Android 12(API 31)或更高版本。如果其最低版本低于 31,会被提高到 31,因此无法再安装到更旧的设备上。
- 每个版本一个文件:应用的每个版本(其
android:versionName或CFBundleShortVersionString)只能由一个文件保护。修改应用后,请为新构建设置新的版本号。 - 原始应用:请上传您构建的原始应用,而不是已受保护的副本。
打开移动 ADR
前往 report.ostorlab.co,然后:
-
打开菜单,在 "保护" 下点击 "移动 ADR"。

-
点击 "保护应用"。

选择应用
-
将 APK 或 IPA 拖放到上传区域,或点击该区域选择文件。平台根据文件扩展名判断。

-
确认文件后点击 "继续"。右侧的 "保护概要" 显示平台、应用以及将运行的检测项。

选择检测项
-
此步骤列出应用所属平台的检测项。默认全部开启。

-
"应用身份" 始终开启:它用于区分正版构建与重新打包的副本,因此其开关无法关闭。

-
关闭不适合您用户的检测项。此处关闭了 "Hook 与插桩" 和 "网络拦截","保护概要" 中也随之移除。例如:
- 公司的 VPN 会触发 "网络拦截",在 iOS 上代理也会触发:如果您的用户在其后工作,请将其关闭。
- 您的 QA 团队在模拟器上测试:为他们单独保护一个关闭了 "模拟器" 的构建。

-
"继续" 旁的计数显示已开启的检测项数量。点击 "继续"。

移动 ADR 共有 9 个检测项,应用会获得其所属平台的检测项:
| 检测项 | Android | iOS | 检测内容 |
|---|---|---|---|
| Root | ✓ | Root 文件、可写的系统分区、SELinux 和构建属性。 | |
| 越狱 | ✓ | 越狱文件、沙盒逃逸和进程创建。 | |
| 调试器 | ✓ | ✓ | 应用上附加了调试器。 |
| Hook 与插桩 | ✓ | ✓ | Frida 等注入应用的库。 |
| 代码完整性 | ✓ | 应用的代码在受保护后被修改。 | |
| 网络拦截 | ✓ | ✓ | VPN 隧道,以及 iOS 上的代理。 |
| 应用身份 | ✓ | ✓ | 区分正版构建与重新打包的副本。 |
| 模拟器 | ✓ | ✓ | 应用运行在模拟器或 iOS Simulator 中。 |
| 虚拟化与应用多开 | ✓ | 应用运行在另一个应用的容器中。 |
受保护的应用在启动时运行已开启的检测项,之后在打开期间每分钟运行一次。事件页面列出了每个检测项报告的内容。
保护应用
-
查看 "保护概要" 中的 "检测项":只列出已开启的检测项。

-
点击 "保护"。首先上传应用:请停留在页面上直到上传完成,或点击 "取消上传" 停止上传。然后应用会被保护。这大约需要一分钟,您可以离开页面:构建会继续进行,并保留在 "构建" 选项卡中。

-
显示 "应用已受保护" 后,点击 "下载" 获取受保护的副本。

受保护的应用在设备上运行后,其事件会显示在 "事件" 选项卡中。应用的每个构建都保留在 "应用" 和 "构建" 中,您可以在那里再次下载。
无法保护应用时
原因会显示在页面上,以及 "构建" 选项卡中构建状态的下方。点击 "保护其他应用" 重新开始。服务器返回的消息以英文显示,控制台的消息以您的语言显示。
| 消息 | 处理方法 |
|---|---|
| 请选择 APK 或 IPA 文件。 | 上传文件名以 .apk 或 .ipa 结尾的文件。 |
| 文件过大:上限为 2 GB。 | 上传更小的应用构建。 |
| The file is not a valid APK. / The file is not a valid app archive. | 上传构建生成的原始 APK 或 IPA,不要重命名或重新打包。 |
| The app's AndroidManifest.xml cannot be read. | 重新构建 APK 并上传。 |
| The app's executable cannot be protected: it must be an unencrypted arm64 binary. | 上传从 Xcode 或您的构建流水线导出、为 arm64 构建的 IPA,而不是从 App Store 下载的 IPA。 |
| The app's executable has no room for the runtime. | 使用链接器参数 -headerpad_max_install_names 重新构建应用,然后上传。 |
| The app is already protected. | 上传原始应用,而不是受保护的副本。 |
| Version … of … is already protected from another file. | 为新构建设置新的版本号,然后上传。 |
| 无法请求构建 | 应用已上传:点击 "再次请求"。 |
| The app could not be protected. Try again, or contact support if it fails again. | 再次保护应用。如果再次失败,请联系支持团队。 |