From 971bcc69465b545cf542e676239abb6bd4ef76a3 Mon Sep 17 00:00:00 2001 From: Howard Wu <40033067+Howard20181@users.noreply.github.com> Date: Mon, 8 Nov 2021 02:25:01 +0800 Subject: [PATCH] Don't use shell context to getprop (#1362) * [core] Getprop * [app] Remove getprop --- .../manager/ui/fragment/LogsFragment.java | 10 +---- .../lspd/service/ConfigFileManager.java | 5 +++ .../lsposed/lspd/service/ConfigManager.java | 1 + .../lsposed/lspd/service/LogcatService.java | 37 +++++++++++++++++++ 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java index 0b4d7782..4fb08cbb 100644 --- a/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java +++ b/app/src/main/java/org/lsposed/manager/ui/fragment/LogsFragment.java @@ -222,17 +222,9 @@ public class LogsFragment extends BaseFragment { } }); - try (var is = Runtime.getRuntime().exec("getprop").getInputStream()) { - os.putNextEntry(new ZipEntry("system_props.log")); - FileUtils.copy(is, os); - os.closeEntry(); - } catch (IOException e) { - Log.w(TAG, "system_props.log", e); - } - var now = LocalDateTime.now(); var name = "app_" + now.toString() + ".log"; - try (var is = Runtime.getRuntime().exec("logcat -d").getInputStream()) { + try (var is = new ProcessBuilder("logcat", "-d").start().getInputStream()) { os.putNextEntry(new ZipEntry(name)); FileUtils.copy(is, os); os.closeEntry(); diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java index 63bc3f88..55f110c1 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigFileManager.java @@ -170,6 +170,11 @@ public class ConfigFileManager { return logDirPath.resolve(getNewLogFileName("modules")).toFile(); } + static File getpropsLogPath() throws IOException { + createLogDirPath(); + return logDirPath.resolve("props.log").toFile(); + } + static Map getLogs() { var map = new LinkedHashMap(); try { diff --git a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java index 0af013c8..23f078d9 100644 --- a/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java +++ b/core/src/main/java/org/lsposed/lspd/service/ConfigManager.java @@ -796,6 +796,7 @@ public class ConfigManager { } public boolean isAddShortcut() { + Log.d(TAG, "Auto add shortcut=" + autoAddShortcut); return autoAddShortcut; } diff --git a/core/src/main/java/org/lsposed/lspd/service/LogcatService.java b/core/src/main/java/org/lsposed/lspd/service/LogcatService.java index c238c5d2..40e5493b 100644 --- a/core/src/main/java/org/lsposed/lspd/service/LogcatService.java +++ b/core/src/main/java/org/lsposed/lspd/service/LogcatService.java @@ -3,16 +3,20 @@ package org.lsposed.lspd.service; import android.annotation.SuppressLint; import android.os.ParcelFileDescriptor; import android.os.SystemProperties; +import android.system.ErrnoException; +import android.system.Os; import android.util.Log; import org.lsposed.lspd.BuildConfig; import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.nio.file.Files; import java.nio.file.LinkOption; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; public class LogcatService implements Runnable { private static final String TAG = "LSPosedLogcat"; @@ -102,6 +106,39 @@ public class LogcatService implements Runnable { start(); }); thread.start(); + getprop(); + } + + private static class GetProp implements Runnable { + private volatile InputStream is; + + @Override + public void run() { + try { + Os.setuid(9999); // AID_NOBODY + is = new ProcessBuilder("getprop").start().getInputStream(); + } catch (ErrnoException | IOException e) { + e.printStackTrace(); + } + } + + public InputStream getValue() { + return is; + } + } + + private void getprop() { + try { + var get = new GetProp(); + var thread = new Thread(get); + thread.start(); + thread.join(); + var is = get.getValue(); + var propsLogPath = ConfigFileManager.getpropsLogPath(); + Files.copy(is, propsLogPath.toPath(), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException | InterruptedException e) { + Log.e(TAG, "getprop: " + e); + } } public void startVerbose() {