Skip to content

Commit fb469b9

Browse files
author
keyongyu
committed
android 8.0
1 parent 25b6b41 commit fb469b9

File tree

5 files changed

+32
-12
lines changed

5 files changed

+32
-12
lines changed

project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/hook/HookFactory.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import android.app.Application;
2626
import android.content.Context;
27+
import android.os.Build;
2728
import android.os.Build.VERSION;
2829
import android.os.Build.VERSION_CODES;
2930

@@ -122,9 +123,10 @@ public void installHook(Hook hook, ClassLoader cl) {
122123

123124

124125
public final void installHook(Context context, ClassLoader classLoader) throws Throwable {
125-
if(ProcessUtils.isMainProcess(context)){
126+
if (ProcessUtils.isMainProcess(context)) {
126127
installHook(new IActivityManagerHook(context), classLoader);
127-
}else {
128+
installHook(new IPackageManagerHook(context), classLoader);
129+
} else {
128130
installHook(new IClipboardBinderHook(context), classLoader);
129131
//for ISearchManager
130132
installHook(new ISearchManagerBinderHook(context), classLoader);
@@ -184,9 +186,8 @@ public final void installHook(Context context, ClassLoader classLoader) throws T
184186
if (VERSION.SDK_INT >= VERSION_CODES.M) {
185187
installHook(new IAppOpsServiceBinderHook(context), classLoader);
186188
}
187-
188-
installHook(new IPackageManagerHook(context), classLoader);
189189
installHook(new IActivityManagerHook(context), classLoader);
190+
installHook(new IPackageManagerHook(context), classLoader);
190191
installHook(new PluginCallbackHook(context), classLoader);
191192
installHook(new InstrumentationHook(context), classLoader);
192193
installHook(new LibCoreHook(context), classLoader);

project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/hook/handle/IPackageManagerHookHandle.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ protected void afterInvoke(Object receiver, Method method, Object[] args, Object
735735
old.addAll(infos);
736736
} else if (ParceledListSliceCompat.isParceledListSlice(invokeResult)) {
737737
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) { //Only for api 24
738-
Method getListMethod = MethodUtils.getAccessibleMethod(invokeResult.getClass(), "getList");
738+
Method getListMethod = ParceledListSliceCompat.Class().getMethod("getList");
739739
List data = (List) getListMethod.invoke(invokeResult);
740740
data.addAll(infos);
741741
}
@@ -1022,7 +1022,7 @@ protected void afterInvoke(Object receiver, Method method, Object[] args, Object
10221022
}
10231023
}
10241024
}
1025-
}catch (Exception e) {
1025+
} catch (Exception e) {
10261026
e.printStackTrace();
10271027
}
10281028
super.afterInvoke(receiver, method, args, invokeResult);

project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/hook/proxy/IActivityManagerHook.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222

2323
package com.morgoo.droidplugin.hook.proxy;
2424

25+
import android.app.ActivityManager;
2526
import android.content.Context;
27+
import android.os.Build;
2628
import android.util.AndroidRuntimeException;
2729

2830
import com.morgoo.droidplugin.hook.BaseHookHandle;
@@ -71,6 +73,22 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
7173

7274
@Override
7375
public void onInstall(ClassLoader classLoader) throws Throwable {
76+
if (Build.VERSION.SDK_INT >= 26) {
77+
// o
78+
Object singleton = FieldUtils.readStaticField(ActivityManager.class, "IActivityManagerSingleton");
79+
Object obj1 = FieldUtils.readField(singleton, "mInstance");
80+
if (obj1 == null) {
81+
SingletonCompat.get(singleton);
82+
obj1 = FieldUtils.readField(singleton, "mInstance");
83+
}
84+
setOldObj(obj1);
85+
Class<?> objClass = mOldObj.getClass();
86+
List<Class<?>> interfaces = Utils.getAllInterfaces(objClass);
87+
Class[] ifs = interfaces != null && interfaces.size() > 0 ? interfaces.toArray(new Class[interfaces.size()]) : new Class[0];
88+
Object proxiedActivityManager = MyProxy.newProxyInstance(objClass.getClassLoader(), ifs, this);
89+
FieldUtils.writeField(singleton, "mInstance", proxiedActivityManager);
90+
return;
91+
}
7492
Class cls = ActivityManagerNativeCompat.Class();
7593
Object obj = FieldUtils.readStaticField(cls, "gDefault");
7694
if (obj == null) {

project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/hook/proxy/IPackageManagerHook.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ protected BaseHookHandle createHookHandle() {
6363
@Override
6464
protected void onInstall(ClassLoader classLoader) throws Throwable {
6565
Object currentActivityThread = ActivityThreadCompat.currentActivityThread();
66+
6667
setOldObj(FieldUtils.readField(currentActivityThread, "sPackageManager"));
6768
Class<?> iPmClass = mOldObj.getClass();
6869
List<Class<?>> interfaces = Utils.getAllInterfaces(iPmClass);

project/Libraries/DroidPlugin/src/com/morgoo/droidplugin/pm/IPluginManagerImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -846,9 +846,9 @@ public int installPackage(String filepath, int flags) throws RemoteException {
846846
} catch (NameNotFoundException e) {
847847
}
848848
if (!mHostRequestedPermission.contains(requestedPermission) && b) {
849-
Log.e(TAG, "No Permission %s", requestedPermission);
850-
new File(apkfile).delete();
851-
return PluginManager.INSTALL_FAILED_NO_REQUESTEDPERMISSION;
849+
Log.w(TAG, "No Permission %s", requestedPermission);
850+
// new File(apkfile).delete();
851+
// return PluginManager.INSTALL_FAILED_NO_REQUESTEDPERMISSION;
852852
}
853853
}
854854
}
@@ -886,9 +886,9 @@ public int installPackage(String filepath, int flags) throws RemoteException {
886886
} catch (NameNotFoundException e) {
887887
}
888888
if (!mHostRequestedPermission.contains(requestedPermission) && b) {
889-
Log.e(TAG, "No Permission %s", requestedPermission);
890-
new File(apkfile).delete();
891-
return PluginManager.INSTALL_FAILED_NO_REQUESTEDPERMISSION;
889+
Log.w(TAG, "No Permission %s", requestedPermission);
890+
// new File(apkfile).delete();
891+
// return PluginManager.INSTALL_FAILED_NO_REQUESTEDPERMISSION;
892892
}
893893
}
894894
}

0 commit comments

Comments
 (0)