From 740df7a51c837ccf8d48c53090c1fb867e83fa06 Mon Sep 17 00:00:00 2001 From: swift_gan <939543405@qq.com> Date: Tue, 17 Dec 2019 14:12:57 +0800 Subject: [PATCH 1/2] revert nullptr check --- hooklib/src/main/java/com/swift/sandhook/SandHook.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hooklib/src/main/java/com/swift/sandhook/SandHook.java b/hooklib/src/main/java/com/swift/sandhook/SandHook.java index 7a9f30bf..6c316f73 100644 --- a/hooklib/src/main/java/com/swift/sandhook/SandHook.java +++ b/hooklib/src/main/java/com/swift/sandhook/SandHook.java @@ -229,6 +229,9 @@ private static Object[] getFakeArgs(Method method) { } public static Object getObject(long address) { + if (address == 0) { + return null; + } long threadSelf = getThreadId(); return getObjectNative(threadSelf, address); } From 42587ffea42423f163c0cc2749dba9e5b5e4aa9e Mon Sep 17 00:00:00 2001 From: Jim Wu Date: Thu, 19 Dec 2019 09:27:46 +0800 Subject: [PATCH 2/2] Optimize: remove redundant judgment --- .../sandhook/xposedcompat/XposedCompat.java | 4 +-- .../classloaders/ComposeClassLoader.java | 34 ------------------- .../classloaders/ProxyClassLoader.java | 30 ++++++++++++++++ .../xposedcompat/methodgen/DynamicBridge.java | 4 +-- .../sandhook/xposedcompat/XposedCompat.java | 4 +-- .../utils/ComposeClassLoader.java | 31 ----------------- .../xposedcompat/utils/ProxyClassLoader.java | 30 ++++++++++++++++ 7 files changed, 66 insertions(+), 71 deletions(-) delete mode 100644 xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ComposeClassLoader.java create mode 100644 xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ProxyClassLoader.java delete mode 100644 xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ComposeClassLoader.java create mode 100644 xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ProxyClassLoader.java diff --git a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java index ec2b002c..221499db 100644 --- a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java +++ b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java @@ -3,7 +3,7 @@ import android.app.Application; import android.content.Context; -import com.swift.sandhook.xposedcompat.classloaders.ComposeClassLoader; +import com.swift.sandhook.xposedcompat.classloaders.ProxyClassLoader; import com.swift.sandhook.xposedcompat.methodgen.DynamicBridge; import com.swift.sandhook.xposedcompat.utils.ApplicationUtils; import com.swift.sandhook.xposedcompat.utils.FileUtils; @@ -76,7 +76,7 @@ public static ClassLoader getSandHookXposedClassLoader(ClassLoader appOriginClas if (sandHookXposedClassLoader != null) { return sandHookXposedClassLoader; } else { - sandHookXposedClassLoader = new ComposeClassLoader(sandBoxHostClassLoader, appOriginClassLoader); + sandHookXposedClassLoader = new ProxyClassLoader(sandBoxHostClassLoader, appOriginClassLoader); return sandHookXposedClassLoader; } } diff --git a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ComposeClassLoader.java b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ComposeClassLoader.java deleted file mode 100644 index 6d968f6f..00000000 --- a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ComposeClassLoader.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.swift.sandhook.xposedcompat.classloaders; - -/** - * Created by weishu on 17/11/30. - */ - -public class ComposeClassLoader extends ClassLoader { - - private final ClassLoader mAppClassLoader; - public ComposeClassLoader(ClassLoader parent, ClassLoader appClassLoader) { - super(parent); - mAppClassLoader = appClassLoader; - } - - @Override - protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - Class clazz = null; - - try { - clazz = mAppClassLoader.loadClass(name); - } catch (ClassNotFoundException e) { - // IGNORE. - } - if (clazz == null) { - clazz = super.loadClass(name, resolve); - } - - if (clazz == null) { - throw new ClassNotFoundException(); - } - - return clazz; - } -} diff --git a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ProxyClassLoader.java b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ProxyClassLoader.java new file mode 100644 index 00000000..69788b3a --- /dev/null +++ b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/classloaders/ProxyClassLoader.java @@ -0,0 +1,30 @@ +package com.swift.sandhook.xposedcompat.classloaders; + +public class ProxyClassLoader extends ClassLoader { + + private final ClassLoader mClassLoader; + + public ProxyClassLoader(ClassLoader parentCL, ClassLoader appCL) { + super(parentCL); + mClassLoader = appCL; + } + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + Class clazz = null; + + try { + clazz = mClassLoader.loadClass(name); + } catch (ClassNotFoundException ignored) { + } + + if (clazz == null) { + clazz = super.loadClass(name, resolve); + if (clazz == null) { + throw new ClassNotFoundException(); + } + } + + return clazz; + } +} \ No newline at end of file diff --git a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/methodgen/DynamicBridge.java b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/methodgen/DynamicBridge.java index 541ca70c..858df495 100644 --- a/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/methodgen/DynamicBridge.java +++ b/xposedcompat/src/main/java/com/swift/sandhook/xposedcompat/methodgen/DynamicBridge.java @@ -6,7 +6,7 @@ import com.swift.sandhook.blacklist.HookBlackList; import com.swift.sandhook.wrapper.HookWrapper; import com.swift.sandhook.xposedcompat.XposedCompat; -import com.swift.sandhook.xposedcompat.classloaders.ComposeClassLoader; +import com.swift.sandhook.xposedcompat.classloaders.ProxyClassLoader; import com.swift.sandhook.xposedcompat.hookstub.HookMethodEntity; import com.swift.sandhook.xposedcompat.hookstub.HookStubManager; import com.swift.sandhook.xposedcompat.utils.DexLog; @@ -73,7 +73,7 @@ public static synchronized void hookMethod(Member hookMethod, XposedBridge.Addit hookMaker = defaultHookMaker; } hookMaker.start(hookMethod, additionalHookInfo, - new ComposeClassLoader(DynamicBridge.class.getClassLoader(), hookMethod.getDeclaringClass().getClassLoader()), dexDir == null ? null : dexDir.getAbsolutePath()); + new ProxyClassLoader(DynamicBridge.class.getClassLoader(), hookMethod.getDeclaringClass().getClassLoader()), dexDir == null ? null : dexDir.getAbsolutePath()); hookedInfo.put(hookMethod, hookMaker.getCallBackupMethod()); } DexLog.d("hook method <" + hookMethod.toString() + "> cost " + (System.currentTimeMillis() - timeStart) + " ms, by " + (stub != null ? "internal stub" : "dex maker")); diff --git a/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java b/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java index 2da6edad..bbebcc23 100644 --- a/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java +++ b/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/XposedCompat.java @@ -11,7 +11,7 @@ import com.swift.sandhook.wrapper.StubMethodsFactory; import com.swift.sandhook.xposedcompat.utils.ApplicationUtils; import com.swift.sandhook.xposedcompat.utils.ClassUtils; -import com.swift.sandhook.xposedcompat.utils.ComposeClassLoader; +import com.swift.sandhook.xposedcompat.utils.ProxyClassLoader; import com.swift.sandhook.xposedcompat.utils.ProcessUtils; import java.lang.reflect.Constructor; @@ -227,7 +227,7 @@ public static ClassLoader getSandHookXposedClassLoader(ClassLoader appOriginClas if (sandHookXposedClassLoader != null) { return sandHookXposedClassLoader; } else { - sandHookXposedClassLoader = new ComposeClassLoader(sandBoxHostClassLoader, appOriginClassLoader); + sandHookXposedClassLoader = new ProxyClassLoader(sandBoxHostClassLoader, appOriginClassLoader); return sandHookXposedClassLoader; } } diff --git a/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ComposeClassLoader.java b/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ComposeClassLoader.java deleted file mode 100644 index 6d238c74..00000000 --- a/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ComposeClassLoader.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.swift.sandhook.xposedcompat.utils; - - -public class ComposeClassLoader extends ClassLoader { - - private final ClassLoader mAppClassLoader; - public ComposeClassLoader(ClassLoader parent, ClassLoader appClassLoader) { - super(parent); - mAppClassLoader = appClassLoader; - } - - @Override - protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { - Class clazz = null; - - try { - clazz = mAppClassLoader.loadClass(name); - } catch (ClassNotFoundException e) { - // IGNORE. - } - if (clazz == null) { - clazz = super.loadClass(name, resolve); - } - - if (clazz == null) { - throw new ClassNotFoundException(); - } - - return clazz; - } -} diff --git a/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ProxyClassLoader.java b/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ProxyClassLoader.java new file mode 100644 index 00000000..93477e32 --- /dev/null +++ b/xposedcompat_new/src/main/java/com/swift/sandhook/xposedcompat/utils/ProxyClassLoader.java @@ -0,0 +1,30 @@ +package com.swift.sandhook.xposedcompat.utils; + +public class ProxyClassLoader extends ClassLoader { + + private final ClassLoader mClassLoader; + + public ProxyClassLoader(ClassLoader parentCL, ClassLoader appCL) { + super(parentCL); + mClassLoader = appCL; + } + + @Override + protected Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + Class clazz = null; + + try { + clazz = mClassLoader.loadClass(name); + } catch (ClassNotFoundException ignored) { + } + + if (clazz == null) { + clazz = super.loadClass(name, resolve); + if (clazz == null) { + throw new ClassNotFoundException(); + } + } + + return clazz; + } +}