From ecf6c9d5ea0b201210760656439ff8e08b576b0e Mon Sep 17 00:00:00 2001 From: Nullptr Date: Tue, 7 Sep 2021 22:12:05 +0800 Subject: [PATCH] Enable openat hook --- .../lspatch/loader/LSPApplication.java | 19 ++++++------------- .../appstub/LSPAppComponentFactoryStub.java | 5 +++-- core | 2 +- .../main/java/org/lsposed/patch/LSPatch.java | 9 +++++---- .../org/lsposed/lspatch/share/Constants.java | 3 +++ 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java b/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java index aaa457f..f3b515d 100644 --- a/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java +++ b/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java @@ -1,6 +1,7 @@ package org.lsposed.lspatch.loader; import static android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE; +import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH; import static org.lsposed.lspd.service.ConfigFileManager.loadModule; import android.app.ActivityThread; @@ -276,20 +277,12 @@ public class LSPApplication extends ApplicationServiceClient { byPassSignature(context); } if (bypassLv >= Constants.SIGBYPASS_LV_PM_OPENAT) { - File apk = new File(context.getCacheDir(), "lspatchapk.so"); - if (!apk.exists()) { - try (InputStream inputStream = context.getAssets().open("origin_apk.bin"); - FileOutputStream buffer = new FileOutputStream(apk)) { - - int nRead; - byte[] data = new byte[16384]; - - while ((nRead = inputStream.read(data, 0, data.length)) != -1) { - buffer.write(data, 0, nRead); - } - } + String cacheApkPath; + var aInfo = context.getApplicationInfo(); + try (ZipFile sourceFile = new ZipFile(aInfo.sourceDir)) { + cacheApkPath = aInfo.dataDir + "/cache/lspatch/origin/" + sourceFile.getEntry(ORIGINAL_APK_ASSET_PATH).getCrc(); } - SigBypass.enableOpenatHook(context.getApplicationInfo().packageName); + SigBypass.enableOpenatHook(context.getApplicationInfo().sourceDir, cacheApkPath); } } diff --git a/appstub/src/main/java/org/lsposed/lspatch/appstub/LSPAppComponentFactoryStub.java b/appstub/src/main/java/org/lsposed/lspatch/appstub/LSPAppComponentFactoryStub.java index 0580554..fa9c2bd 100644 --- a/appstub/src/main/java/org/lsposed/lspatch/appstub/LSPAppComponentFactoryStub.java +++ b/appstub/src/main/java/org/lsposed/lspatch/appstub/LSPAppComponentFactoryStub.java @@ -1,5 +1,8 @@ package org.lsposed.lspatch.appstub; +import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH; +import static org.lsposed.lspatch.share.Constants.ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH; + import android.annotation.SuppressLint; import android.app.Activity; import android.app.AppComponentFactory; @@ -24,8 +27,6 @@ import dalvik.system.PathClassLoader; public class LSPAppComponentFactoryStub extends AppComponentFactory { private static final String TAG = "LSPatch"; private static final String PROXY_APPLICATION = "org.lsposed.lspatch.appstub.LSPApplicationStub"; - private static final String ORIGINAL_APK_ASSET_PATH = "assets/origin_apk.bin"; - private static final String ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH = "assets/original_app_component_factory.ini"; private ClassLoader appClassLoader = null; private ClassLoader lspClassLoader = null; diff --git a/core b/core index 6b4c519..8c96190 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 6b4c519cf1b0d1ada03c9f39e27c3a0971b47f9e +Subproject commit 8c96190a8ebfa45bcf08f98b0bb374d35e0c00d6 diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java index 82549c9..8b153ea 100644 --- a/patch/src/main/java/org/lsposed/patch/LSPatch.java +++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java @@ -1,5 +1,8 @@ package org.lsposed.patch; +import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH; +import static org.lsposed.lspatch.share.Constants.ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH; + import com.android.tools.build.apkzlib.sign.SigningExtension; import com.android.tools.build.apkzlib.sign.SigningOptions; import com.android.tools.build.apkzlib.zip.AlignmentRules; @@ -84,10 +87,8 @@ public class LSPatch { private static final String PROXY_APP_COMPONENT_FACTORY = "org.lsposed.lspatch.appstub.LSPAppComponentFactoryStub"; - private static final String APP_COMPONENT_FACTORY_ASSET_PATH = "assets/original_app_component_factory.ini"; private static final String SIGNATURE_INFO_ASSET_PATH = "assets/original_signature_info.ini"; private static final String USE_MANAGER_CONTROL_PATH = "assets/use_manager.ini"; - private static final String ORIGINAL_APK_ASSET_PATH = "assets/origin_apk.bin"; private static final String ANDROID_MANIFEST_XML = "AndroidManifest.xml"; private static final HashSet ARCHES = new HashSet<>(Arrays.asList( "armeabi-v7a", @@ -229,7 +230,7 @@ public class LSPatch { // save original appComponentFactory name to asset file even its empty try (var is = new ByteArrayInputStream(appComponentFactory.getBytes(StandardCharsets.UTF_8))) { - dstZFile.add(APP_COMPONENT_FACTORY_ASSET_PATH, is); + dstZFile.add(ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH, is); } if (verbose) @@ -268,7 +269,7 @@ public class LSPatch { try (var is = new ByteArrayInputStream("42".getBytes(StandardCharsets.UTF_8))) { dstZFile.add("assets/" + Constants.CONFIG_NAME_SIGBYPASSLV + sigbypassLevel, is); } - try (var is = new ByteArrayInputStream(Boolean.toString(useManager).getBytes(StandardCharsets.UTF_8))){ + try (var is = new ByteArrayInputStream(Boolean.toString(useManager).getBytes(StandardCharsets.UTF_8))) { dstZFile.add(USE_MANAGER_CONTROL_PATH, is); } diff --git a/share/src/main/java/org/lsposed/lspatch/share/Constants.java b/share/src/main/java/org/lsposed/lspatch/share/Constants.java index 2a34610..364f753 100644 --- a/share/src/main/java/org/lsposed/lspatch/share/Constants.java +++ b/share/src/main/java/org/lsposed/lspatch/share/Constants.java @@ -1,6 +1,9 @@ package org.lsposed.lspatch.share; public class Constants { + final static public String ORIGINAL_APK_ASSET_PATH = "assets/origin_apk.bin"; + final static public String ORIGINAL_APP_COMPONENT_FACTORY_ASSET_PATH = "assets/original_app_component_factory.ini"; + final static public String MANAGER_PACKAGE_NAME = "org.lsposed.lspatch"; final static public String CONFIG_NAME_SIGBYPASSLV = "lspatch_sigbypasslv"; final static public int SIGBYPASS_LV_DISABLE = 0;