小编3c7*_*c71的帖子

Runtime.exec()bug:挂起而不提供Process对象

我是否用这个:

process = Runtime.getRuntime().exec("logcat -d time");
Run Code Online (Sandbox Code Playgroud)

或者那个:

process = new ProcessBuilder()
              .command("logcat", "-d", "time")
              .redirectErrorStream(true)
              .start();
Run Code Online (Sandbox Code Playgroud)

我得到了相同的结果:它经常挂在exec()或start()调用中,无论我试图做什么!运行它的线程甚至不能被Thread.interrupt()中断!子进程肯定已启动,如果被杀死,则返回上述命令.

这些调用可能在第一次尝试时失败,所以没有办法阅读他们的输出!我也可以用一个简单的"su -c kill xxx"命令行,结果相同!

编辑:开始使用一些调试日志调试NDK项目中的java_lang_ProcessManager.cpp文件!所以这是我到目前为止找到的,在fork()之后父进程执行此操作:

int result;
int count = read(statusIn, &result, sizeof(int));            <- hangs there
close(statusIn);
Run Code Online (Sandbox Code Playgroud)

虽然子进程不应该阻止它:这就是孩子所做的事情(如果开始的话!):

    // Make statusOut automatically close if execvp() succeeds.
    fcntl(statusOut, F_SETFD, FD_CLOEXEC);                      <- make the parent will not block

    // Close remaining unwanted open fds.
    closeNonStandardFds(statusOut, androidSystemPropertiesFd);  <- hangs here sometimes

    ...

    execvp(commands[0], commands);

    // If we got here, execvp() failed or the working …
Run Code Online (Sandbox Code Playgroud)

android process exec

18
推荐指数
2
解决办法
4330
查看次数

如何在APK中摆脱Google的炸药测量?

很长一段时间以来(一年或更长时间),我看到 Play Console 中报告的应用程序崩溃(生产和预发布报告)以及调试有关 Google Play 服务的炸药测量时的一些错误消息,例如:

W/02:14:21.497  at dx.run(:com.google.android.gms.dynamite_measurementdynamite@201817081@20.18.17 (120400-0):2)
W/02:14:21.497  at kx.a(:com.google.android.gms.dynamite_measurementdynamite@201817081@20.18.17 (120400-0):3)
W/02:14:21.497  at lm.A(:com.google.android.gms.dynamite_measurementdynamite@201817081@20.18.17 (120400-0):10)
W/02:14:21.497  at ce.a(:com.google.android.gms.dynamite_measurementdynamite@201817081@20.18.17 (120400-0):5)
W/02:14:21.497  at ce.b(:com.google.android.gms.dynamite_measurementdynamite@201817081@20.18.17 (120400-0):1)
W/02:14:21.497  at android.content.ContextWrapper.unbindService(ContextWrapper.java:755)
W/02:14:21.497  at android.app.ContextImpl.unbindService(ContextImpl.java:1848)
W/02:14:21.497  at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1870)
W/02:14:21.497 java.lang.IllegalArgumentException: Service not registered: ll@e97c861
Run Code Online (Sandbox Code Playgroud)

我不使用任何分析包。只有广告,我理解包括分析。

所以我在 AdMob 的控制台中禁用了我的所有广告分析,但我仍然可以看到这些。崩溃有时占我所有应用程序崩溃的 90%。

由于它没有帮助,我试图用各种方法摆脱这些包:

混淆器:

-assumenosideeffects class com.google.android.gms.dynamite.** {}
Run Code Online (Sandbox Code Playgroud)

摇篮:

all*.exclude group: 'com.google.android.gms', module: ''
Run Code Online (Sandbox Code Playgroud)

最后一个应该摆脱所有的播放服务,但它根本没有。

最后但并非最不重要的一点是,由于 Google 的跟踪,许多用户不想安装我的应用程序!

关于如何摆脱这种情况的任何想法?

编辑:在此处开启了关于 Google 小组的讨论:https : //groups.google.com/d/msg/google-admob-ads-sdk/MPaM8ZsK3uE/gupfpLPtAwAJ

此外,这种行为似乎不太符合 GDPR,并且 SDK 无法提供。

service android analytics playback

16
推荐指数
0
解决办法
3045
查看次数

以 root 身份运行的二进制文件的 exec() 权限被拒绝

我有一个 C 二进制文件,在 Android 中使用 root 用户(su -c binary_path)运行。

一切正常,直到二进制文件尝试 exec*() 另一个二进制文件。它实际上适用于大多数设备,但是在某些设备上我收到 EACCES 错误。

C 二进制文件实际上是使用以下命令启动的:

execlp("su","su","-c",binary_path,NULL);
Run Code Online (Sandbox Code Playgroud)

在某些时候,二进制文件将尝试进行这些调用(简化):

fork();

...

// child here

execlp("sh","sh","-c",script,NULL);
Run Code Online (Sandbox Code Playgroud)

实际上在不同的 Android 6.0 设备(Nexus 9 和 S7)上进行了测试。Nexus 9 正常,S7 失败。

所以我检查了以下所有权限和安全上下文,没有发现任何区别:

/system/bin
/system/bin/sh
/system/bin/ls
<library_path>
/su/bin/su
Run Code Online (Sandbox Code Playgroud)

还检查了二进制文件是否在 UID/GID = 0 的情况下运行,在两个设备上均为 true。

在 logcat 中,我没有看到任何针对缺少权限或违反安全策略的审核。

编辑:刚刚验证了二进制文件运行时的安全上下文:

$ps -Z
u:r:init:s0          root ...
Run Code Online (Sandbox Code Playgroud)

无论 exec() 是否有效,这两种设备都相同。

EDIT2:在设备上失败,/proc/kmsg 在尝试 exec() 时包含此内容:

Restricted making process. PID = 8868(<binary>) PPID = 8340(<binary>)
Run Code Online (Sandbox Code Playgroud)

selinux 中没有 avc,并且在 AOSP 源代码中找不到此文本。

permissions android process exec root

4
推荐指数
1
解决办法
2838
查看次数

标签 统计

android ×3

exec ×2

process ×2

analytics ×1

permissions ×1

playback ×1

root ×1

service ×1