Self-Check: Add missing permission check, allow to grant FakeStore spoofing perm

Fixes #1178
This commit is contained in:
Marvin W 2020-09-15 15:56:24 +02:00
parent 03237fc86b
commit 04c955e998
No known key found for this signature in database
GPG Key ID: 072E9235DB996F2A
3 changed files with 40 additions and 15 deletions

View File

@ -63,13 +63,7 @@ public class PermissionCheckGroup implements SelfCheckGroup {
collector.addResult(context.getString(R.string.self_check_name_permission, permLabel), collector.addResult(context.getString(R.string.self_check_name_permission, permLabel),
context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED ? Positive : Negative, context.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED ? Positive : Negative,
context.getString(R.string.self_check_resolution_permission, groupLabel), context.getString(R.string.self_check_resolution_permission, groupLabel),
new SelfCheckGroup.CheckResolver() { fragment -> fragment.requestPermissions(new String[]{permission}, 0));
@Override
public void tryResolve(Fragment fragment) {
fragment.requestPermissions(new String[]{permission}, 0);
}
});
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, e); Log.w(TAG, e);
} }

View File

@ -33,10 +33,14 @@ import org.microg.tools.selfcheck.SystemChecks;
import org.microg.tools.ui.AbstractSelfCheckFragment; import org.microg.tools.ui.AbstractSelfCheckFragment;
import org.microg.tools.ui.AbstractSettingsActivity; import org.microg.tools.ui.AbstractSettingsActivity;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import static android.Manifest.permission.ACCESS_BACKGROUND_LOCATION;
import static android.Manifest.permission.ACCESS_COARSE_LOCATION; import static android.Manifest.permission.ACCESS_COARSE_LOCATION;
import static android.Manifest.permission.ACCESS_FINE_LOCATION;
import static android.Manifest.permission.GET_ACCOUNTS; import static android.Manifest.permission.GET_ACCOUNTS;
import static android.Manifest.permission.READ_EXTERNAL_STORAGE;
import static android.Manifest.permission.READ_PHONE_STATE; import static android.Manifest.permission.READ_PHONE_STATE;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE; import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.os.Build.VERSION.SDK_INT; import static android.os.Build.VERSION.SDK_INT;
@ -49,9 +53,19 @@ public class SelfCheckFragment extends AbstractSelfCheckFragment {
checks.add(new RomSpoofSignatureChecks()); checks.add(new RomSpoofSignatureChecks());
checks.add(new InstalledPackagesChecks()); checks.add(new InstalledPackagesChecks());
if (SDK_INT > LOLLIPOP_MR1) { if (SDK_INT > LOLLIPOP_MR1) {
checks.add(new PermissionCheckGroup(ACCESS_COARSE_LOCATION, "android.permission.ACCESS_BACKGROUND_LOCATION", WRITE_EXTERNAL_STORAGE, GET_ACCOUNTS, READ_PHONE_STATE)); List<String> permissions = new ArrayList<>();
permissions.add(ACCESS_COARSE_LOCATION);
permissions.add(ACCESS_FINE_LOCATION);
if (SDK_INT >= 29) {
permissions.add(ACCESS_BACKGROUND_LOCATION);
}
permissions.add(READ_EXTERNAL_STORAGE);
permissions.add(WRITE_EXTERNAL_STORAGE);
permissions.add(GET_ACCOUNTS);
permissions.add(READ_PHONE_STATE);
checks.add(new PermissionCheckGroup(permissions.toArray(new String[0])));
} }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (SDK_INT >= Build.VERSION_CODES.M) {
checks.add(new SystemChecks()); checks.add(new SystemChecks());
} }
// checks.add(new NlpOsCompatChecks()); // checks.add(new NlpOsCompatChecks());
@ -65,10 +79,8 @@ public class SelfCheckFragment extends AbstractSelfCheckFragment {
@Override @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == SystemChecks.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) reset(LayoutInflater.from(getContext()));
reset(LayoutInflater.from(getContext())); super.onActivityResult(requestCode, resultCode, data);
else
super.onActivityResult(requestCode, resultCode, data);
} }
public static class AsActivity extends AbstractSettingsActivity { public static class AsActivity extends AbstractSettingsActivity {

View File

@ -16,8 +16,13 @@
package org.microg.tools.selfcheck; package org.microg.tools.selfcheck;
import android.content.ComponentName;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.util.Log;
import androidx.fragment.app.Fragment;
import com.google.android.gms.R; import com.google.android.gms.R;
@ -49,11 +54,25 @@ public class InstalledPackagesChecks implements SelfCheckGroup {
private boolean addPackageSignedResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName, String signatureHash) { private boolean addPackageSignedResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName, String signatureHash) {
boolean hashMatches = signatureHash.equals(PackageUtils.firstSignatureDigest(context, androidPackageName)); boolean hashMatches = signatureHash.equals(PackageUtils.firstSignatureDigest(context, androidPackageName));
collector.addResult(context.getString(R.string.self_check_name_correct_sig, nicePackageName), hashMatches ? Positive : Negative, collector.addResult(context.getString(R.string.self_check_name_correct_sig, nicePackageName),
context.getString(R.string.self_check_resolution_correct_sig, nicePackageName)); hashMatches ? Positive : Negative,
context.getString(R.string.self_check_resolution_correct_sig, nicePackageName),
fragment -> tryGrantFakeSignaturePermissionActivity(fragment, androidPackageName));
return hashMatches; return hashMatches;
} }
private void tryGrantFakeSignaturePermissionActivity(Fragment fragment, String androidPackageName) {
ComponentName grantPermissionActivity = new ComponentName(androidPackageName, androidPackageName + ".GrantFakeSignaturePermissionActivity");
try {
Intent intent = new Intent();
intent.setPackage(androidPackageName);
intent.setComponent(grantPermissionActivity);
fragment.startActivityForResult(intent, 1);
} catch (Exception e) {
Log.w("SelfCheck", e);
}
}
private boolean addPackageInstalledResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName) { private boolean addPackageInstalledResult(Context context, ResultCollector collector, String nicePackageName, String androidPackageName) {
boolean packageExists = true; boolean packageExists = true;
try { try {