From b54cf4b9ca0024fff3c53cb84f9fdb5b71770fd6 Mon Sep 17 00:00:00 2001 From: david Date: Sat, 14 May 2022 20:06:58 +0800 Subject: [PATCH] fix broadcast queue --- app/release/NoANR_12(Slience).apk | Bin 0 -> 53337 bytes app/release/output-metadata.json | 20 ++ .../java/cn/myflv/android/noanr/Hook.java | 185 +++++++++++++----- 3 files changed, 152 insertions(+), 53 deletions(-) create mode 100644 app/release/NoANR_12(Slience).apk create mode 100644 app/release/output-metadata.json diff --git a/app/release/NoANR_12(Slience).apk b/app/release/NoANR_12(Slience).apk new file mode 100644 index 0000000000000000000000000000000000000000..c5c233032ad78a5fd23ac55007ea078a3361950a GIT binary patch literal 53337 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 r&@gXPTO6qT3cBrlPB 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 b{>Mm(vK$=5qX%$%#0S{|ACND-5bpm1>`4v| literal 0 HcmV?d00001 diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..95110b4 --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,20 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "cn.myflv.android.noanr", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0", + "outputFile": "app-release.apk" + } + ], + "elementType": "File" +} \ No newline at end of file diff --git a/app/src/main/java/cn/myflv/android/noanr/Hook.java b/app/src/main/java/cn/myflv/android/noanr/Hook.java index b34a4f0..7bde173 100644 --- a/app/src/main/java/cn/myflv/android/noanr/Hook.java +++ b/app/src/main/java/cn/myflv/android/noanr/Hook.java @@ -19,11 +19,85 @@ public class Hook implements IXposedHookLoadPackage { private final static String NO_ANR = "NoANR"; + private final static boolean DEBUG = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (lpparam.packageName.equals("android")) { - log("Load success"); + XposedBridge.log(NO_ANR + " Load success"); + XposedHelpers.findAndHookMethod("com.android.server.am.BroadcastQueue", lpparam.classLoader, "deliverToRegisteredReceiverLocked", + "com.android.server.am.BroadcastRecord", + "com.android.server.am.BroadcastFilter", boolean.class, int.class, + new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) throws Throwable { + super.beforeHookedMethod(param); + Object broadcastQueue = param.thisObject; + Object[] args = param.args; + Object filter = args[1]; + Object receiverList = XposedHelpers.getObjectField(filter, "receiverList"); + if (receiverList == null) return; + Object app = XposedHelpers.getObjectField(receiverList, "app"); + if (app == null) return; + Object applicationInfo = XposedHelpers.getObjectField(app, "info"); + if (applicationInfo == null) return; + final Object packageName = XposedHelpers.getObjectField(applicationInfo, "packageName"); + if (packageName == null) return; + Class AppGlobals = XposedHelpers.findClass("android.app.AppGlobals", lpparam.classLoader); + Object packageManager = XposedHelpers.callStaticMethod(AppGlobals, "getPackageManager"); + if (packageManager == null) { + log("packageManager is null"); + } + if (isSystem(packageManager, packageName)) return; + Object activityManagerService = XposedHelpers.getObjectField(broadcastQueue, "mService"); + if (activityManagerService == null) return; + Object activeServices = XposedHelpers.getObjectField(activityManagerService, "mServices"); + if (activeServices == null) return; + final int uid = XposedHelpers.getIntField(applicationInfo, "uid"); + boolean appRestrictedAnyInBackground = (boolean) XposedHelpers.callMethod(activeServices, "appRestrictedAnyInBackground", uid, packageName); +// boolean isOnDeviceIdleAllowlistLOSP = (boolean) XposedHelpers.callMethod(activityManagerService, "isOnDeviceIdleAllowlistLOSP", uid, false); +// if (isOnDeviceIdleAllowlistLOSP) return; + if (!appRestrictedAnyInBackground) return; + XposedHelpers.setObjectField(receiverList, "app", null); + log("Broadcast to " + packageName + " clean success"); + } + + } + ); +// XposedHelpers.findAndHookConstructor("com.android.server.am.BroadcastRecord", lpparam.classLoader, +// "com.android.server.am.BroadcastQueue", "android.content.Intent", "com.android.server.am.ProcessRecord", String.class, +// String.class, int.class, int.class, +// boolean.class, String.class, +// String[].class, String[].class, int.class, +// "android.app.BroadcastOptions", List.class, "android.content.IIntentReceiver", int.class, +// String.class, "android.os.Bundle", boolean.class, boolean.class, +// boolean.class, int.class, boolean.class, +// "android.os.IBinder", boolean.class, new XC_MethodHook() { +// @Override +// protected void afterHookedMethod(MethodHookParam param) throws Throwable { +// super.afterHookedMethod(param); +// try { +// Object broadcastRecord = param.thisObject; +// Object broadcastQueue = XposedHelpers.getObjectField(broadcastRecord, "queue"); +// Object mService = XposedHelpers.getObjectField(broadcastQueue, "mService"); +// if (mService == null) return; +// Object mServices = XposedHelpers.getObjectField(mService, "mServices"); +// if (mServices == null) return; +// Class ResolveInfo = XposedHelpers.findClass("android.content.pm.ResolveInfo", lpparam.classLoader); +// Class BroadcastFilter = XposedHelpers.findClass("com.android.server.am.BroadcastFilter", lpparam.classLoader); +// Class AppGlobals = XposedHelpers.findClass("android.app.AppGlobals", lpparam.classLoader); +// Object packageManager = XposedHelpers.callStaticMethod(AppGlobals, "getPackageManager"); +// if (packageManager == null) { +// log("packageManager is null"); +// } +// remove(mService, broadcastRecord, ResolveInfo, BroadcastFilter, packageManager, mServices); +// } catch (Exception e) { +// log("Exception handle broadcast " + e.getMessage()); +// } +// +// } +// }); + // XposedHelpers.findAndHookMethod("com.android.server.am.BroadcastQueue", lpparam.classLoader, // "broadcastTimeoutLocked", // boolean.class, new XC_MethodHook() { @@ -45,60 +119,64 @@ public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Th // // // }); -// XposedHelpers.findAndHookMethod("com.android.server.am.AnrHelper", lpparam.classLoader, "appNotResponding", -// "com.android.server.am.ProcessRecord", -// String.class, -// "android.content.pm.ApplicationInfo", -// String.class, -// "com.android.server.wm.WindowProcessController", -// boolean.class, -// String.class, new XC_MethodReplacement() { -// @Override -// protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { -// log("Hook success"); -// return null; -// } -// }); - XposedHelpers.findAndHookMethod("com.android.server.am.BroadcastQueue", lpparam.classLoader, - "processNextBroadcastLocked", - boolean.class, boolean.class, - new XC_MethodHook() { + XposedHelpers.findAndHookMethod("com.android.server.am.AnrHelper", lpparam.classLoader, "appNotResponding", + "com.android.server.am.ProcessRecord", + String.class, + "android.content.pm.ApplicationInfo", + String.class, + "com.android.server.wm.WindowProcessController", + boolean.class, + String.class, new XC_MethodReplacement() { @Override - protected void beforeHookedMethod(MethodHookParam param) throws Throwable { - super.beforeHookedMethod(param); - try { - Object broadcastQueue = param.thisObject; - Object mService = XposedHelpers.getObjectField(broadcastQueue, "mService"); - if (mService == null) return; - Object mServices = XposedHelpers.getObjectField(mService, "mServices"); - if (mServices == null) return; - Class ResolveInfo = XposedHelpers.findClass("android.content.pm.ResolveInfo", lpparam.classLoader); - Class BroadcastFilter = XposedHelpers.findClass("com.android.server.am.BroadcastFilter", lpparam.classLoader); - Class AppGlobals = XposedHelpers.findClass("android.app.AppGlobals", lpparam.classLoader); - Object packageManager = XposedHelpers.callStaticMethod(AppGlobals, "getPackageManager"); - if (packageManager == null) { - log("packageManager is null"); - } - Object mParallelBroadcasts = XposedHelpers.getObjectField(broadcastQueue, "mParallelBroadcasts"); - removeList(mService, mParallelBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); - Object mPendingBroadcast = XposedHelpers.getObjectField(broadcastQueue, "mPendingBroadcast"); - remove(mService, mPendingBroadcast, ResolveInfo, BroadcastFilter, packageManager, mServices); - Object mDispatcher = XposedHelpers.getObjectField(broadcastQueue, "mDispatcher"); - if (mDispatcher == null) return; - Object mOrderedBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mOrderedBroadcasts"); - removeList(mService, mOrderedBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); - Object mAlarmBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mAlarmBroadcasts"); - removeDeferralList(mService, mAlarmBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); - Object mDeferredBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mDeferredBroadcasts"); - removeDeferralList(mService, mDeferredBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); - Object mCurrentBroadcast = XposedHelpers.getObjectField(mDispatcher, "mCurrentBroadcast"); - remove(mService, mCurrentBroadcast, ResolveInfo, BroadcastFilter, packageManager, mServices); - } catch (Exception e) { - log("Exception clean broadcast " + e.getMessage()); - } + protected Object replaceHookedMethod(MethodHookParam param) throws Throwable { + Object[] args = param.args; + Object processRecord = args[0]; + Object processName = XposedHelpers.getObjectField(processRecord, "processName"); + if (processName == null) processName = "unknown"; + log("Keep process " + processName + " success"); + return null; } - }); +// XposedHelpers.findAndHookMethod("com.android.server.am.BroadcastQueue", lpparam.classLoader, +// "processNextBroadcastLocked", +// boolean.class, boolean.class, +// new XC_MethodHook() { +// @Override +// protected void beforeHookedMethod(MethodHookParam param) throws Throwable { +// super.beforeHookedMethod(param); +// try { +// Object broadcastQueue = param.thisObject; +// Object mService = XposedHelpers.getObjectField(broadcastQueue, "mService"); +// if (mService == null) return; +// Object mServices = XposedHelpers.getObjectField(mService, "mServices"); +// if (mServices == null) return; +// Class ResolveInfo = XposedHelpers.findClass("android.content.pm.ResolveInfo", lpparam.classLoader); +// Class BroadcastFilter = XposedHelpers.findClass("com.android.server.am.BroadcastFilter", lpparam.classLoader); +// Class AppGlobals = XposedHelpers.findClass("android.app.AppGlobals", lpparam.classLoader); +// Object packageManager = XposedHelpers.callStaticMethod(AppGlobals, "getPackageManager"); +// if (packageManager == null) { +// log("packageManager is null"); +// } +// Object mParallelBroadcasts = XposedHelpers.getObjectField(broadcastQueue, "mParallelBroadcasts"); +// removeList(mService, mParallelBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); +// Object mPendingBroadcast = XposedHelpers.getObjectField(broadcastQueue, "mPendingBroadcast"); +// remove(mService, mPendingBroadcast, ResolveInfo, BroadcastFilter, packageManager, mServices); +// Object mDispatcher = XposedHelpers.getObjectField(broadcastQueue, "mDispatcher"); +// if (mDispatcher == null) return; +// Object mOrderedBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mOrderedBroadcasts"); +// removeList(mService, mOrderedBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); +// Object mAlarmBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mAlarmBroadcasts"); +// removeDeferralList(mService, mAlarmBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); +// Object mDeferredBroadcasts = XposedHelpers.getObjectField(mDispatcher, "mDeferredBroadcasts"); +// removeDeferralList(mService, mDeferredBroadcasts, ResolveInfo, BroadcastFilter, packageManager, mServices); +// Object mCurrentBroadcast = XposedHelpers.getObjectField(mDispatcher, "mCurrentBroadcast"); +// remove(mService, mCurrentBroadcast, ResolveInfo, BroadcastFilter, packageManager, mServices); +// } catch (Exception e) { +// log("Exception clean broadcast " + e.getMessage()); +// } +// } +// +// }); } } @@ -206,7 +284,8 @@ public void remove(Object activityManagerService, Object broadcastRecord, Class< public void log(String str) { - XposedBridge.log(NO_ANR + " -> " + str); + if (DEBUG) XposedBridge.log(NO_ANR + " -> " + str); } + }