越狱检测机制误报原因排查:合法应用触发检测问题求助
越狱检测误报原因分析
我们的开发团队实现了越狱检测机制,但有未越狱用户反馈无法运行应用。排查后发现,用户安装App Store中的「La Terminal - SSH Client」会触发误判,卸载后应用恢复正常。
越狱检测代码
func isDeviceJailBroken() -> Bool { if UIDevice.current.isSimulator { return false } let appNames = ["cydia", "Sileo", "Icy", "MxTube", "RockApp", "blackra1n", "SBSettings", "FakeCarrier", "WinterBoard", "IntelliScreen", "loader", "FlyJB", "Zebra", "WinterBoard", "Snoop-itConfig", "Terminal"] for appName in appNames { if UIApplication.shared.canOpenURL(URL(string: "\(appName)://")!) { return true } } return false }
两款应用对比信息
La Terminal - SSH Client (触发误报) bundleId: com.xibbon.LaTerminal Beam Terminal (正常运行) bundleId: com.beamwallet.BeamTerminal
误报触发原因与规律
核心原因
检测逻辑通过canOpenURL尝试打开Terminal://这个URL Scheme,而「La Terminal - SSH Client」作为合规的App Store应用,恰好注册了该Scheme,导致未越狱设备被误判为越狱状态。
触发规律
- 误报仅发生在设备安装了注册了检测列表中某一URL Scheme的合规应用时,与应用bundleId是否包含关键词无关(两款应用bundleId均含Terminal,但只有前者注册了对应Scheme)。
- 越狱检测的URL Scheme列表存在覆盖范围过大的问题,将部分合规应用可能使用的Scheme纳入了检测范围。
内容的提问来源于stack exchange,提问作者rAJ
相关产品推荐
相关产品推荐

