正在查看: Tasker v6.5.11 应用的 MyVpnService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: Tasker v6.5.11 应用的 MyVpnService.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package net.dinglisch.android.taskerm;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.VpnService;
import android.os.ParcelFileDescriptor;
import androidx.annotation.Keep;
import java.io.FileInputStream;
import java.util.List;
import net.dinglisch.android.taskerm.yd;
public class MyVpnService extends VpnService {
private static List<String> r;
private static Mode s;
private static MyVpnService t;
private static Object u = new Object();
private static Object v = new Object();
private static final int[] w = {2131888741, 2131891120, 2131888813, 2131891150};
private Thread i = null;
private boolean q = true;
@Keep
public enum Mode {
AllowAll,
Allow,
DenyAll,
Deny
}
class a implements Runnable {
a() {
}
@Override
public void run() {
ParcelFileDescriptor parcelFileDescriptor;
FileInputStream fileInputStream;
ParcelFileDescriptor parcelFileDescriptor2;
ParcelFileDescriptor parcelFileDescriptor3 = null;
FileInputStream fileInputStream2 = null;
parcelFileDescriptor3 = null;
try {
byte[] bArr = new byte[32767];
parcelFileDescriptor = null;
ParcelFileDescriptor parcelFileDescriptor4 = null;
while (true) {
try {
if (fileInputStream2 != null) {
try {
if (fileInputStream2.read(bArr) > 0) {
}
} catch (Exception e) {
e = e;
fileInputStream = fileInputStream2;
parcelFileDescriptor3 = parcelFileDescriptor4;
try {
e.printStackTrace();
MyVpnService.this.h(parcelFileDescriptor3);
dq.C(fileInputStream);
MyVpnService.this.h(parcelFileDescriptor);
return;
} catch (Throwable th2) {
th = th2;
MyVpnService.this.h(parcelFileDescriptor3);
dq.C(fileInputStream);
MyVpnService.this.h(parcelFileDescriptor);
throw th;
}
} catch (Throwable th3) {
th = th3;
fileInputStream = fileInputStream2;
parcelFileDescriptor3 = parcelFileDescriptor4;
MyVpnService.this.h(parcelFileDescriptor3);
dq.C(fileInputStream);
MyVpnService.this.h(parcelFileDescriptor);
throw th;
}
}
Thread.sleep(2000L);
} catch (InterruptedException unused) {
r7.f("MyVpnService", "thread interrupt");
ParcelFileDescriptor parcelFileDescriptor5 = parcelFileDescriptor4;
parcelFileDescriptor2 = parcelFileDescriptor;
parcelFileDescriptor = parcelFileDescriptor5;
}
if (MyVpnService.this.q) {
MyVpnService.this.q = false;
dq.C(fileInputStream2);
try {
parcelFileDescriptor2 = MyVpnService.this.o(MyVpnService.s, MyVpnService.r).establish();
if (parcelFileDescriptor2 == null) {
break;
}
try {
fileInputStream = new FileInputStream(parcelFileDescriptor2.getFileDescriptor());
} catch (Exception e2) {
e = e2;
fileInputStream = fileInputStream2;
} catch (Throwable th4) {
th = th4;
fileInputStream = fileInputStream2;
}
try {
MyVpnService.this.h(parcelFileDescriptor);
fileInputStream2 = fileInputStream;
parcelFileDescriptor4 = parcelFileDescriptor;
parcelFileDescriptor = parcelFileDescriptor2;
} catch (Exception e3) {
e = e3;
parcelFileDescriptor3 = parcelFileDescriptor;
parcelFileDescriptor = parcelFileDescriptor2;
e.printStackTrace();
MyVpnService.this.h(parcelFileDescriptor3);
dq.C(fileInputStream);
MyVpnService.this.h(parcelFileDescriptor);
return;
} catch (Throwable th5) {
th = th5;
parcelFileDescriptor3 = parcelFileDescriptor;
parcelFileDescriptor = parcelFileDescriptor2;
MyVpnService.this.h(parcelFileDescriptor3);
dq.C(fileInputStream);
MyVpnService.this.h(parcelFileDescriptor);
throw th;
}
} catch (Exception e4) {
e = e4;
fileInputStream = fileInputStream2;
parcelFileDescriptor3 = parcelFileDescriptor;
} catch (Throwable th6) {
th = th6;
fileInputStream = fileInputStream2;
parcelFileDescriptor3 = parcelFileDescriptor;
}
}
}
r7.G("MyVpnService", "failed to create interface");
MyVpnService.this.h(parcelFileDescriptor);
dq.C(fileInputStream2);
MyVpnService.this.h(parcelFileDescriptor2);
} catch (Exception e5) {
e = e5;
parcelFileDescriptor = null;
fileInputStream = null;
} catch (Throwable th7) {
th = th7;
parcelFileDescriptor = null;
fileInputStream = null;
}
}
}
private static void g() {
r = null;
s = null;
}
public void h(ParcelFileDescriptor parcelFileDescriptor) {
if (parcelFileDescriptor != null) {
try {
parcelFileDescriptor.close();
} catch (Exception e) {
r7.l("MyVpnService", "closeInterface", e);
}
}
}
private void i() {
Thread thread = this.i;
if (thread != null) {
thread.interrupt();
this.i = null;
}
}
public static Mode j() {
Mode mode = s;
return mode == null ? Mode.AllowAll : mode;
}
public static List<String> k() {
return r;
}
public static String[] l(Resources resources) {
return vh.s(resources, w);
}
private static boolean m() {
boolean z;
synchronized (u) {
z = t != null;
}
return z;
}
public static boolean n(int i) {
return i == Mode.AllowAll.ordinal() || i == Mode.DenyAll.ordinal();
}
public VpnService.Builder o(Mode mode, List<String> list) {
VpnService.Builder builder = new VpnService.Builder(this);
builder.setSession("NetAccessService").addAddress("192.168.0.1", 24).addDnsServer("8.8.8.8").addRoute("0.0.0.0", 0).addRoute("::", 0).addAddress("fde4:8dba:82e1:ffff::1", 64);
if (list != null) {
if (yd.y0.c()) {
for (String str : list) {
if (mode == Mode.Allow) {
yd.y0.b(builder, str);
} else if (mode == Mode.Deny) {
yd.y0.a(builder, str);
}
}
} else {
r7.G("MyVpnService", "app specification not supported");
}
}
return builder;
}
public static void q(Mode mode) {
s = mode;
}
public static void r(List<String> list) {
r = list;
}
private static void s(MyVpnService myVpnService) {
synchronized (u) {
t = myVpnService;
}
}
public static void t(Context context) {
synchronized (v) {
synchronized (u) {
try {
MyVpnService myVpnService = t;
if (myVpnService != null) {
myVpnService.w();
}
} catch (Throwable th2) {
throw th2;
}
}
}
}
public static boolean u(android.content.Context r6, net.dinglisch.android.taskerm.MyVpnService.Mode r7, java.util.List<java.lang.String> r8) {
throw new UnsupportedOperationException("Method not decompiled: net.dinglisch.android.taskerm.MyVpnService.u(android.content.Context, net.dinglisch.android.taskerm.MyVpnService$Mode, java.util.List):boolean");
}
private void v() {
Thread thread = new Thread(new a(), "MyVpnService.runnable");
this.i = thread;
thread.start();
}
private static boolean x(Context context, boolean z) {
long currentTimeMillis = System.currentTimeMillis();
while (System.currentTimeMillis() - currentTimeMillis < 8000 && z != m()) {
r7.f("MyVpnService", "wait for instance start/stop " + z);
try {
Thread.sleep(50L);
} catch (InterruptedException unused) {
}
}
return z == m();
}
@Override
public void onDestroy() {
i();
super.onDestroy();
s(null);
}
@Override
public void onRevoke() {
w();
}
@Override
public int onStartCommand(Intent intent, int i, int i2) {
s(this);
i();
v();
return 1;
}
public void p() {
this.q = true;
}
public void w() {
i();
stopSelf();
g();
}
}