Android 如何确定操作系统是否是来自应用程序的自定义ROM?

Android 如何确定操作系统是否是来自应用程序的自定义ROM?,android,digital-signature,rom,Android,Digital Signature,Rom,我正在开发一个Android应用程序,但我想限制我的应用程序只能由不运行根/自定义ROM的硬件访问。我知道Android的前向锁定内容保护,但想在我的应用程序中再次检查此保护。是否有任何方法可以使用android API获得设备的签名以及ROM的可信签名,从而将我的应用程序从自定义ROM中锁定?对不起,我想不出任何防故障的方法。ROM或root的要点是,您可以随意更改。因此,没有一个Android API调用是安全的,不会被修改,例如,没有一个调用会100%让您知道您正在合法设备上运行 更新:签

我正在开发一个Android应用程序,但我想限制我的应用程序只能由不运行根/自定义ROM的硬件访问。我知道Android的前向锁定内容保护,但想在我的应用程序中再次检查此保护。是否有任何方法可以使用android API获得设备的签名以及ROM的可信签名,从而将我的应用程序从自定义ROM中锁定?

对不起,我想不出任何防故障的方法。ROM或root的要点是,您可以随意更改。因此,没有一个Android API调用是安全的,不会被修改,例如,没有一个调用会100%让您知道您正在合法设备上运行


更新:签出,它可能允许您确保设备未被修改。从我所读到的内容来看,安全网应该让你检查一台设备是否与谷歌所说的“android”API“兼容”

这个问题有一些关于确定一台设备是否运行自定义ROM的信息:


使用此选项,然后将其与谷歌股票图像进行比较

谷歌安全网可以在大多数定制ROM上轻松绕过Magisk:@FatTony不太可能。SafetyNet不断变化,现在出现在多个专有引导加载程序中。从谷歌的角度来看,防止ROM隐藏对应用生态系统来说是一件好事,因此他们不断让SN更难被击败。在magisk中搜索SN引用,你会看到类似“验证应该深入到引导加载程序中,这不是那么容易破解的。因此,结论是我以后不会花那么多时间绕过安全网”。虽然这是一个猫捉老鼠的游戏,但谷歌已经表明,他们致力于防止ROM隐藏这一糟糕的ROM场景,但我亲眼看到,许多大公司希望保护自己的应用程序代码/数据不受“根设备”的影响,SN是谷歌的主要答案。还有其他答案(TEE应用程序),但“使用SN”是OP问题的正确技术答案。这在道德上正确吗?这取决于每个人,SN损害了ROM场景,因为更多的应用程序使用SN来隐藏特征,但是它也使得更多的“安全聚焦”的应用程序(只要你认为谷歌可以成为安全的最终仲裁者)。如果不通过CTS,你就无法获得SN,所以谷歌有很大的能力
System.getProperty("os.version"); // OS version
android.os.Build.VERSION.SDK      // API Level
android.os.Build.DEVICE           // Device
android.os.Build.MODEL            // Model 
android.os.Build.PRODUCT          // Product