Skip to content

Commit 6b7b150

Browse files
committed
opt: chain hook format
1 parent 47f16b5 commit 6b7b150

13 files changed

Lines changed: 786 additions & 493 deletions

File tree

library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/appbase/systemframework/GlobalActionBootstrap.java

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
import com.sevtinge.hyperceiler.common.log.AndroidLog;
3434
import com.sevtinge.hyperceiler.libhook.base.BaseHook;
3535

36+
import io.github.libxposed.api.XposedInterface;
37+
3638
@SuppressLint("UnspecifiedRegisterReceiverFlag")
3739
public class GlobalActionBootstrap extends BaseHook {
3840
private static volatile boolean sGlobalReceiverRegistered;
@@ -86,19 +88,29 @@ public void onReceive(Context context, Intent intent) {
8688

8789
@Override
8890
public void init() {
89-
chainAllConstructors("com.android.server.accessibility.AccessibilityManagerService", chain -> {
90-
Object result = chain.proceed();
91-
Context globalContext = (Context) chain.getArg(0);
92-
registerGlobalReceiver(globalContext);
93-
return result;
94-
});
95-
96-
chainAllMethods("com.android.server.policy.PhoneWindowManager", "init", chain -> {
97-
Object result = chain.proceed();
98-
Context context = (Context) getObjectField(chain.getThisObject(), "mContext");
99-
registerRestartReceiver(context);
100-
return result;
101-
});
91+
chainAllConstructors("com.android.server.accessibility.AccessibilityManagerService",
92+
new XposedInterface.Hooker() {
93+
@Override
94+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
95+
Object result = chain.proceed();
96+
Context globalContext = (Context) chain.getArg(0);
97+
registerGlobalReceiver(globalContext);
98+
return result;
99+
}
100+
}
101+
);
102+
103+
chainAllMethods("com.android.server.policy.PhoneWindowManager", "init",
104+
new XposedInterface.Hooker() {
105+
@Override
106+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
107+
Object result = chain.proceed();
108+
Context context = (Context) getObjectField(chain.getThisObject(), "mContext");
109+
registerRestartReceiver(context);
110+
return result;
111+
}
112+
}
113+
);
102114
}
103115

104116
private void registerGlobalReceiver(Context context) {

library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/appbase/systemframework/ModulePackageTrust.java

Lines changed: 55 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import java.util.Arrays;
3030
import java.util.List;
3131

32+
import io.github.libxposed.api.XposedInterface;
33+
3234
public class ModulePackageTrust extends BaseHook {
3335
private final ArrayList<String> systemPackages = new ArrayList<>();
3436

@@ -39,63 +41,78 @@ public void init() {
3941

4042
chainAllMethods("com.android.server.pm.permission.PermissionManagerServiceImpl",
4143
"shouldGrantPermissionBySignature",
42-
chain -> {
43-
String packageName = (String) callMethod(chain.getArg(0), "getPackageName");
44-
if (systemPackages.contains(packageName)) {
45-
return true;
44+
new XposedInterface.Hooker() {
45+
@Override
46+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
47+
String packageName = (String) callMethod(chain.getArg(0), "getPackageName");
48+
if (systemPackages.contains(packageName)) {
49+
return true;
50+
}
51+
return chain.proceed();
4652
}
47-
return chain.proceed();
4853
});
4954

5055
chainAllMethods("com.android.server.pm.PackageManagerServiceUtils",
5156
"verifySignatures",
52-
chain -> {
53-
String packageName = (String) callMethod(chain.getArg(0), "getName");
54-
if (systemPackages.contains(packageName)) {
55-
return true;
57+
new XposedInterface.Hooker() {
58+
@Override
59+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
60+
String packageName = (String) callMethod(chain.getArg(0), "getName");
61+
if (systemPackages.contains(packageName)) {
62+
return true;
63+
}
64+
return chain.proceed();
5665
}
57-
return chain.proceed();
5866
});
5967

6068
chainAllMethods("com.android.server.pm.ComputerEngine",
6169
"queryIntentActivitiesInternal",
62-
chain -> {
63-
Object result = chain.proceed();
64-
if (chain.getArgs().size() < 6 || !(result instanceof List<?>)) {
65-
return result;
66-
}
67-
List<?> infos = (List<?>) result;
68-
for (Object item : infos) {
69-
if (!(item instanceof ResolveInfo)) {
70-
continue;
70+
new XposedInterface.Hooker() {
71+
@Override
72+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
73+
Object result = chain.proceed();
74+
if (chain.getArgs().size() < 6 || !(result instanceof List<?>)) {
75+
return result;
7176
}
72-
ResolveInfo info = (ResolveInfo) item;
73-
if (info.activityInfo == null) {
74-
continue;
75-
}
76-
if (systemPackages.contains(info.activityInfo.packageName)) {
77-
setObjectField(info, "system", true);
77+
List<?> infos = (List<?>) result;
78+
for (Object item : infos) {
79+
if (!(item instanceof ResolveInfo)) {
80+
continue;
81+
}
82+
ResolveInfo info = (ResolveInfo) item;
83+
if (info.activityInfo == null) {
84+
continue;
85+
}
86+
if (systemPackages.contains(info.activityInfo.packageName)) {
87+
setObjectField(info, "system", true);
88+
}
7889
}
90+
return result;
7991
}
80-
return result;
8192
});
8293

83-
findAndChainMethod("android.content.pm.ApplicationInfo", "isSystemApp", chain -> {
84-
Object result = chain.proceed();
85-
ApplicationInfo applicationInfo = (ApplicationInfo) chain.getThisObject();
86-
if (applicationInfo != null && systemPackages.contains(applicationInfo.packageName)) {
87-
return true;
94+
findAndChainMethod("android.content.pm.ApplicationInfo", "isSystemApp", new XposedInterface.Hooker() {
95+
@Override
96+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
97+
Object result = chain.proceed();
98+
ApplicationInfo applicationInfo = (ApplicationInfo) chain.getThisObject();
99+
if (applicationInfo != null && systemPackages.contains(applicationInfo.packageName)) {
100+
return true;
101+
}
102+
return result;
88103
}
89-
return result;
90104
});
91105

92-
findAndChainMethod("android.content.pm.ApplicationInfo", "isSignedWithPlatformKey", chain -> {
93-
Object result = chain.proceed();
94-
ApplicationInfo applicationInfo = (ApplicationInfo) chain.getThisObject();
95-
if (applicationInfo != null && systemPackages.contains(applicationInfo.packageName)) {
96-
return true;
106+
findAndChainMethod("android.content.pm.ApplicationInfo", "isSignedWithPlatformKey", new XposedInterface.Hooker() {
107+
@Override
108+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
109+
Object result = chain.proceed();
110+
ApplicationInfo applicationInfo = (ApplicationInfo) chain.getThisObject();
111+
if (applicationInfo != null && systemPackages.contains(applicationInfo.packageName)) {
112+
return true;
113+
}
114+
return result;
97115
}
98-
return result;
99116
});
100117

101118
try {

library/libhook/src/main/java/com/sevtinge/hyperceiler/libhook/appbase/systemui/StatusBarActionBootstrap.java

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535

3636
import java.lang.ref.WeakReference;
3737

38+
import io.github.libxposed.api.XposedInterface;
39+
3840
public class StatusBarActionBootstrap extends BaseHook {
3941
private static final String INTENT_CLEAR_MEMORY = "com.android.systemui.taskmanager.Clear";
4042
private static final String INTENT_SYSTEM_ACTION_RECENTS = "SYSTEM_ACTION_RECENTS";
@@ -48,15 +50,20 @@ public class StatusBarActionBootstrap extends BaseHook {
4850

4951
@Override
5052
public void init() {
51-
findAndChainMethod("com.android.systemui.statusbar.phone.CentralSurfacesImpl", "start", chain -> {
52-
Object result = chain.proceed();
53-
Object statusBar = chain.getThisObject();
54-
sStatusBarRef = new WeakReference<>(statusBar);
55-
56-
Context context = (Context) getObjectField(statusBar, "mContext");
57-
registerReceiver(context);
58-
return result;
59-
});
53+
findAndChainMethod("com.android.systemui.statusbar.phone.CentralSurfacesImpl", "start",
54+
new XposedInterface.Hooker() {
55+
@Override
56+
public Object intercept(XposedInterface.Chain chain) throws Throwable {
57+
Object result = chain.proceed();
58+
Object statusBar = chain.getThisObject();
59+
sStatusBarRef = new WeakReference<>(statusBar);
60+
61+
Context context = (Context) getObjectField(statusBar, "mContext");
62+
registerReceiver(context);
63+
return result;
64+
}
65+
}
66+
);
6067
}
6168

6269
private void registerReceiver(Context context) {

0 commit comments

Comments
 (0)