@Test public void testHiddenApi() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { final Object uid = PackageManager.class.getMethod("getUidForSharedUser", String.class).invoke(condom.getPackageManager(),"android.uid.system"); assertEquals(1000, (int) uid); // This hidden API is used by some 3rd-party libraries, as reported in issue #9 on GitHub. if (SDK_INT >= LOLLIPOP) PackageManager.class.getMethod("getUserBadgeForDensity", UserHandle.class, int.class) .invoke(condom.getPackageManager(), Process.myUserHandle(), DisplayMetrics.DENSITY_DEFAULT); }
assertCallerMatch(data); condom.getPackageManager().getInstalledApplications(0); data = readLastEvent(CondomCore.CondomEvent.CONCERN); assertEquals("PackageManager.getInstalledApplications", data[2]); assertCallerMatch(data); condom.getPackageManager().getInstalledPackages(0); data = readLastEvent(CondomCore.CondomEvent.CONCERN); assertEquals("PackageManager.getInstalledPackages", data[2]); final List<ResolveInfo> result = condom.getPackageManager().queryIntentServices(intent.setPackage(null).setComponent(null), 0); assertEquals(1, result.size()); // 1 left: non.bg.service final List<EventLog.Event> events = readNewEvents(CondomCore.CondomEvent.FILTER_BG_SERVICE); assertEquals(expected_intent, data[3]); final ResolveInfo resolve = condom.getPackageManager().resolveService(intent, 0); assertEquals("non.bg.service", resolve.serviceInfo.applicationInfo.packageName); data = readLastEvent(CondomCore.CondomEvent.FILTER_BG_SERVICE);
with(ALLOWED_INTENTS, allBroadcastApis(context2test), EXPECT_OUTBOUND_JUDGE_PASS); final PackageManager pm = condom.getPackageManager(), dry_pm = dry_condom.getPackageManager(); assertNull(pm.resolveService(intent().setPackage(DISALLOWED_PACKAGE), 0)); context.assertBaseNotCalled();
@Test public void testHiddenApi() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { final Object uid = PackageManager.class.getMethod("getUidForSharedUser", String.class).invoke(condom.getPackageManager(),"android.uid.system"); assertEquals(1000, (int) uid); // This hidden API is used by some 3rd-party libraries, as reported in issue #9 on GitHub. if (SDK_INT >= LOLLIPOP) PackageManager.class.getMethod("getUserBadgeForDensity", UserHandle.class, int.class) .invoke(condom.getPackageManager(), Process.myUserHandle(), DisplayMetrics.DENSITY_DEFAULT); }
tests.add(new Consumer<Intent>() { @Override public void accept(final Intent intent) { condom.getPackageManager().queryBroadcastReceivers(intent, 0); }});
@Test public void testPreventServiceInBackgroundPackages() { final TestContext context = new TestContext(); context.mTestingBackgroundUid = true; final CondomOptions options = new CondomOptions().preventServiceInBackgroundPackages(true).preventBroadcastToBackgroundPackages(false); final CondomContext condom = CondomContext.wrap(context, TAG, options), dry_condom = CondomContext.wrap(context, TAG, options.setDryRun(true)); assertEquals(3, condom.getPackageManager().queryIntentServices(intent(), 0).size()); context.assertBaseCalled(); assertEquals(4, dry_condom.getPackageManager().queryIntentServices(intent(), 0).size()); context.assertBaseCalled(); assertEquals("non.bg.service", condom.getPackageManager().resolveService(intent(), 0).serviceInfo.packageName); context.assertBaseCalled(); assertEquals(7777777, dry_condom.getPackageManager().resolveService(intent(), 0).serviceInfo.applicationInfo.uid); context.assertBaseCalled(); }
@Test public void testContentProviderOutboundJudge() { final TestContext context = new TestContext(); final CondomOptions options = new CondomOptions().setOutboundJudge(new OutboundJudge() { @Override public boolean shouldAllow(final OutboundType type, final @Nullable Intent intent, final String target_pkg) { final String settings_pkg = InstrumentationRegistry.getTargetContext().getPackageManager().resolveContentProvider(Settings.System.CONTENT_URI.getAuthority(), 0).packageName; return ! settings_pkg.equals(target_pkg); }}); final CondomContext condom = CondomContext.wrap(context, TAG, options), dry_condom = CondomContext.wrap(context, TAG, options.setDryRun(true)); assertNull(condom.getPackageManager().resolveContentProvider(Settings.AUTHORITY, 0)); assertNotNull(dry_condom.getPackageManager().resolveContentProvider(Settings.AUTHORITY, 0)); assertNull(condom.getContentResolver().acquireContentProviderClient(Settings.System.CONTENT_URI)); assertNotNull(dry_condom.getContentResolver().acquireContentProviderClient(Settings.System.CONTENT_URI)); }
@Test public void testContentProvider() { final TestContext context = new TestContext(); final CondomContext condom = CondomContext.wrap(context, TAG), dry_condom = CondomContext.wrap(context, TAG, new CondomOptions().setDryRun(true)); // Regular provider access final String android_id = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID); assertNotNull(android_id); final String condom_android_id = Settings.System.getString(condom.getContentResolver(), Settings.System.ANDROID_ID); assertEquals(android_id, condom_android_id); final String dry_android_id = Settings.System.getString(dry_condom.getContentResolver(), Settings.System.ANDROID_ID); assertEquals(android_id, dry_android_id); context.mTestingStoppedProvider = true; // Prevent stopped packages, assertNull(condom.getPackageManager().resolveContentProvider(TEST_AUTHORITY, 0)); assertNotNull(dry_condom.getPackageManager().resolveContentProvider(TEST_AUTHORITY, 0)); assertNull(condom.getContentResolver().acquireContentProviderClient(TEST_CONTENT_URI)); assertNotNull(dry_condom.getContentResolver().acquireContentProviderClient(TEST_CONTENT_URI)); // Providers in system package should not be blocked. assertNotNull(condom.getPackageManager().resolveContentProvider(Settings.AUTHORITY, 0)); assertNotNull(dry_condom.getPackageManager().resolveContentProvider(Settings.AUTHORITY, 0)); assertNotNull(condom.getContentResolver().acquireContentProviderClient(Settings.System.CONTENT_URI)); assertNotNull(dry_condom.getContentResolver().acquireContentProviderClient(Settings.System.CONTENT_URI)); context.mTestingStoppedProvider = false; } private static final String TEST_AUTHORITY = "com.oasisfeng.condom.test";
assertCallerMatch(data); condom.getPackageManager().getInstalledApplications(0); data = readLastEvent(CondomCore.CondomEvent.CONCERN); assertEquals("PackageManager.getInstalledApplications", data[2]); assertCallerMatch(data); condom.getPackageManager().getInstalledPackages(0); data = readLastEvent(CondomCore.CondomEvent.CONCERN); assertEquals("PackageManager.getInstalledPackages", data[2]); assertEquals(intent.toString(), data[3]); final List<ResolveInfo> result = condom.getPackageManager().queryIntentServices(intent.setPackage(null).setComponent(null), 0); assertEquals(1, result.size()); // 1 left: non.bg.service final List<EventLog.Event> events = readNewEvents(CondomCore.CondomEvent.FILTER_BG_SERVICE); assertEquals(expected_intent, data[3]); final ResolveInfo resolve = condom.getPackageManager().resolveService(intent, 0); assertEquals("non.bg.service", resolve.serviceInfo.applicationInfo.packageName); data = readLastEvent(CondomCore.CondomEvent.FILTER_BG_SERVICE);
final PackageManager pm = condom.getPackageManager(), dry_pm = dry_condom.getPackageManager();