Created
February 8, 2017 00:29
-
-
Save spacekitteh/dc857bd6dd4da7b67ff436e1ed1032d9 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
project build/ | |
diff --git a/target/product/core.mk b/target/product/core.mk | |
index b108b145e..a8d4ac4b6 100644 | |
--- a/target/product/core.mk | |
+++ b/target/product/core.mk | |
@@ -60,6 +60,10 @@ PRODUCT_PACKAGES += \ | |
MmsService \ | |
chromium \ | |
Updater \ | |
+ GmsCore \ | |
+ GsfProxy \ | |
+ MicroGUiTools\ | |
+ UnifiedNlpApi\ | |
F-Droid \ | |
PdfViewer | |
project frameworks/base/ | |
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml | |
index 430c6b64..b23fdb3d 100644 | |
--- a/core/res/AndroidManifest.xml | |
+++ b/core/res/AndroidManifest.xml | |
@@ -1903,6 +1903,13 @@ | |
android:description="@string/permdesc_getPackageSize" | |
android:protectionLevel="normal" /> | |
+ <!-- @hide Allows an application to change the package signature as | |
+ seen by applications --> | |
+ <permission android:name="android.permission.FAKE_PACKAGE_SIGNATURE" | |
+ android:protectionLevel="dangerous" | |
+ android:label="@string/permlab_fakePackageSignature" | |
+ android:description="@string/permdesc_fakePackageSignature" /> | |
+ | |
<!-- @deprecated No longer useful, see | |
{@link android.content.pm.PackageManager#addPackageToPreferred} | |
for details. --> | |
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml | |
index b79f8a1b..1b21416b 100644 | |
--- a/core/res/res/values/config.xml | |
+++ b/core/res/res/values/config.xml | |
@@ -1267,6 +1267,8 @@ | |
<string-array name="config_locationProviderPackageNames" translatable="false"> | |
<!-- The standard AOSP fused location provider --> | |
<item>com.android.location.fused</item> | |
+ <!-- The (faked) microg fused location provider --> | |
+ <item>com.google.android.gms</item> | |
</string-array> | |
<!-- This string array can be overriden to enable test location providers initially. --> | |
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml | |
index f42c9ed1..cfbc4af3 100644 | |
--- a/core/res/res/values/strings.xml | |
+++ b/core/res/res/values/strings.xml | |
@@ -664,6 +664,11 @@ | |
<!-- Permissions --> | |
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> | |
+ <string name="permlab_fakePackageSignature">Spoof package signature</string> | |
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> | |
+ <string name="permdesc_fakePackageSignature">Allows the app to pretend to be a different app. Malicious applications might be able to use this to access private application data. Grant this permission with caution only!</string> | |
+ | |
+ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. --> | |
<string name="permlab_statusBar">disable or modify status bar</string> | |
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. --> | |
<string name="permdesc_statusBar">Allows the app to disable the status bar or add and remove system icons.</string> | |
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java | |
index 430538f7..b625b1cc 100644 | |
--- a/services/core/java/com/android/server/pm/PackageManagerService.java | |
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java | |
@@ -3067,8 +3067,38 @@ public class PackageManagerService extends IPackageManager.Stub { | |
? Collections.<String>emptySet() : permissionsState.getPermissions(userId); | |
final PackageUserState state = ps.readUserState(userId); | |
- return PackageParser.generatePackageInfo(p, gids, flags, | |
- ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId); | |
+ return mayFakeSignature(p, PackageParser.generatePackageInfo(p, gids, flags, | |
+ ps.firstInstallTime, ps.lastUpdateTime, permissions, state, userId), | |
+ permissions); | |
+ } | |
+ | |
+ private PackageInfo mayFakeSignature(PackageParser.Package p, PackageInfo pi, | |
+ Set<String> permissions) { | |
+ try { | |
+ if (permissions.contains("android.permission.FAKE_PACKAGE_SIGNATURE") | |
+ && p.applicationInfo.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1 | |
+ && p.mAppMetaData != null | |
+ // Check that it's actually allowed to fake a package signature. | |
+ // Only core system apps are allowed. | |
+ && isSystemApp(p) | |
+ //|| (p.applicationInfo.privateFlags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) | |
+ && true == p.coreApp ){ | |
+ String sig = p.mAppMetaData.getString("fake-signature"); | |
+ if (sig != null && pi.signatures != null ){ | |
+ // Add faked signature to the package signatures. | |
+ Signature[] newSigs = new Signature[pi.signatures.length + 1]; | |
+ System.arraycopy(pi.signatures, 0, newSigs, 0, pi.signatures.length); | |
+ newSigs[newSigs.length - 1] = new Signature(sig); | |
+ Log.i("PackageManagerService.FAKE_PACKAGE_SIGNATURE", "Faking package signature: " + | |
+ sig.toString()); | |
+ pi.signatures = newSigs; | |
+ } | |
+ } | |
+ } catch (Throwable t) { | |
+ // We should never die because of any failures, this is system code! | |
+ Log.w("PackageManagerService.FAKE_PACKAGE_SIGNATURE", t); | |
+ } | |
+ return pi; | |
} | |
@Override | |
project packages/apps/GmsCore/ | |
diff --git a/Android.mk b/Android.mk | |
index 516e72b..46f1f2a 100644 | |
--- a/Android.mk | |
+++ b/Android.mk | |
@@ -26,12 +26,12 @@ gmscore_build := $(gmscore_root)/$(gmscore_dir)/build | |
gmscore_apk := build/outputs/apk/play-services-core-release-unsigned.apk | |
$(gmscore_root)/$(gmscore_dir)/$(gmscore_apk): | |
- rm -Rf $(gmscore_build) | |
- mkdir -p $(gmscore_out) | |
- ln -s $(gmscore_out) $(gmscore_build) | |
- echo "sdk.dir=$(ANDROID_HOME)" > $(gmscore_root)/local.properties | |
- cd $(gmscore_root) && git submodule update --recursive --init | |
- cd $(gmscore_root)/$(gmscore_dir) && JAVA_TOOL_OPTIONS="$(JAVA_TOOL_OPTIONS) -Dfile.encoding=UTF8" ../gradlew assembleRelease | |
+ rm -Rf $(gmscore_build);\ | |
+ mkdir -p $(ANDROID_BUILD_TOP)/$(gmscore_out);\ | |
+ ln -s $(ANDROID_BUILD_TOP)/$(gmscore_out) $(ANDROID_BUILD_TOP)/$(gmscore_build) ;\ | |
+ echo "sdk.dir=$(ANDROID_HOME)" > $(gmscore_root)/local.properties ;\ | |
+ cd $(gmscore_root) && git submodule update --recursive --init ;\ | |
+ cd $(gmscore_dir) && JAVA_TOOL_OPTIONS="$(JAVA_TOOL_OPTIONS) -Dfile.encoding=UTF8" ../gradlew assembleRelease | |
LOCAL_CERTIFICATE := platform | |
LOCAL_SRC_FILES := $(gmscore_dir)/$(gmscore_apk) | |
diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml | |
index 96f3b38..b03eb9f 100644 | |
--- a/play-services-core/src/main/AndroidManifest.xml | |
+++ b/play-services-core/src/main/AndroidManifest.xml | |
@@ -15,6 +15,7 @@ | |
~ limitations under the License. | |
--> | |
<manifest package="com.google.android.gms" | |
+ coreApp="true" | |
xmlns:android="http://schemas.android.com/apk/res/android"> | |
<permission | |
project packages/apps/GsfProxy/ | |
diff --git a/Android.mk b/Android.mk | |
index 50889ae..f3988d1 100644 | |
--- a/Android.mk | |
+++ b/Android.mk | |
@@ -26,12 +26,12 @@ gsfproxy_build := $(gsfproxy_root)/$(gsfproxy_dir)/build | |
gsfproxy_apk := build/outputs/apk/services-framework-proxy-release-unsigned.apk | |
$(gsfproxy_root)/$(gsfproxy_dir)/$(gsfproxy_apk): | |
- rm -Rf $(gsfproxy_build) | |
- mkdir -p $(gsfproxy_out) | |
- ln -s $(gsfproxy_out) $(gsfproxy_build) | |
- echo "sdk.dir=$(ANDROID_HOME)" > $(gsfproxy_root)/local.properties | |
- cd $(gsfproxy_root) && git submodule update --recursive --init | |
- cd $(gsfproxy_root)/$(gsfproxy_dir) && JAVA_TOOL_OPTIONS="$(JAVA_TOOL_OPTIONS) -Dfile.encoding=UTF8" ../gradlew assembleRelease | |
+ rm -Rf $(gsfproxy_build); \ | |
+ mkdir -p $(ANDROID_BUILD_TOP)/$(gsfproxy_out); \ | |
+ ln -s $(ANDROID_BUILD_TOP)/$(gsfproxy_out) $(ANDROID_BUILD_TOP)/$(gsfproxy_build); \ | |
+ echo "sdk.dir=$(ANDROID_HOME)" > $(gsfproxy_root)/local.properties; \ | |
+ cd $(gsfproxy_root) && git submodule update --recursive --init ; \ | |
+ cd $(gsfproxy_dir) && JAVA_TOOL_OPTIONS="$(JAVA_TOOL_OPTIONS) -Dfile.encoding=UTF8" ../gradlew assembleRelease | |
LOCAL_CERTIFICATE := platform | |
LOCAL_SRC_FILES := $(gsfproxy_dir)/$(gsfproxy_apk) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment