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 246162e2c1..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 @@ -81,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; } @@ -241,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-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);