Android应用程序不能在根设备上运行

我正在编写一个不能在目录设备上运行的应用程序。 我想存储一些安全的数据,只能在非root用户的设备上存储,因为没有人可以访问/ data / data / package-name中的文件

有人知道吗:

1)是否有可能阻止在根设备上安装应用程序? 我读了一些关于Android Market的“版权保护机制”。 这个function似乎已经过时,取而代之的是许可function。 但是,许可只能用于付费应用程序,而我的是免费的…

2)是否有可能以编程方式检查设备是否已经生根? 如果可以这样做,我可以简单地停止应用程序,如果设备是根植的。

任何有关这个话题的帮助表示赞赏!

执行

Runtime.getRuntime().exec("su"); 

并检查结果代码。

换句话说,如果你可以执行su ,那么你有root权限。 不pipe用户是否允许或拒绝,都有你的答案。

我认为你的方法有点有缺陷。 首先,用户可以先安装你的应用程序和数据,然后“root”设备(即使root根数据擦除,可以先备份)。 其次,一般的规则是用户手中的东西不再是你的。 黑客将会find一种方法来迟早地获取您的数据。

如果你关心安全的数据,不要把它放在设备上。 由于Android是以networking为中心的设备(是的,我知道,这是主观的,但最初是这样开发和定位的),在线访问数据并不less见。

我想说的是运行su然后检查输出。 如果用户允许你的应用拥有root权限,那么使用root卸载你自己的应用程序(一种方法是将脚本放入init.d ,然后强制重新启动)。

如果用户不允许你的应用程序以root身份运行,那么:

  1. 他们拒绝了您的应用权限。
  2. 他们没有扎根。

现在,拒绝权限(和根源)意味着他们有一些SUPERUSERpipe理应用程序,这就是下一个部分进来的地方。

然后,我将继续使用PackageManager来检索所有包的列表,然后根据可用的超级用户pipe理应用程序(即Koush,ChainsDD和Chainfire中的那些应用程序)检查它们

相关的软件包名称是:

  1. com.noshufou.android.su
  2. eu.chainfire.supersu
  3. com.koushikdutta.superuser

如果您试图用户保护数据,那么担心其他应用程序是他们的业务。 如果您试图保护用户的数据,您将哪些业务放在设备上?

为了回答你的问题,他们在控制机器,所以期望他们能够陷入任何调用API检查“是否根源? 并骗你。 而是使用客户端已知的密钥对客户端上的数据进行encryption,但是在何处以及如何进行操作时使其不明显。 一般来说让烦人的是谁在寻找。

享受随之而来的重击游戏。 每当有人闯入时,你会做出更好的解决方法,他们会更好地解决问题,一路上你将提高开裂的障碍

不要与自由作斗争 – 为什么要用免费设备拒绝客户呢? – 而是,如果你想要一个特定的结果,那么就要烦恼得到数据>获取数据的价值。 那么它不会发生。 如果您真的必须具有防呆安全性,请保留数据服务器端。

使用这些方法将帮助您检查根目录

 public static boolean findBinary(String binaryName) { boolean found = false; if (!found) { String[] places = { "/sbin/", "/system/bin/", "/system/xbin/", "/data/local/xbin/", "/data/local/bin/", "/system/sd/xbin/", "/system/bin/failsafe/", "/data/local/" }; for (String where : places) { if (new File(where + binaryName).exists()) { found = true; break; } } } return found; } private static boolean isRooted() { return findBinary("su"); } 

现在尝试检查设备是否已经生根。

 if (isRooted() == true){ //Do something to prevent run this app on the device } else{ //Do nothing and run app normally } 

例如,如果设备是根源的,您可以强制停止应用程序

我认为传统版权保护的一个“缺陷”是它不允许将应用程序安装在根目录的设备上,但是它也有其自身的问题,将很快被弃用。

至于客户端检查,您根本无法依靠程序化方法来检测您是否在根设备上运行 – 客户端代码中的任何内容都可能会被黑客入侵并被删除。 你会惊讶于修改Proguard-obfuscated代码是多么容易。 充其量,你迫使黑客花费几个小时或几天来编辑代码并重新编译。 这是通过默默无闻的安全,而不是一个可行的保护机制。

1)没有。 你怎么拒绝安装? 为什么根植设备会拒绝安装用户想要在fs上安装的东西? 作为整个生根点,你可以使设备基本上做任何事情。

2)没有。 不是为了你的目的。 你可以通过一般的方法来检查你的应用程序是否能够获得root权限。 所以你可以检查一个积极的,但是你不能从你的应用程序中以编程的方式certificate它不是根源的。

另外,你在问什么是否可以制作完美的复制保护DRM系统 – 你也可能会错过用户可以改变你的应用程序,删除你的根检查点。 如果您有某种校验和/ crc检查,用户也可以伪造结果。