diff --git a/app/src/androidTest/java/org/proxydroid/ExampleInstrumentedTest.java b/app/src/androidTest/java/org/proxydroid/ExampleInstrumentedTest.java deleted file mode 100644 index c1665d6..0000000 --- a/app/src/androidTest/java/org/proxydroid/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.proxydroid; - -import android.content.Context; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - - assertEquals("org.proxydroid", appContext.getPackageName()); - } -} diff --git a/app/src/main/assets/all/gost.sh b/app/src/main/assets/all/gost.sh new file mode 100644 index 0000000..efaf9c8 --- /dev/null +++ b/app/src/main/assets/all/gost.sh @@ -0,0 +1,11 @@ +#!/system/bin/sh + +DIR=$1 +SRC=$2 +DST=$3 +KIND=$4 + +PATH=$DIR:$PATH + +gost $SRC $DST &> $DIR/gost_$KIND.log & +echo "$!" > $DIR/gost_$KIND.pid \ No newline at end of file diff --git a/app/src/main/assets/armeabi-v7a/gost.sh b/app/src/main/assets/armeabi-v7a/gost.sh deleted file mode 100644 index 1dc7cdf..0000000 --- a/app/src/main/assets/armeabi-v7a/gost.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/system/bin/sh - -DIR=$1 -SRC=$2 -DST=$3 - -PATH=$DIR:$PATH - -gost $SRC $DST &> $DIR/gost.log & -echo "$!" > $DIR/gost.pid \ No newline at end of file diff --git a/app/src/main/assets/armeabi-v7a/gost_dns.sh b/app/src/main/assets/armeabi-v7a/gost_dns.sh deleted file mode 100644 index 651710b..0000000 --- a/app/src/main/assets/armeabi-v7a/gost_dns.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/system/bin/sh - -DIR=$1 -DNS=$2 - -PATH=$DIR:$PATH - -gost -L dns://:53/$DNS &> $DIR/gost_dns.log & -echo "$!" > $DIR/gost_dns.pid \ No newline at end of file diff --git a/app/src/main/assets/x86/gost.sh b/app/src/main/assets/x86/gost.sh deleted file mode 100644 index 1dc7cdf..0000000 --- a/app/src/main/assets/x86/gost.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/system/bin/sh - -DIR=$1 -SRC=$2 -DST=$3 - -PATH=$DIR:$PATH - -gost $SRC $DST &> $DIR/gost.log & -echo "$!" > $DIR/gost.pid \ No newline at end of file diff --git a/app/src/main/assets/x86/gost_dns.sh b/app/src/main/assets/x86/gost_dns.sh deleted file mode 100644 index 651710b..0000000 --- a/app/src/main/assets/x86/gost_dns.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/system/bin/sh - -DIR=$1 -DNS=$2 - -PATH=$DIR:$PATH - -gost -L dns://:53/$DNS &> $DIR/gost_dns.log & -echo "$!" > $DIR/gost_dns.pid \ No newline at end of file diff --git a/app/src/main/java/org/proxydroid/AppManager.java b/app/src/main/java/org/proxydroid/AppManager.java index 6c21e49..38bd5d2 100644 --- a/app/src/main/java/org/proxydroid/AppManager.java +++ b/app/src/main/java/org/proxydroid/AppManager.java @@ -15,6 +15,7 @@ import android.os.Handler; import android.os.Message; import android.preference.PreferenceManager; +import android.util.Log; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -313,8 +314,9 @@ public static ProxyedApp[] getProxyedApps(Context context, boolean self) { app.setProxyed(true); } else app.setProxyed(Arrays.binarySearch(tordApps, app.getUsername()) >= 0); - if (app.isProxyed()) + if (app.isProxyed()) { vectorApps.add(app); + } } diff --git a/app/src/main/java/org/proxydroid/ProxyDroid.java b/app/src/main/java/org/proxydroid/ProxyDroid.java index b412214..a7fef4f 100644 --- a/app/src/main/java/org/proxydroid/ProxyDroid.java +++ b/app/src/main/java/org/proxydroid/ProxyDroid.java @@ -184,6 +184,7 @@ private void CopyAssets() { } else { abi = Build.CPU_ABI; } + // Copy per arch try { if (abi.matches("armeabi-v7a|arm64-v8a")) files = assetManager.list("armeabi-v7a"); @@ -211,6 +212,29 @@ private void CopyAssets() { } } } + + // Copy for all + try { + files = assetManager.list("all"); + } catch (IOException e) { + Log.e(TAG, e.getMessage()); + } + if (files != null) { + for (String file : files) { + InputStream in; + OutputStream out; + try { + in = assetManager.open("all/" + file); + out = new FileOutputStream(getFilesDir().getAbsolutePath() + "/" + file); + copyFile(in, out); + in.close(); + out.flush(); + out.close(); + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + } + } + } } private void copyFile(InputStream in, OutputStream out) throws IOException { @@ -1025,7 +1049,6 @@ private void reset() { Utils.runRootCommand( "chmod 700 " + filePath + "/gost.sh\n" - + "chmod 700 " + filePath + "/gost_dns.sh\n" + "chmod 700 " + filePath + "/gost\n"); } diff --git a/app/src/main/java/org/proxydroid/ProxyDroidService.java b/app/src/main/java/org/proxydroid/ProxyDroidService.java index 0a65ec2..6103778 100644 --- a/app/src/main/java/org/proxydroid/ProxyDroidService.java +++ b/app/src/main/java/org/proxydroid/ProxyDroidService.java @@ -91,11 +91,15 @@ public class ProxyDroidService extends Service { final static String CMD_IPTABLES_REDIRECT_ADD_HTTP = "iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to 8123\n" + "iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to 8123\n" - + "iptables -t nat -A OUTPUT -p tcp --dport 5228 -j REDIRECT --to 8123\n"; + + "iptables -t nat -A OUTPUT -p tcp --dport 5228 -j REDIRECT --to 8123\n" + + "iptables -t nat -A OUTPUT -p udp --dport 443 -j REDIRECT --to 8124\n" + + "iptables -t nat -A OUTPUT -p udp --dport 5228 -j REDIRECT --to 8124\n"; final static String CMD_IPTABLES_DNAT_ADD_HTTP = "iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8123\n" + "iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:8123\n" - + "iptables -t nat -A OUTPUT -p tcp --dport 5228 -j DNAT --to-destination 127.0.0.1:8123\n"; + + "iptables -t nat -A OUTPUT -p tcp --dport 5228 -j DNAT --to-destination 127.0.0.1:8123\n" + + "iptables -t nat -A OUTPUT -p udp --dport 443 -j DNAT --to-destination 127.0.0.1:8124\n" + + "iptables -t nat -A OUTPUT -p udp --dport 5228 -j DNAT --to-destination 127.0.0.1:8124\n"; final static String CMD_IPTABLES_REDIRECT_ADD_SOCKS = "iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to 8123\n"; @@ -166,18 +170,20 @@ private void enableProxy() { final String u = Utils.preserve(user); final String p = Utils.preserve(password); - String src = "-L=red://127.0.0.1:8123?sniffing=true"; + String srcTcp = "-L=red://127.0.0.1:8123?sniffing=true"; + String srcUdp = "-L=redu://127.0.0.1:8124?ttl=30s"; + String srcDns = "-L=dns://:53/" + dns; String auth = ""; if (!u.isEmpty() && !p.isEmpty()) { auth = u + ":" + p + "@"; } - String dst = "-F=" + proxyType + "://" + auth + hostName + ":" + port; + String dstTcp = "-F=" + proxyType + "://" + auth + hostName + ":" + port; + String dstUdp = "-F=relay://" + hostName + ":" + port; - // Start gost here - Utils.runRootCommand(basePath + "gost.sh " + basePath + " " + src + " " + dst); - - // Start DNS - Utils.runRootCommand(basePath + "gost_dns.sh " + basePath + " " + dns); + // Start gost tcp here + Utils.runRootCommand(basePath + "gost.sh " + basePath + " " + srcTcp + " " + dstTcp + " " + "tcp"); + Utils.runRootCommand(basePath + "gost.sh " + basePath + " " + srcUdp + " " + dstUdp + " " + "udp"); + Utils.runRootCommand(basePath + "gost.sh " + basePath + " " + srcDns + " '' " + "dns"); StringBuilder cmd = new StringBuilder(); @@ -245,7 +251,6 @@ public boolean handleCommand() { Utils.runRootCommand( "chmod +x " + basePath + "gost.sh\n" - + "chmod +x " + basePath + "gost_dns.sh\n" + "chmod +x " + basePath + "gost\n"); @@ -381,8 +386,8 @@ private void onDisconnect() { sb.append(Utils.getIptables()).append(" -t nat -F OUTPUT\n"); - sb.append("kill -9 `cat ").append(basePath).append("gost.pid`\n"); - + sb.append("kill -9 `cat ").append(basePath).append("gost_tcp.pid`\n"); + sb.append("kill -9 `cat ").append(basePath).append("gost_udp.pid`\n"); sb.append("kill -9 `cat ").append(basePath).append("gost_dns.pid`\n"); new Thread() {