1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package de.blinkt.vpndialogxposed;
import android.app.Activity;
import android.content.Context;
import android.os.IBinder;
import android.widget.Toast;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import java.lang.reflect.Method;
public class VpnDialogPatcher implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
if (!lpparam.packageName.equals("com.android.vpndialogs"))
return;
XposedBridge.log("Got VPN Dialog");
XposedHelpers.findAndHookMethod("com.android.vpndialogs.ConfirmDialog", lpparam.classLoader,
"onResume", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
// ServiceManager.getService(Context.CONNECTIVITY_SERVICE));
try {
/*Class servicemanager = Class.forName("android.os.ServiceManager");
Method getService = servicemanager.getMethod("getService",String.class);
IConnectivityManager mService = IConnectivityManager.Stub.asInterface(
(IBinder) getService.invoke(servicemanager, Context.CONNECTIVITY_SERVICE));
*/
Object mService = XposedHelpers.getObjectField(param.thisObject, "mService");
String mPackage = ((Activity) param.thisObject).getCallingPackage();
// App is already allowed do nothing
/*if (mService.prepareVpn(mPackage, null)) {
return;
}*/
Class<?>[] prepareVPNsignature = {String.class, String.class};
if((Boolean) XposedHelpers.callMethod(mService,"prepareVpn",prepareVPNsignature, mPackage,(String)null))
return;
if (mPackage.equals("de.blinkt.openvpn")) {
//mService.prepareVpn(null, mPackage);
XposedHelpers.callMethod(mService,"prepareVpn",prepareVPNsignature, (String)null,mPackage);
((Activity) param.thisObject).setResult(Activity.RESULT_OK);
Toast.makeText((Context)param.thisObject,"Allowed de.blinkt.openvpn",Toast.LENGTH_LONG).show();
((Activity) param.thisObject).finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
|