我正在构建一个Android应用程序,并希望维护一些我可以调整的环境变量,具体取决于我是处于开发模式还是发布模式.例如,我需要调用Web服务,并且在任一模式下URL都会略有不同.我想将此设置和其他设置外部化,以便我可以根据目标部署轻松更改它们.
SDK中是否有任何最佳实践或任何内容可以满足此需求?
可能重复:
确定是否在root设备上运行
如何(以编程方式)确定Android设备是否:rooted运行软件或ROM的破解副本.
我的数据库中有一些敏感信息,我希望在手机被root用户时加密,即用户可以访问数据库.我怎么检测到?
我已经实施了服务器端验证Google IAP购买令牌.我的移动应用程序将此令牌发送给我,因为它来自Google.
常规令牌看起来像
minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD
但有时我会得到一个像这样的短标记
korpimulxmslxissnschtkdb
当我通过Google Play Developer API验证此令牌时:https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token,对于短令牌,我收到404错误.
问题出在哪儿?这个短令牌可能代表真实交易吗?
我想在我的应用程序中以编程方式查找Android手机是否已植根.我找到了许多链接:确定是否在root设备上运行 有效的方式以编程方式检查我是否植根于Android?讨论同一主题.然而,正如那些链接所提到的,没有一个明确的方法可以找到答案.这些帖子很老了,我想知道在最近的版本中是否有更好的方法可以实现它?
提前致谢!
我使用此答案为我的应用程序实现了Kiosk模式:https://stackoverflow.com/a/26013850
我使用Kingo Root生成平板电脑,然后执行以下命令:
adb shell >
su >
pm disable com.android.systemui >
Run Code Online (Sandbox Code Playgroud)
我正在构建一个只会在我们的设备上用作自助服务终端的应用....
它工作得很好但是我想从Android应用程序本身执行系统ui的禁用和启用.
系统命令是否可以在应用程序中执行?
我创建了一个检查Android手机是否已植根的方法.这样做如下
public int checkrootcommand(String string) {
// TODO Auto-generated method stub
Process exec;
try {
exec = Runtime.getRuntime().exec(new String[]{"su","-c"});
final OutputStreamWriter out = new OutputStreamWriter(exec.getOutputStream());
out.write("exit");
out.flush();
Log.i(SUPER_USER_COMMAND, "su command executed successfully");
return 0; // returns zero when the command is executed successfully
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 1; //returns one when the command execution fails
}
Run Code Online (Sandbox Code Playgroud)
但问题是方法checkrootcommand()首先执行完美,但是当再次调用相同的方法时,超级用户会话仍在运行.有没有办法在执行方法后结束超级用户会话?
Flutter中有没有插件可以检查设备是否已root。我是移动应用程序开发的初学者,据我所知,有一些系统目录需要搜索su二进制文件。
我如何检查Android设备是否已植根?我使用以下代码:
Process proc = Runtime.getRuntime ().exec ("su");
Run Code Online (Sandbox Code Playgroud)
当我在设备上运行它时,我得到了以下异常.
Causes by:Permission denied
Run Code Online (Sandbox Code Playgroud)
但是在模拟器上运行不会给出任何异常.
我正在使用另一种方式来检查.输入adb shell模拟器的命令行返回#,但是对于设备写入adb shell会出现以下错误:
shell@android:/ $ su
su
/system/bin/sh: su: not found
127|shell@android:/ $
Run Code Online (Sandbox Code Playgroud)
那么如何检查设备是否已植根.
提前致谢.
在安装我的应用程序之前,我希望它检查设备是否已 root。我使用了以下代码
private static boolean isRooted()
return findBinary("su");
}
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;
}
Run Code Online (Sandbox Code Playgroud)
它工作正常。但我听说可以更改文件名“su”,并且可以在非根设备中创建名为“su”的文件。在这种情况下,此源不可靠。所以我想除了搜索“su”之外,还知道其他一些方法来找到有根设备。我使用了以下代码
Public static boolean checkRootMethod1()
{
String buildTags = android.os.Build.TAGS;
if (buildTags != null && buildTags.contains("test-keys")) {
return true;
}
return …Run Code Online (Sandbox Code Playgroud) 可能重复:
确定是否在root设备上运行
在启动应用程序时,我想检测运行的设备是否已植根.有没有正确的方法来检测它?
我不认为尝试将文件写入'\ data'以查看root是否是一个很好的解决方案.(因为即使是有根设备的设备也可能没有特权)
我知道运行在root设备上拥有敏感信息的应用程序根本不安全。因此,开发人员通常会在这种情况下进行根目录检测,如果发现设备已植根,则该应用程序将不会安装。一切都好。
开发人员在根检测中使用的主要技术是检查superuser.apk文件,检查chainfire,busybox,执行su命令等。但是,攻击者可以通过几种方法来绕过这些检查,例如将superuser.apk重命名为superuser0.apk。
因此,我正在寻找的是针对此问题的独特解决方案,其中攻击者无法绕过根检测。即使不存在这样的解决方案,也请分享您的观点。因为你们的解决方案可能有助于至少加强根检测代码。