我正在编写一个不能在root设备上运行的应用程序。我想存储一些安全数据,这些数据只能在非root设备上使用,因为没有人可以访问 / data / data / package-name 中的文件。
有谁知道:
1)是否可以阻止在root设备上安装应用程序?我读了一些关于Android Market的“版权保护机制”的内容。此功能似乎已过时,并由许可功能取代。但是,许可只适用于付费应用程序,我的免费......
2)是否可以通过编程方式检查设备是否已植根?如果可以这样做,我可以简单地停止应用程序,如果设备已植根。
对此主题的任何帮助表示赞赏!
答案 0 :(得分:9)
执行
Runtime.getRuntime().exec("su");
并检查结果代码。
换句话说,如果您可以执行su
,那么您具有root访问权限。如果用户允许或拒绝它并不重要,那么你有答案。
答案 1 :(得分:6)
我认为你的方法有点缺陷。首先,用户可以先安装您的应用程序和数据,然后“root”设备(即使root用户擦除数据,也可以先备份)。接下来,一般规则是用户手中的任何东西都不再属于你了。黑客迟早会找到一种方法来获取您的数据。
如果您关心安全数据,请不要将其放入设备。由于Android是以网络为中心的设备(是的,我知道,这是主观的,但它最初是开发和定位的),在线访问数据并不罕见。
答案 2 :(得分:4)
我要说的是运行su
然后检查输出。如果用户允许您的应用拥有root权限,请使用root来卸载您自己的应用程序(一种方法可能是将脚本放入init.d
然后强行重启)。
如果用户不能允许您的应用以root用户身份运行,那么:
现在,拒绝权限(和root)意味着他们拥有某种SUPERUSER管理应用程序,这就是下一部分的用武之地。
然后我会继续使用PackageManager
来检索所有包的列表,然后根据可用的极少数超级用户管理应用程序(即Koush,ChainsDD和Chainfire
相关的包名是:
com.noshufou.android.su
eu.chainfire.supersu
com.koushikdutta.superuser
答案 3 :(得分:3)
如果您尝试为用户保护数据,那么他们的业务就是担心其他应用。 如果您试图保护 用户的数据,那么您将它放在自己的设备上有什么业务?
要回答您的问题,他们可以控制机器,因此希望他们能够捕获对API的任何调用,检查“这是否已植根?”并欺骗你。相反,使用客户端已知的密钥对客户端上的数据进行加密,但是在不知情的地方和方式下进行加密是非常明显的。一般来说,无论是谁在寻找都会让事情变得烦人。
享受随后的重击游戏。每当有人碰到它,你就会做出更好的修复,它们会做出更好的破解,并且一路上你将会提高它的破解力。
不要与自由作斗争 - 为什么要用免费设备拒绝客户呢? - 相反,如果你想要一个特定的结果,那就麻烦得到数据>获取数据的价值。那就不会发生了。如果您确实必须具有万无一失的安全性,请保留数据服务器端。
答案 4 :(得分:3)
使用那些可以帮助您检查root
的方法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
}
例如,如果设备已植根
,您可以强制停止应用答案 5 :(得分:0)
我认为传统版权保护的一个“缺点”是它不允许将应用程序安装在root设备上,但它也有自己的问题,很快就会被弃用。
对于客户端检查,您根本不能依赖程序化方法来检测您是否在root设备上运行 - 客户端代码中的任何内容都可以被攻击并被删除。你会惊讶于修改甚至是Proguard混淆的代码是多么容易。最多,你强迫黑客花几个小时或几天来编辑代码并重新编译。这是通过默默无闻的安全性,而不是一种可行的保护机制。
答案 6 :(得分:0)
1)没有。你怎么会拒绝安装?为什么有根设备拒绝安装用户想要在fs上安装的东西?作为生根的一个重点,你可以使设备基本上做任何事情。
2)没有。不适合你的目的。您可以通过常规方法检查您是否可以获得应用程序的root权限。所以你可以检查一下肯定的,但你不能从你的应用程序中以编程方式证明它没有根源。
另外,如果您可以制作完美的复制保护drm系统,那么您可能也会错过用户可以更改应用程序,删除根检查的要点。如果您有某种校验和/ crc检查,用户也可以伪造其结果。