Skip to content

Commit

Permalink
移除gms的推荐hook,调整日志输出
Browse files Browse the repository at this point in the history
  • Loading branch information
kooritea committed Apr 21, 2024
1 parent 82990e6 commit 7e9d08e
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 47 deletions.
9 changes: 4 additions & 5 deletions app/src/main/java/com/kooritea/fcmfix/XposedMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,6 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageP
if (Build.VERSION.SDK_INT < 34) {
XposedBridge.log("[fcmfix] start hook com.android.server.am.ActivityManagerService");
new BroadcastFix(loadPackageParam);

if(loadPackageParam.packageName.equals("com.google.android.gms") && loadPackageParam.isFirstApplication){
XposedBridge.log("[fcmfix] start hook com.google.android.gms");
new ReconnectManagerFix(loadPackageParam);
}
}

XposedBridge.log("[fcmfix] start hook com.android.server.notification.NotificationManagerServiceInjector");
Expand All @@ -46,6 +41,10 @@ public void handleLoadPackage(final XC_LoadPackage.LoadPackageParam loadPackageP
new KeepNotification(loadPackageParam);
}

if(loadPackageParam.packageName.equals("com.google.android.gms") && loadPackageParam.isFirstApplication){
XposedBridge.log("[fcmfix] start hook com.google.android.gms");
new ReconnectManagerFix(loadPackageParam);
}

if(loadPackageParam.packageName.equals("com.miui.powerkeeper") && loadPackageParam.isFirstApplication){
XposedBridge.log("[fcmfix] start hook com.miui.powerkeeper");
Expand Down
39 changes: 19 additions & 20 deletions app/src/main/java/com/kooritea/fcmfix/xposed/AutoStartFix.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.kooritea.fcmfix.xposed;

import android.content.Intent;
import android.util.Log;

import com.kooritea.fcmfix.util.XposedUtils;

Expand Down Expand Up @@ -29,14 +28,14 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) {
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if(targetIsAllow(target)){
XposedHelpers.callStaticMethod(BroadcastQueueInjector,"checkAbnormalBroadcastInQueueLocked", methodHookParam.args[1], methodHookParam.args[0]);
Log.d(TAG, "Allow Auto Start: " + target);
printLog("Allow Auto Start: " + target, true);
methodHookParam.setResult(true);
}
}
}
});
}catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such Method com.android.server.am.BroadcastQueueInjector.checkApplicationAutoStart", false);
printLog("No Such Method com.android.server.am.BroadcastQueueInjector.checkApplicationAutoStart");
}
try{
// miui13
Expand All @@ -49,14 +48,14 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) {
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if(targetIsAllow(target)){
XposedHelpers.callMethod(methodHookParam.thisObject, "checkAbnormalBroadcastInQueueLocked", methodHookParam.args[0]);
Log.d(TAG, "Allow Auto Start: " + target);
printLog("Allow Auto Start: " + target, true);
methodHookParam.setResult(true);
}
}
}
});
}catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such Method com.android.server.am.BroadcastQueueImpl.checkApplicationAutoStart", false);
printLog("No Such Method com.android.server.am.BroadcastQueueImpl.checkApplicationAutoStart");
}

try{
Expand All @@ -69,7 +68,7 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) {
Intent intent = (Intent) XposedHelpers.getObjectField(methodHookParam.args[1], "intent");
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if (targetIsAllow(target)) {
Log.d(TAG,"Allow Auto Start: " + target);
printLog("Allow Auto Start: " + target, true);
methodHookParam.setResult(true);
}
}
Expand All @@ -83,24 +82,24 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) {
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if(targetIsAllow(target)){
//XposedHelpers.callMethod(methodHookParam.thisObject, "checkAbnormalBroadcastInQueueLocked", methodHookParam.args[0]);
Log.d(TAG,"BroadcastQueueModernStubImpl.checkReceiverIfRestricted: " + target);
printLog("BroadcastQueueModernStubImpl.checkReceiverIfRestricted: " + target, true);
methodHookParam.setResult(false);
}
}
});
}catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such class com.android.server.am.BroadcastQueueModernStubImpl", false);
printLog("No Such class com.android.server.am.BroadcastQueueModernStubImpl");
}

try {
Class<?> AutoStartManagerServiceStubImpl = XposedHelpers.findClassIfExists("com.android.server.am.AutoStartManagerServiceStubImpl", loadPackageParam.classLoader);
Class<?> AutoStartManagerServiceStubImpl = XposedHelpers.findClass("com.android.server.am.AutoStartManagerServiceStubImpl", loadPackageParam.classLoader);
XC_MethodHook methodHook = new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {
protected void beforeHookedMethod(MethodHookParam methodHookParam) {
Intent service = (Intent) methodHookParam.args[1];
String target = service.getComponent().getPackageName();
if(targetIsAllow(target)) {
Log.d(TAG,"AutoStartManagerServiceStubImpl.isAllowStartService package_name:" + target);
printLog("AutoStartManagerServiceStubImpl.isAllowStartService package_name: " + target, true);
methodHookParam.setResult(true);
}
}
Expand All @@ -110,19 +109,19 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwa
XposedUtils.findAndHookMethod(AutoStartManagerServiceStubImpl, "isAllowStartService", 3, methodHook);
XposedUtils.findAndHookMethod(AutoStartManagerServiceStubImpl, "isAllowStartService", 4, methodHook);
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such Class com.android.server.am.AutoStartManagerServiceStubImpl.isAllowStartService", false);
printLog("No Such Class com.android.server.am.AutoStartManagerServiceStubImpl.isAllowStartService");
}

try {
Class<?> SmartPowerService = XposedHelpers.findClassIfExists("com.android.server.am.SmartPowerService", loadPackageParam.classLoader);
Class<?> SmartPowerService = XposedHelpers.findClass("com.android.server.am.SmartPowerService", loadPackageParam.classLoader);

printLog("[fcmfix] start hook com.android.server.am.SmartPowerService.isProcessWhiteList");
XposedUtils.findAndHookMethodAnyParam(SmartPowerService, "isProcessWhiteList", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {
protected void beforeHookedMethod(MethodHookParam methodHookParam) {
String target = (String)methodHookParam.args[1];
if(targetIsAllow(target)) {
Log.d(TAG,"SmartPowerService.isProcessWhiteList package_name: " + target);
printLog("SmartPowerService.isProcessWhiteList package_name: " + target, true);
methodHookParam.setResult(true);
}
}
Expand All @@ -131,17 +130,17 @@ protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwa
printLog("[fcmfix] start hook com.android.server.am.SmartPowerService.shouldInterceptBroadcast");
XposedUtils.findAndHookMethodAnyParam(SmartPowerService, "shouldInterceptBroadcast", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {
protected void beforeHookedMethod(MethodHookParam methodHookParam) {
Intent intent = (Intent) XposedHelpers.getObjectField(methodHookParam.args[1], "intent");
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if(targetIsAllow(target)) {
Log.d(TAG,"SmartPowerService.shouldInterceptBroadcast package_name: " + target);
printLog("SmartPowerService.shouldInterceptBroadcast package_name: " + target, true);
methodHookParam.setResult(false);
}
}
});
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such Class com.android.server.am.SmartPowerService", false);
printLog("No Such Class com.android.server.am.SmartPowerService");
}
}

Expand All @@ -157,14 +156,14 @@ protected void afterHookedMethod(MethodHookParam param) {
if("com.google.firebase.MESSAGING_EVENT".equals(intent.getAction())){
String target = intent.getComponent() == null ? intent.getPackage() : intent.getComponent().getPackageName();
if(targetIsAllow(target)){
Log.d(TAG,"Disable MIUI Intercept: " + target);
printLog("Disable MIUI Intercept: " + target, true);
param.setResult(false);
}
}
}
});
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e) {
printLog("No Such Method com.miui.server.smartpower.SmartPowerPolicyManager.shouldInterceptService", false);
printLog("No Such Method com.miui.server.smartpower.SmartPowerPolicyManager.shouldInterceptService");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ protected void onCanReadConfig() {
try {
this.startHook();
} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e) {
printLog("No Such Method com.android.server.notification.NotificationManagerService.cancelAllNotificationsInt", false);
printLog("No Such Method com.android.server.notification.NotificationManagerService.cancelAllNotificationsInt");
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,10 @@ protected void afterHookedMethod(MethodHookParam methodHookParam) {
}
});
}else{
printLog("Not found [isAllowLocalNotification/isDeniedLocalNotification] in com.android.server.notification.[NotificationManagerServiceInjector/NotificationManagerServiceImpl]", false);
printLog("Not found [isAllowLocalNotification/isDeniedLocalNotification] in com.android.server.notification.[NotificationManagerServiceInjector/NotificationManagerServiceImpl]");
}
}catch (XposedHelpers.ClassNotFoundError e){
printLog("Not found [isAllowLocalNotification/isDeniedLocalNotification] in com.android.server.notification.[NotificationManagerServiceInjector/NotificationManagerServiceImpl]", false);
printLog("Not found [isAllowLocalNotification/isDeniedLocalNotification] in com.android.server.notification.[NotificationManagerServiceInjector/NotificationManagerServiceImpl]");
}

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ protected void startHook(){
@Override
protected void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable {
if("gms_control".equals((String) methodHookParam.args[1])) {
printLog("Success: Success: PowerKeeper GMS Limitation. ", false);
printLog("Success: Success: PowerKeeper GMS Limitation. ", true);
methodHookParam.setResult(false);
}
}
Expand Down Expand Up @@ -87,7 +87,7 @@ protected void beforeHookedMethod(XC_MethodHook.MethodHookParam methodHookParam)
XposedHelpers.findAndHookConstructor(MilletPolicy, new Object[] {Context.class, methodHook});

} catch (XposedHelpers.ClassNotFoundError | NoSuchMethodError e){
printLog("No Such Method com.android.server.am.ProcessMemoryCleaner.checkBackgroundAppException", false);
printLog("No Such Method com.android.server.am.ProcessMemoryCleaner.checkBackgroundAppException");
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private void checkVersion() throws Exception {
return;
}
if (!sharedPreferences.getBoolean("isInit", false) || !sharedPreferences.getString("config_version", "").equals(configVersion)) {
printLog("fcmfix_config init");
printLog("fcmfix_config init", true);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("isInit", true);
editor.putBoolean("enable", false);
Expand All @@ -113,33 +113,33 @@ private void checkVersion() throws Exception {
editor.putString("timer_settimeout_method", "");
editor.putString("timer_alarm_type_property", "");
editor.apply();
printLog("正在更新hook位置");
printLog("正在更新hook位置", true);
findAndUpdateHookTarget(sharedPreferences);
return;
}
if (!sharedPreferences.getString("gms_version", "").equals(versionName) ) {
printLog("gms已更新: " + sharedPreferences.getString("gms_version", "") + "(" + sharedPreferences.getLong("gms_version_code", 0) + ")" + "->" + versionName + "(" +versionCode + ")");
printLog("gms已更新: " + sharedPreferences.getString("gms_version", "") + "(" + sharedPreferences.getLong("gms_version_code", 0) + ")" + "->" + versionName + "(" +versionCode + ")", true);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("gms_version", versionName);
editor.putLong("gms_version_code", versionCode);
editor.putBoolean("enable", false);
editor.apply();
printLog("正在更新hook位置");
printLog("正在更新hook位置", true);
findAndUpdateHookTarget(sharedPreferences);
return;
}
if (!sharedPreferences.getBoolean("enable", false)) {
printLog("当前配置文件enable标识为false,FCMFIX退出");
printLog("当前配置文件enable标识为false,FCMFIX退出", true);
return;
}
startHook();
}

protected void startHook() {
final SharedPreferences sharedPreferences = context.getSharedPreferences("fcmfix_config", Context.MODE_PRIVATE);
printLog("timer_class: "+ sharedPreferences.getString("timer_class", ""));
printLog("timer_alarm_type_property: "+ sharedPreferences.getString("timer_alarm_type_property", ""));
printLog("timer_settimeout_method: "+ sharedPreferences.getString("timer_settimeout_method", ""));
printLog("timer_class: "+ sharedPreferences.getString("timer_class", ""), true);
printLog("timer_alarm_type_property: "+ sharedPreferences.getString("timer_alarm_type_property", ""), true);
printLog("timer_settimeout_method: "+ sharedPreferences.getString("timer_settimeout_method", ""), true);
final Class<?> timerClazz = XposedHelpers.findClass(sharedPreferences.getString("timer_class", ""), loadPackageParam.classLoader);
XposedHelpers.findAndHookMethod(timerClazz, "toString", new XC_MethodHook() {
@Override
Expand Down Expand Up @@ -197,7 +197,7 @@ public void run() {
long nextConnectionTime = XposedHelpers.getLongField(param.thisObject, finalMaxField.getName());
if (nextConnectionTime != 0 && nextConnectionTime - SystemClock.elapsedRealtime() < 0) {
context.sendBroadcast(new Intent("com.google.android.intent.action.GCM_RECONNECT"));
printLog("Send broadcast GCM_RECONNECT");
printLog("Send broadcast GCM_RECONNECT", true);
}
timer.cancel();
}
Expand Down Expand Up @@ -260,14 +260,14 @@ protected void afterHookedMethod(final MethodHookParam param) {
editor.putBoolean("enable", true);
editor.apply();
isFinish[0] = true;
printLog("更新hook位置成功");
printLog("更新hook位置成功", true);
sendNotification("自动更新配置文件成功");
startHook();
return;
}
}
}
printLog("自动寻找hook点失败: 未找到目标方法");
printLog("自动寻找hook点失败: 未找到目标方法", true);
}
}
});
Expand All @@ -276,7 +276,7 @@ protected void afterHookedMethod(final MethodHookParam param) {
}
}catch (Throwable e){
editor.putBoolean("enable", false);
printLog("自动寻找hook点失败"+e.getMessage());
printLog("自动寻找hook点失败"+e.getMessage(), true);
this.sendNotification("自动更新配置文件失败", "未能找到hook点,已禁用重连修复和固定心跳功能。");
e.printStackTrace();
}
Expand All @@ -296,7 +296,7 @@ protected void afterHookedMethod(final MethodHookParam param) {
reConnectButton.setText("RECONNECT");
reConnectButton.setOnClickListener(view -> {
context.sendBroadcast(new Intent("com.google.android.intent.action.GCM_RECONNECT"));
printLog("Send broadcast GCM_RECONNECT");
printLog("Send broadcast GCM_RECONNECT", true);
});
linearLayout2.addView(reConnectButton);

Expand Down
Loading

0 comments on commit 7e9d08e

Please sign in to comment.