diff --git a/CHANGELOG.md b/CHANGELOG.md index a6f07ba1f..a5ab0080f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,6 +29,7 @@ Changelog * Allow white listing / show parameter of *getExternalStorageState* ([issue](/../../issues/1757)) * Added quirk *nousage* to disable usage data for specific applications ([issue](/../../issues/2085)) * Added restrictions for [UsageStatsManager](https://developer.android.com/reference/android/app/usage/UsageStatsManager.html) ([issue](/../../issues/1757)) +* Added restriction *IpPrefix.getRawAddress* ([issue](/../../issues/1757)) [Open issues](https://github.com/M66B/XPrivacy/issues?state=open) diff --git a/res/values/functions.xml b/res/values/functions.xml index 221a71d12..a20e789e3 100644 --- a/res/values/functions.xml +++ b/res/values/functions.xml @@ -234,6 +234,7 @@ Google documentation]]> + Google documentation]]> NfcAdapter]]> diff --git a/src/biz/bokhorst/xprivacy/Meta.java b/src/biz/bokhorst/xprivacy/Meta.java index 17b2b33b2..9ee27e548 100644 --- a/src/biz/bokhorst/xprivacy/Meta.java +++ b/src/biz/bokhorst/xprivacy/Meta.java @@ -310,6 +310,9 @@ public static List get() { // android.net.NetworkInfo mListHook.add(new Hook("network", "NetworkInfo.getExtraInfo", null, 1, "2.2.2", "internet/getExtraInfo").unsafe()); + // android.net.IpPrefix + mListHook.add(new Hook("network", "IpPrefix.getRawAddress", null, 21, "3.5.6", null).unsafe()); + mListHook.add(new Hook("nfc", "getNfcAdapter", "NFC", 14, null, null).unsafe()); mListHook.add(new Hook("nfc", "getDefaultAdapter", "NFC", 10, null, null).unsafe()); diff --git a/src/biz/bokhorst/xprivacy/XIpPrefix.java b/src/biz/bokhorst/xprivacy/XIpPrefix.java new file mode 100644 index 000000000..aee1b3761 --- /dev/null +++ b/src/biz/bokhorst/xprivacy/XIpPrefix.java @@ -0,0 +1,50 @@ +package biz.bokhorst.xprivacy; + +import java.util.ArrayList; +import java.util.List; + +import android.os.Binder; +import biz.bokhorst.xprivacy.XHook; + +public class XIpPrefix extends XHook { + private Methods mMethod; + + private XIpPrefix(Methods method, String restrictionName) { + super(restrictionName, "IpPrefix." + method.name(), null); + mMethod = method; + } + + public String getClassName() { + return "android.net.IpPrefix"; + } + + // public byte[] getRawAddress() + // https://developer.android.com/reference/android/net/IpPrefix.html + // http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.0.0_r1/android/net/IpPrefix.java + + private enum Methods { + getRawAddress + }; + + public static List getInstances() { + List listHook = new ArrayList(); + listHook.add(new XIpPrefix(Methods.getRawAddress, PrivacyManager.cStorage)); + return listHook; + } + + @Override + protected void before(XParam param) throws Throwable { + // Do nothing + } + + @Override + protected void after(XParam param) throws Throwable { + switch (mMethod) { + case getRawAddress: + if (param.getResult() != null) + if (isRestricted(param)) + param.setResult(PrivacyManager.getDefacedProp(Binder.getCallingUid(), "IPInt")); + break; + } + } +} diff --git a/src/biz/bokhorst/xprivacy/XPrivacy.java b/src/biz/bokhorst/xprivacy/XPrivacy.java index 77426fe51..be29733ab 100644 --- a/src/biz/bokhorst/xprivacy/XPrivacy.java +++ b/src/biz/bokhorst/xprivacy/XPrivacy.java @@ -278,6 +278,9 @@ protected void beforeHookedMethod(MethodHookParam param) throws Throwable { // IO bridge hookAll(XIoBridge.getInstances(), null, mSecret); + // IP prefix + hookAll(XIpPrefix.getInstances(), null, mSecret); + // Location manager hookAll(XLocationManager.getInstances(null), null, mSecret);