diff --git a/build.gradle b/build.gradle index 2d23332685..b26d194f86 100644 --- a/build.gradle +++ b/build.gradle @@ -72,7 +72,7 @@ allprojects { group = 'org.microg.gms' ext.appVersionCode = 241017000 ext.baseVersion = ext.appVersionCode.toString()[0..1] + '.' + ext.appVersionCode.toString()[2..3] + '.' + ext.appVersionCode.toString()[4..5] - version = "0.3.0." + ext.baseVersion.replaceAll("\\.", "") + version = "0.3.1." + ext.baseVersion.replaceAll("\\.", "") ext.isReleaseVersion = true } diff --git a/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java b/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java index 9c70aa49da..8de170fa61 100644 --- a/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java +++ b/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java @@ -27,6 +27,7 @@ import android.util.Log; import androidx.annotation.Nullable; +import com.google.android.gms.common.BuildConfig; import org.microg.gms.utils.ExtendedPackageInfo; import java.lang.reflect.Method; @@ -60,7 +61,7 @@ public static boolean isGooglePackage(Context context, String packageName) { */ @Deprecated public static boolean callerHasExtendedAccessPermission(Context context) { - return context.checkCallingPermission("org.microg.gms.EXTENDED_ACCESS") == PackageManager.PERMISSION_GRANTED; + return context.checkCallingPermission(BuildConfig.BASE_PACKAGE_NAME + ".microg.gms.EXTENDED_ACCESS") == PackageManager.PERMISSION_GRANTED; } public static void assertGooglePackagePermission(Context context, GooglePackagePermission permission) { @@ -80,6 +81,11 @@ public static boolean callerHasGooglePackagePermission(Context context, GooglePa packageCandidate ); + // See https://github.com/ReVanced/GmsCore/issues/10. + ExtendedPackageInfo extendedPackageInfo = new ExtendedPackageInfo(context, packageName); + if (!extendedPackageInfo.isInstalled()) + return true; + if (new ExtendedPackageInfo(context, packageName).hasGooglePackagePermission(permission)) { return true; } @@ -240,7 +246,7 @@ public static String getAndCheckPackage(Context context, String suggestedPackage if (packageName != null && suggestedPackageName != null && !packageName.equals(suggestedPackageName)) { throw new SecurityException("UID [" + callingUid + "] is not related to packageName [" + suggestedPackageName + "] (seems to be " + packageName + ")"); } - return PackageSpoofUtils.spoofPackageName(context.getPackageManager(), packageName); + return packageName; } @Nullable diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt index 4d4a36643b..b1cf598651 100644 --- a/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt +++ b/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt @@ -10,7 +10,7 @@ import java.util.* /** * Utilities to spoof package information. */ -internal object PackageSpoofUtils { +object PackageSpoofUtils { private const val TAG = "SpoofUtils" private const val META_SPOOF_PACKAGE_NAME = BuildConfig.BASE_PACKAGE_NAME + ".android.gms.SPOOFED_PACKAGE_NAME" diff --git a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java index 30c1d61c5f..b72e7881ad 100644 --- a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java +++ b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java @@ -27,6 +27,7 @@ import android.content.pm.ResolveInfo; import android.os.IBinder; import android.util.Log; +import com.google.android.gms.base.BuildConfig; import java.util.HashMap; import java.util.HashSet; @@ -179,7 +180,7 @@ public boolean isMicrog(ResolveInfo resolveInfo) { if (resolveInfo == null || resolveInfo.serviceInfo == null) return false; if (resolveInfo.serviceInfo.name.startsWith("org.microg.")) return true; try { - PermissionInfo info = context.getPackageManager().getPermissionInfo("org.microg.gms.EXTENDED_ACCESS", 0); + PermissionInfo info = context.getPackageManager().getPermissionInfo(BuildConfig.BASE_PACKAGE_NAME + ".microg.gms.EXTENDED_ACCESS", 0); return info.packageName.equals(resolveInfo.serviceInfo.packageName); } catch (PackageManager.NameNotFoundException e) { return false; diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml index 4a344d1366..f3301a8a8a 100644 --- a/play-services-core/src/main/AndroidManifest.xml +++ b/play-services-core/src/main/AndroidManifest.xml @@ -62,15 +62,15 @@ android:protectionLevel="dangerous" /> @@ -98,7 +98,7 @@ - + @@ -128,7 +128,7 @@ + android:permission="${basePackageName}.microg.gms.PROVISION" /> diff --git a/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java b/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java index b2016e2239..4d81ec231e 100644 --- a/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java +++ b/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java @@ -15,6 +15,7 @@ import androidx.annotation.RequiresPermission; import com.google.android.gms.base.BuildConfig; +import org.microg.gms.common.PackageSpoofUtils; import org.microg.gms.common.PackageUtils; import org.microg.gms.settings.SettingsContract; @@ -269,7 +270,10 @@ public AuthResponse requestAuth(boolean legacy) throws IOException { } AuthRequest request = new AuthRequest().fromContext(context) .source("android") - .app(packageName, getPackageSignature()) + .app( + PackageSpoofUtils.spoofPackageName(context.getPackageManager(), packageName), + PackageSpoofUtils.spoofStringSignature(context.getPackageManager(), packageName, getPackageSignature()) + ) .email(accountName) .token(getAccountManager().getPassword(account)) .service(service) diff --git a/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java b/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java index 7891ddfbd1..7eb7c194ce 100644 --- a/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java +++ b/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java @@ -34,6 +34,7 @@ import org.microg.gms.auth.AuthManager; import org.microg.gms.auth.AuthResponse; import org.microg.gms.auth.login.LoginActivity; +import org.microg.gms.common.PackageSpoofUtils; import org.microg.gms.common.PackageUtils; import java.util.Arrays; @@ -107,7 +108,7 @@ public Bundle getAuthToken(AccountAuthenticatorResponse response, Account accoun Intent i = new Intent(context, AskPermissionActivity.class); i.putExtras(options); i.putExtra(KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); - i.putExtra(KEY_ANDROID_PACKAGE_NAME, app); + i.putExtra(KEY_ANDROID_PACKAGE_NAME, PackageSpoofUtils.spoofPackageName(context.getPackageManager(), app)); i.putExtra(KEY_ACCOUNT_TYPE, account.type); i.putExtra(KEY_ACCOUNT_NAME, account.name); i.putExtra(KEY_AUTHTOKEN, authTokenType);