Skip to content
This repository was archived by the owner on Sep 6, 2019. It is now read-only.

Commit

Permalink
Retrict set/getUserAgent(String)
Browse files Browse the repository at this point in the history
Refs #825
  • Loading branch information
M66B committed Dec 2, 2013
1 parent eac15fd commit bf412dc
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 14 deletions.
3 changes: 3 additions & 0 deletions assets/meta.xml
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,9 @@
<Hook restriction="system" method="ApplicationsProvider" permissions="" sdk="14" />

<Hook restriction="view" method="getDefaultUserAgent" permissions="" sdk="17" />
<Hook restriction="view" method="getUserAgent" permissions="" sdk="1" />
<Hook restriction="view" method="getUserAgentString" permissions="" sdk="1" />
<Hook restriction="view" method="setUserAgent" permissions="" sdk="1" />
<Hook restriction="view" method="setUserAgentString" permissions="" sdk="1" />
<Hook restriction="view" method="WebView.constructor" permissions="" sdk="1" />
<Hook restriction="view" method="addView" permissions="SYSTEM_ALERT_WINDOW" sdk="1" />
Expand Down
41 changes: 27 additions & 14 deletions src/biz/bokhorst/xprivacy/XWebSettings.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,15 @@ public String getClassName() {
}

// public static String getDefaultUserAgent(Context context) [17]
// public synchronized int getUserAgent()
// public synchronized String getUserAgentString()
// public synchronized void setUserAgent(int ua)
// public synchronized void setUserAgentString (String ua)
// frameworks/base/core/java/android/webkit/WebSettings.java
// http://developer.android.com/reference/android/webkit/WebSettings.html

private enum Methods {
getDefaultUserAgent, setUserAgentString
getDefaultUserAgent, getUserAgent, getUserAgentString, setUserAgent, setUserAgentString
};

public static List<XHook> getInstances(Object instance) {
Expand All @@ -45,16 +48,36 @@ public static List<XHook> getInstances(Object instance) {
List<XHook> listHook = new ArrayList<XHook>();
listHook.add(new XWebSettings(Methods.getDefaultUserAgent, PrivacyManager.cView, className,
Build.VERSION_CODES.JELLY_BEAN_MR1));
listHook.add(new XWebSettings(Methods.getUserAgent, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.getUserAgentString, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.setUserAgent, PrivacyManager.cView, className));
listHook.add(new XWebSettings(Methods.setUserAgentString, PrivacyManager.cView, className));
return listHook;
}

@Override
protected void before(MethodHookParam param) throws Throwable {
if (mMethod == Methods.getDefaultUserAgent) {
// Do nothing
int uid = Binder.getCallingUid();
Context context = (param.args.length > 0 ? (Context) param.args[0] : null);
if (getRestricted(context, uid, true)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.setResult(ua);
}
} else if (mMethod == Methods.getUserAgent) {
if (isRestricted(param))
param.setResult(-1); // User defined
} else if (mMethod == Methods.getUserAgentString) {
if (isRestricted(param)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.setResult(ua);
}
} else if (mMethod == Methods.setUserAgent) {
if (param.args.length > 0)
if (isRestricted(param))
param.args[0] = -1; // User defined
} else if (mMethod == Methods.setUserAgentString) {
if (param.args.length > 0 && param.args[0] != null)
if (param.args.length > 0)
if (isRestricted(param)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.args[0] = ua;
Expand All @@ -65,16 +88,6 @@ protected void before(MethodHookParam param) throws Throwable {

@Override
protected void after(MethodHookParam param) throws Throwable {
if (mMethod == Methods.getDefaultUserAgent) {
int uid = Binder.getCallingUid();
Context context = (param.args.length > 0 ? (Context) param.args[0] : null);
if (getRestricted(context, uid, true)) {
String ua = (String) PrivacyManager.getDefacedProp(Binder.getCallingUid(), "UA");
param.setResult(ua);
}
} else if (mMethod == Methods.setUserAgentString) {
// Do nothing
} else
Util.log(this, Log.WARN, "Unknown method=" + param.method.getName());
// Do nothing
}
}

0 comments on commit bf412dc

Please sign in to comment.