nic-delhi / AarogyaSetu_Android

Aarogya Setu Android app native code
https://www.aarogyasetu.gov.in/
Other
2.88k stars 1.92k forks source link

Check for mock location is not present #21

Open mayurjc opened 4 years ago

mayurjc commented 4 years ago

Anyone can easily change there location by using mock locations apps. Check if any other apps from the device is using in ACCESS_MOCK_LOCATION Permission.

dorky-handler commented 4 years ago
`public static boolean isMockSettingsON(Context context) {
    // returns true if mock location enabled, false if not enabled.
    if (Settings.Secure.getString(context.getContentResolver(),
                                Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"))
        return false;
    else
        return true;
}

`//something like this?

HaneetGH commented 4 years ago

There can be two way to do so..

One check is device has any app which is using MOCK Location permission Second Is system is mocking location?

For One:- static boolean isMockLocationOn(Location location, Context context) { return location.isFromMockProvider(); }

For Second :- static boolean areThereMockPermissionApps(Context context) { int count = 0;

    PackageManager pm = context.getPackageManager();
    List<ApplicationInfo> packages =
            pm.getInstalledApplications(PackageManager.GET_META_DATA);

    for (ApplicationInfo applicationInfo : packages) {
        try {
            PackageInfo packageInfo = pm.getPackageInfo(applicationInfo.packageName,
                    PackageManager.GET_PERMISSIONS);

            // Get Permissions
            String[] requestedPermissions = packageInfo.requestedPermissions;

            if (requestedPermissions != null) {
                for (int i = 0; i < requestedPermissions.length; i++) {
                    if (requestedPermissions[i]
                            .equals("android.permission.ACCESS_MOCK_LOCATION")
                            && !applicationInfo.packageName.equals(context.getPackageName())) {
                        count++;
                    }
                }
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("Got exception " , e.getMessage());
        }
    }

    if (count > 0)
        return true;
    return false;
}
anjannair commented 4 years ago

Yup I can easily use a fake GPS app and keep switching my location. If you have used the UTS app in Mumbai to book a local train ticket then the app stops you from booking a ticket if you're using using mock location. Aarogya Setu can do something like that too