From cc2d0a013c52ff04aaea0146fac57f7d3826b331 Mon Sep 17 00:00:00 2001 From: TIIEHenry <1806968131@qq.com> Date: Sun, 21 Aug 2022 10:11:31 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=80=82=E9=85=8DLSPosed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 适配LSPosed作用域、升级Gradle版本 --- .idea/.gitignore | 3 + .idea/compiler.xml | 6 ++ .idea/gradle.xml | 18 ++++ .idea/jarRepositories.xml | 45 ++++++++ .idea/misc.xml | 10 ++ .idea/vcs.xml | 6 ++ FakeGapps.iml | 19 ---- app/app.iml | 101 ------------------ app/build.gradle | 18 +++- app/src/main/AndroidManifest.xml | 37 ++++--- .../android/server/PackageNameService.java | 53 ++++----- .../android/xf/fakegapps/FakeSignatures.java | 33 +++--- app/src/main/res/values/arrays.xml | 16 +++ build.gradle | 34 +++++- gradle/wrapper/gradle-wrapper.properties | 2 +- 15 files changed, 206 insertions(+), 195 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml delete mode 100644 FakeGapps.iml delete mode 100644 app/app.iml create mode 100644 app/src/main/res/values/arrays.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..fb7f4a8 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..a9f4e52 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..2955729 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..54d5acd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/FakeGapps.iml b/FakeGapps.iml deleted file mode 100644 index bca9441..0000000 --- a/FakeGapps.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/app.iml b/app/app.iml deleted file mode 100644 index 95c2926..0000000 --- a/app/app.iml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 8df9b2d..5a8b0cb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,14 +1,22 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 25 + compileSdkVersion 32 + signingConfigs { + TIIEHenry { + keyAlias rootProject.ext.keyAlias + storeFile rootProject.ext.storeFile + storePassword rootProject.ext.storePassword + keyPassword rootProject.ext.keyPassword + } + } defaultConfig { applicationId "com.thermatk.android.xf.fakegapps" - minSdkVersion 15 - targetSdkVersion 25 - versionCode 3 - versionName "2.0" + minSdkVersion 21 + targetSdkVersion 32 + versionCode 4 + versionName "2.1" } buildTypes { release { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 25bda51..cef0329 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,17 +1,26 @@ - - - - - - + package="com.thermatk.android.xf.fakegapps"> + + + + + + + + diff --git a/app/src/main/java/com/android/server/PackageNameService.java b/app/src/main/java/com/android/server/PackageNameService.java index 09956a1..92f6b48 100644 --- a/app/src/main/java/com/android/server/PackageNameService.java +++ b/app/src/main/java/com/android/server/PackageNameService.java @@ -19,43 +19,30 @@ public class PackageNameService extends IPackageNameService.Stub { private final Context context; public static void inject() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - XposedBridge.hookAllMethods(XposedHelpers.findClass("android.app.ActivityThread", null), - "systemMain", - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) { - ClassLoader loader = Thread.currentThread().getContextClassLoader(); + XposedBridge.hookAllMethods(XposedHelpers.findClass("android.app.ActivityThread", null), + "systemMain", + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); - XposedBridge.hookAllMethods( - XposedHelpers.findClass("com.android.server.am.ActivityManagerService", loader), - "setSystemProcess", - new XC_MethodHook() { - @Override - protected void afterHookedMethod(MethodHookParam param) { - try { - register(getContext(param.thisObject)); - } catch (Throwable ex) { - XposedBridge.log("FakeGApps: Adding the package name service failed."); - } + XposedBridge.hookAllMethods( + XposedHelpers.findClass("com.android.server.am.ActivityManagerService", loader), + "setSystemProcess", + new XC_MethodHook() { + @Override + protected void afterHookedMethod(MethodHookParam param) { + try { + register(getContext(param.thisObject)); + } catch (Throwable ex) { + XposedBridge.log("FakeGApps: Adding the package name service failed."); } } - ); - } + } + ); } - ); - } else { - XposedBridge.hookAllMethods( - XposedHelpers.findClass("com.android.server.am.ActivityManagerService", null), - "main", - new XC_MethodHook() { - @Override - protected final void afterHookedMethod(final MethodHookParam param) { - register((Context) param.getResult()); - } - } - ); - } + } + ); } private static void register(Context context) { diff --git a/app/src/main/java/com/thermatk/android/xf/fakegapps/FakeSignatures.java b/app/src/main/java/com/thermatk/android/xf/fakegapps/FakeSignatures.java index add2348..7902a6c 100644 --- a/app/src/main/java/com/thermatk/android/xf/fakegapps/FakeSignatures.java +++ b/app/src/main/java/com/thermatk/android/xf/fakegapps/FakeSignatures.java @@ -11,6 +11,8 @@ import de.robv.android.xposed.XposedHelpers; public class FakeSignatures implements IXposedHookZygoteInit { + static final String SIGNATURE = "308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a"; + @Override public void initZygote(StartupParam startupParam) throws Throwable { @@ -19,25 +21,22 @@ public void initZygote(StartupParam startupParam) throws Throwable { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { PackageInfo pi = (PackageInfo) param.getResult(); - if (pi != null) { - String packageName = pi.packageName; - if (packageName.contains("com.google.android.gms") || packageName.contains("com.android.vending")) { - - try { - PackageNameServiceManager manager = PackageNameServiceManager.getService(); - String callerPackageName = manager.getPackageName(Binder.getCallingUid()); - - XposedBridge.log("FakeGApps: returning fake signature to " + callerPackageName); - } catch (NullPointerException e) { - XposedBridge.log("FakeGApps: caught the NullPointerException"); - } + if (pi == null) { + return; + } + String packageName = pi.packageName; + if (packageName.contains("com.google.android.gms") || packageName.contains("com.android.vending")) { + try { + PackageNameServiceManager manager = PackageNameServiceManager.getService(); + String callerPackageName = manager.getPackageName(Binder.getCallingUid()); - String sig = "308204433082032ba003020102020900c2e08746644a308d300d06092a864886f70d01010405003074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964301e170d3038303832313233313333345a170d3336303130373233313333345a3074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f696430820120300d06092a864886f70d01010105000382010d00308201080282010100ab562e00d83ba208ae0a966f124e29da11f2ab56d08f58e2cca91303e9b754d372f640a71b1dcb130967624e4656a7776a92193db2e5bfb724a91e77188b0e6a47a43b33d9609b77183145ccdf7b2e586674c9e1565b1f4c6a5955bff251a63dabf9c55c27222252e875e4f8154a645f897168c0b1bfc612eabf785769bb34aa7984dc7e2ea2764cae8307d8c17154d7ee5f64a51a44a602c249054157dc02cd5f5c0e55fbef8519fbe327f0b1511692c5a06f19d18385f5c4dbc2d6b93f68cc2979c70e18ab93866b3bd5db8999552a0e3b4c99df58fb918bedc182ba35e003c1b4b10dd244a8ee24fffd333872ab5221985edab0fc0d0b145b6aa192858e79020103a381d93081d6301d0603551d0e04160414c77d8cc2211756259a7fd382df6be398e4d786a53081a60603551d2304819e30819b8014c77d8cc2211756259a7fd382df6be398e4d786a5a178a4763074310b3009060355040613025553311330110603550408130a43616c69666f726e6961311630140603550407130d4d6f756e7461696e205669657731143012060355040a130b476f6f676c6520496e632e3110300e060355040b1307416e64726f69643110300e06035504031307416e64726f6964820900c2e08746644a308d300c0603551d13040530030101ff300d06092a864886f70d010104050003820101006dd252ceef85302c360aaace939bcff2cca904bb5d7a1661f8ae46b2994204d0ff4a68c7ed1a531ec4595a623ce60763b167297a7ae35712c407f208f0cb109429124d7b106219c084ca3eb3f9ad5fb871ef92269a8be28bf16d44c8d9a08e6cb2f005bb3fe2cb96447e868e731076ad45b33f6009ea19c161e62641aa99271dfd5228c5c587875ddb7f452758d661f6cc0cccb7352e424cc4365c523532f7325137593c4ae341f4db41edda0d0b1071a7c440f0fe9ea01cb627ca674369d084bd2fd911ff06cdbf2cfa10dc0f893ae35762919048c7efc64c7144178342f70581c9de573af55b390dd7fdb9418631895d5f759f30112687ff621410c069308a"; - - Signature[] signatures = new Signature[]{new Signature(sig)}; - pi.signatures = signatures; - param.setResult(pi); + XposedBridge.log("FakeGApps: returning fake signature to " + callerPackageName); + } catch (NullPointerException e) { + XposedBridge.log("FakeGApps: caught the NullPointerException"); } + + pi.signatures = new Signature[]{new Signature(SIGNATURE)}; + param.setResult(pi); } } }); diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..b812c68 --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,16 @@ + + + + com.google.android.GoogleCamera.Urnyx + com.android.vending + com.google.ar.core + org.microg.gms.droidguard + com.google.android.gms + com.google.android.gsf + com.google.android.youtube + + + com.thermatk.android.xf.fakegapps.FakeSignatures + com.thermatk.android.xf.fakegapps.PackageNameServiceHook + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index ac08900..db638fe 100644 --- a/build.gradle +++ b/build.gradle @@ -2,20 +2,44 @@ buildscript { repositories { - jcenter() + maven { url 'https://maven.aliyun.com/repository/public/' } //jcenter和central + maven { url 'https://maven.aliyun.com/repository/google/' } + maven { url 'https://maven.aliyun.com/repository/gradle-plugin/' } + maven { url 'https://maven.fabric.io/public' } google() + mavenLocal() + mavenCentral() } + + ext.kotlin_version = "1.6.10" + Properties properties = new Properties() + properties.load(project.rootProject.file('local.properties').newDataInputStream()) + + Properties keyProps = new Properties() + keyProps.load(file(/*System.getenv("GRADLE_USER_HOME") +*/ "D:/Android/KEY/key.properties").newDataInputStream()) + + ext.keyAlias = keyProps['keyAlias'].toString() + ext.storeFile = file(keyProps['storeFile'].toString()) + ext.storePassword = keyProps['storePassword'].toString() + ext.keyPassword = keyProps['keyPassword'].toString() + dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' + classpath 'com.android.tools.build:gradle:7.1.0' - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files } } allprojects { repositories { - jcenter() + maven { url 'https://maven.aliyun.com/repository/public/' } //jcenter和central + maven { url 'https://maven.aliyun.com/repository/google/' } + maven { url "https://jitpack.io" } + mavenLocal() + mavenCentral() google() } } + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 91f9690..5f1bdb2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip \ No newline at end of file From 06bf167a23a92e20844897386baff10144048fbf Mon Sep 17 00:00:00 2001 From: TIIEHenry Date: Sun, 21 Aug 2022 10:15:13 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E7=94=9F=E6=88=90Release=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/release/app-release.apk | Bin 0 -> 26799 bytes app/release/output-metadata.json | 20 +++++++++++++++++++ app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes 4 files changed, 20 insertions(+) create mode 100644 app/release/app-release.apk create mode 100644 app/release/output-metadata.json delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/app/release/app-release.apk b/app/release/app-release.apk new file mode 100644 index 0000000000000000000000000000000000000000..c208dcffa13438e747a222de36307045fdfe25f3 GIT binary patch literal 26799 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