导航菜单

页面标题

页面副标题

Tasker v6.6.3 - MyVpnService.java 源代码

正在查看: Tasker v6.6.3 应用的 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.ud;

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 = {2131888753, 2131891142, 2131888825, 2131891172};
    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);
                                    pp.C(fileInputStream);
                                    MyVpnService.this.h(parcelFileDescriptor);
                                    return;
                                } catch (Throwable th2) {
                                    th = th2;
                                    MyVpnService.this.h(parcelFileDescriptor3);
                                    pp.C(fileInputStream);
                                    MyVpnService.this.h(parcelFileDescriptor);
                                    throw th;
                                }
                            } catch (Throwable th3) {
                                th = th3;
                                fileInputStream = fileInputStream2;
                                parcelFileDescriptor3 = parcelFileDescriptor4;
                                MyVpnService.this.h(parcelFileDescriptor3);
                                pp.C(fileInputStream);
                                MyVpnService.this.h(parcelFileDescriptor);
                                throw th;
                            }
                        }
                        Thread.sleep(2000L);
                    } catch (InterruptedException unused) {
                        o7.f("MyVpnService", "thread interrupt");
                        ParcelFileDescriptor parcelFileDescriptor5 = parcelFileDescriptor4;
                        parcelFileDescriptor2 = parcelFileDescriptor;
                        parcelFileDescriptor = parcelFileDescriptor5;
                    }
                    if (MyVpnService.this.q) {
                        MyVpnService.this.q = false;
                        pp.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);
                                pp.C(fileInputStream);
                                MyVpnService.this.h(parcelFileDescriptor);
                                return;
                            } catch (Throwable th5) {
                                th = th5;
                                parcelFileDescriptor3 = parcelFileDescriptor;
                                parcelFileDescriptor = parcelFileDescriptor2;
                                MyVpnService.this.h(parcelFileDescriptor3);
                                pp.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;
                        }
                    }
                }
                o7.G("MyVpnService", "failed to create interface");
                MyVpnService.this.h(parcelFileDescriptor);
                pp.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) {
                o7.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 oh.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 (ud.y0.c()) {
                for (String str : list) {
                    if (mode == Mode.Allow) {
                        ud.y0.b(builder, str);
                    } else if (mode == Mode.Deny) {
                        ud.y0.a(builder, str);
                    }
                }
            } else {
                o7.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()) {
            o7.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();
    }
}