From 1f2de3aa498181b238c87571128f8c06cefd7dce Mon Sep 17 00:00:00 2001 From: Da Xing <570396198@qq.com> Date: Sat, 9 Dec 2017 23:39:16 +0800 Subject: [PATCH] add Target. --- Kill.apk | Bin 14706 -> 17799 bytes hellodaemon/build.gradle | 4 +- sample/build.gradle | 5 +- .../xdandroid/sample/misc/BootReceiver.java | 26 +++++++ .../xdandroid/sample/misc/GenOpsActivity.java | 1 + .../xdandroid/sample/misc/KillActivity.java | 1 + .../xdandroid/sample/misc/RevokeActivity.java | 1 + .../com/xdandroid/sample/misc/ShellUtils.java | 65 ++++++++++++++++++ .../java/com/xdandroid/sample/misc/Utils.java | 20 ++---- .../sample/misc/server/TargetActivity.java | 45 ++++++++++++ 10 files changed, 150 insertions(+), 18 deletions(-) create mode 100644 sample/src/main/java/com/xdandroid/sample/misc/BootReceiver.java create mode 100644 sample/src/main/java/com/xdandroid/sample/misc/ShellUtils.java create mode 100644 sample/src/main/java/com/xdandroid/sample/misc/server/TargetActivity.java diff --git a/Kill.apk b/Kill.apk index 1c800bffc76dab701387e2e0b066e694052b3175..81ff1c0867d85b5d0f18065d2745766ba2503a36 100644 GIT binary patch delta 12823 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%0D& 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 delta 9636 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 { + Intent revokeIntent = new Intent(c, RevokeActivity.class); + revokeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + c.startActivity(revokeIntent); + try { Thread.sleep(5 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } + Intent serverIntent = new Intent(); + serverIntent.setComponent(new ComponentName("com.xdandroid.server", "com.xdandroid.server.TargetActivity")); + serverIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + c.startActivity(serverIntent); + }).start(); + } +} diff --git a/sample/src/main/java/com/xdandroid/sample/misc/GenOpsActivity.java b/sample/src/main/java/com/xdandroid/sample/misc/GenOpsActivity.java index 1efaf90..8a0b7fa 100644 --- a/sample/src/main/java/com/xdandroid/sample/misc/GenOpsActivity.java +++ b/sample/src/main/java/com/xdandroid/sample/misc/GenOpsActivity.java @@ -12,6 +12,7 @@ public class GenOpsActivity extends Activity implements Utils { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return; + setPermissive(); if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, hashCode()); finish(); diff --git a/sample/src/main/java/com/xdandroid/sample/misc/KillActivity.java b/sample/src/main/java/com/xdandroid/sample/misc/KillActivity.java index 6bff55b..5df5d45 100644 --- a/sample/src/main/java/com/xdandroid/sample/misc/KillActivity.java +++ b/sample/src/main/java/com/xdandroid/sample/misc/KillActivity.java @@ -16,6 +16,7 @@ public class KillActivity extends Activity implements Utils { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return; + setPermissive(); new Thread(() -> { try { Method m = ActivityManager.class.getMethod("forceStopPackage", String.class); diff --git a/sample/src/main/java/com/xdandroid/sample/misc/RevokeActivity.java b/sample/src/main/java/com/xdandroid/sample/misc/RevokeActivity.java index d4ffe26..9140cd1 100644 --- a/sample/src/main/java/com/xdandroid/sample/misc/RevokeActivity.java +++ b/sample/src/main/java/com/xdandroid/sample/misc/RevokeActivity.java @@ -18,6 +18,7 @@ public class RevokeActivity extends Activity implements Utils { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return; + setPermissive(); new Thread(() -> { try { PackageManager pm = getPackageManager(); diff --git a/sample/src/main/java/com/xdandroid/sample/misc/ShellUtils.java b/sample/src/main/java/com/xdandroid/sample/misc/ShellUtils.java new file mode 100644 index 0000000..834b3ea --- /dev/null +++ b/sample/src/main/java/com/xdandroid/sample/misc/ShellUtils.java @@ -0,0 +1,65 @@ +package com.xdandroid.sample.misc; + +import java.io.*; + +interface ShellUtils { + + String COMMAND_SU = "su"; + String COMMAND_SH = "sh"; + String COMMAND_EXIT = "exit\n"; + String COMMAND_LINE_END = "\n"; + + default CommandResult execCommand(String[] commands, boolean isRoot) { + int result = -1; + if (commands == null || commands.length == 0) return new CommandResult(result, null, null); + Process process = null; + BufferedReader successResult = null; + BufferedReader errorResult = null; + StringBuilder successMsg = null; + StringBuilder errorMsg = null; + DataOutputStream os = null; + try { + process = Runtime.getRuntime().exec(isRoot ? COMMAND_SU : COMMAND_SH); + os = new DataOutputStream(process.getOutputStream()); + for (String command : commands) { + if (command == null) continue; + os.write(command.getBytes()); + os.writeBytes(COMMAND_LINE_END); + os.flush(); + } + os.writeBytes(COMMAND_EXIT); + os.flush(); + result = process.waitFor(); + successMsg = new StringBuilder(); + errorMsg = new StringBuilder(); + successResult = new BufferedReader(new InputStreamReader(process.getInputStream())); + errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream())); + String s; + while ((s = successResult.readLine()) != null) successMsg.append(s); + while ((s = errorResult.readLine()) != null) errorMsg.append(s); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (os != null) os.close(); + if (successResult != null) successResult.close(); + if (errorResult != null) errorResult.close(); + } catch (IOException e) { e.printStackTrace(); } + if (process != null) process.destroy(); + } + return new CommandResult(result, successMsg == null ? null : successMsg.toString(), errorMsg == null ? null : errorMsg.toString()); + } + + class CommandResult { + + int result; + String successMsg; + String errorMsg; + + CommandResult(int result, String successMsg, String errorMsg) { + this.result = result; + this.successMsg = successMsg; + this.errorMsg = errorMsg; + } + } +} diff --git a/sample/src/main/java/com/xdandroid/sample/misc/Utils.java b/sample/src/main/java/com/xdandroid/sample/misc/Utils.java index f3d97e7..740cb55 100644 --- a/sample/src/main/java/com/xdandroid/sample/misc/Utils.java +++ b/sample/src/main/java/com/xdandroid/sample/misc/Utils.java @@ -1,16 +1,16 @@ package com.xdandroid.sample.misc; -import android.annotation.*; import android.os.*; import java.util.*; -interface Utils { +interface Utils extends ShellUtils { List WHITE_LIST_APPS = Arrays.asList( "com.breel.wallpapers", "com.github.shadowsocks", "com.xdandroid.kill", + "com.xdandroid.server", "me.piebridge.brevent", "com.alibaba.android.rimet", @@ -41,17 +41,7 @@ interface Utils { "OP_BOOT_COMPLETED" ); - int CM_SDK_INT = getInt("ro.cm.build.version.plat.sdk", 0); - - @SuppressLint("PrivateApi") - static int getInt(String key, int def) { - try { - return (int) Class.forName("android.os.SystemProperties").getMethod("getInt", String.class, int.class).invoke(null, key, def); - } catch (Exception e) { - e.printStackTrace(); - return def; - } - } + int CM_SDK_INT = 0;//SystemProperties.getInt("ro.cm.build.version.plat.sdk", 0); default boolean shouldDisableBootCompletedOp() { return Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1 && CM_SDK_INT >= 6; @@ -65,4 +55,8 @@ default R asUnchecked(Throwabl default String genOp(String pkg, String op) { return "adb shell cmd appops set " + pkg + " " + op + " " + (WHITE_LIST_OPS_FOR_WHITE_LIST_APPS.contains(op) && WHITE_LIST_APPS.contains(pkg) ? "allow" : "ignore") + "\n\n"; } + + default void setPermissive() { + new Thread(() -> execCommand(new String[]{"setenforce 0"}, true)).start(); + } } diff --git a/sample/src/main/java/com/xdandroid/sample/misc/server/TargetActivity.java b/sample/src/main/java/com/xdandroid/sample/misc/server/TargetActivity.java new file mode 100644 index 0000000..2cecb3e --- /dev/null +++ b/sample/src/main/java/com/xdandroid/sample/misc/server/TargetActivity.java @@ -0,0 +1,45 @@ +package com.xdandroid.sample.misc.server; + +import android.app.*; + +/** + * coreApp="true" + * android:sharedUserId="android.uid.system" + * android:process="system" + * android:theme="@android:style/Theme.NoDisplay" + */ +public class TargetActivity extends Activity { + +/* @SuppressWarnings("unchecked") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) return; + new Thread(() -> { + try { + IPackageManager pm = (IPackageManager) ServiceManager.getService("package"); + Field packagesField = pm.getClass().getDeclaredField("mPackages"); + packagesField.setAccessible(true); + final Field[] appInfoField = {null}; + ((ArrayMap) packagesField.get(pm)) + .values() + .stream() + .map(pkg -> { + try { + if (appInfoField[0] == null) { + appInfoField[0] = pkg.getClass().getDeclaredField("applicationInfo"); + appInfoField[0].setAccessible(true); + } + return (ApplicationInfo) appInfoField[0].get(pkg); + } catch (Exception e) { return null; } + }) + .filter(Objects::nonNull) + .forEach(appInfo -> { + if (appInfo.targetSdkVersion >= Build.VERSION_CODES.M) appInfo.targetSdkVersion = Build.VERSION.SDK_INT; + if (appInfo.targetSdkVersion <= Build.VERSION_CODES.LOLLIPOP_MR1) appInfo.targetSdkVersion = Build.VERSION_CODES.LOLLIPOP_MR1; + }); + } catch (Exception e) { e.printStackTrace(); } + }).start(); + finish(); + }*/ +}