├── Easy163 ├── app │ ├── .gitignore │ ├── release │ │ ├── easy163-release-test.apk │ │ ├── easy163-release-test.zip │ │ └── output.json │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── icon.png │ │ │ │ ├── github.png │ │ │ │ └── icon_tile.png │ │ │ ├── xml │ │ │ │ └── network_security_config.xml │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ ├── drawable │ │ │ │ └── side_nav_bar.xml │ │ │ ├── menu │ │ │ │ └── activity_main_drawer.xml │ │ │ └── layout │ │ │ │ ├── activity_main.xml │ │ │ │ ├── app_bar_main.xml │ │ │ │ ├── nav_header_main.xml │ │ │ │ └── content_main.xml │ │ │ ├── java │ │ │ └── org │ │ │ │ └── ndroi │ │ │ │ └── easy163 │ │ │ │ ├── vpn │ │ │ │ ├── tcpip │ │ │ │ │ ├── TCBStatus.java │ │ │ │ │ ├── IpUtil.java │ │ │ │ │ └── Packet.java │ │ │ │ ├── util │ │ │ │ │ ├── ProxyException.java │ │ │ │ │ └── ByteBufferPool.java │ │ │ │ ├── config │ │ │ │ │ └── Config.java │ │ │ │ ├── hookhttp │ │ │ │ │ ├── Hook.java │ │ │ │ │ ├── HookHttp.java │ │ │ │ │ ├── Request.java │ │ │ │ │ └── Response.java │ │ │ │ ├── block │ │ │ │ │ ├── BlockHttps.java │ │ │ │ │ └── BlockHttp.java │ │ │ │ ├── bio │ │ │ │ │ ├── BioUtil.java │ │ │ │ │ └── BioUdpHandler.java │ │ │ │ └── LocalVPNService.java │ │ │ │ ├── hooks │ │ │ │ ├── BaseHook.java │ │ │ │ ├── utils │ │ │ │ │ └── JsonUtil.java │ │ │ │ ├── CollectHook.java │ │ │ │ ├── SongPlayHook.java │ │ │ │ ├── PlaylistHook.java │ │ │ │ └── DownloadHook.java │ │ │ │ ├── utils │ │ │ │ ├── Song.java │ │ │ │ ├── ReadStream.java │ │ │ │ ├── ConcurrencyTask.java │ │ │ │ ├── Keyword.java │ │ │ │ ├── EasyLog.java │ │ │ │ └── Crypto.java │ │ │ │ ├── providers │ │ │ │ ├── utils │ │ │ │ │ ├── KeywordMatch.java │ │ │ │ │ ├── BitRate.java │ │ │ │ │ └── MiguCrypto.java │ │ │ │ ├── KuwoMusic.java │ │ │ │ ├── KugouMusic.java │ │ │ │ ├── MiguMusic.java │ │ │ │ ├── QQMusic.java │ │ │ │ └── Provider.java │ │ │ │ ├── core │ │ │ │ ├── Find.java │ │ │ │ ├── Server.java │ │ │ │ ├── Cache.java │ │ │ │ ├── Search.java │ │ │ │ └── Local.java │ │ │ │ └── ui │ │ │ │ ├── EasyTileService.java │ │ │ │ └── MainActivity.java │ │ │ └── AndroidManifest.xml │ ├── proguard-rules.pro │ └── build.gradle ├── settings.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── .idea │ ├── vcs.xml │ ├── runConfigurations.xml │ ├── gradle.xml │ ├── misc.xml │ ├── jarRepositories.xml │ └── codeStyles │ │ └── Project.xml ├── .gitignore ├── build.gradle ├── gradle.properties ├── gradlew.bat └── gradlew ├── LICENSE └── README.md /Easy163/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /Easy163/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /Easy163/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /Easy163/app/release/easy163-release-test.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/app/release/easy163-release-test.apk -------------------------------------------------------------------------------- /Easy163/app/release/easy163-release-test.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/app/release/easy163-release-test.zip -------------------------------------------------------------------------------- /Easy163/app/src/main/res/mipmap-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/app/src/main/res/mipmap-xxhdpi/icon.png -------------------------------------------------------------------------------- /Easy163/app/src/main/res/mipmap-xxhdpi/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/app/src/main/res/mipmap-xxhdpi/github.png -------------------------------------------------------------------------------- /Easy163/app/src/main/res/mipmap-xxhdpi/icon_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ndroi/easy163/HEAD/Easy163/app/src/main/res/mipmap-xxhdpi/icon_tile.png -------------------------------------------------------------------------------- /Easy163/app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Easy163/.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Easy163/.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches/build_file_checksums.ser 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | .DS_Store 9 | /build 10 | /captures 11 | .externalNativeBuild 12 | -------------------------------------------------------------------------------- /Easy163/app/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":17,"versionName":"1.7.5","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] -------------------------------------------------------------------------------- /Easy163/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #D2361C 4 | #AF2B15 5 | #D81B60 6 | 7 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/tcpip/TCBStatus.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.tcpip; 2 | 3 | public enum TCBStatus 4 | { 5 | SYN_SENT, 6 | SYN_RECEIVED, 7 | ESTABLISHED, 8 | CLOSE_WAIT, 9 | LAST_ACK, 10 | //new 11 | CLOSED, 12 | } 13 | -------------------------------------------------------------------------------- /Easy163/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Sep 15 22:10:41 CST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip 7 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/util/ProxyException.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.util; 2 | 3 | /** 4 | * @author Administrator 5 | */ 6 | public class ProxyException extends RuntimeException 7 | { 8 | public ProxyException(String msg) 9 | { 10 | super(msg); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Easy163/app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/config/Config.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.config; 2 | 3 | public class Config 4 | { 5 | //io日志 6 | public static boolean logRW = false; 7 | //ack日志 8 | public static boolean logAck = false; 9 | //配置dns 10 | public static String dns = "114.114.114.114"; 11 | } 12 | 13 | -------------------------------------------------------------------------------- /Easy163/app/src/main/res/drawable/side_nav_bar.xml: -------------------------------------------------------------------------------- 1 | 3 | 9 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/hooks/BaseHook.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.hooks; 2 | 3 | import org.ndroi.easy163.vpn.hookhttp.Hook; 4 | import org.ndroi.easy163.vpn.hookhttp.Request; 5 | 6 | public abstract class BaseHook extends Hook 7 | { 8 | @Override 9 | public void hookRequest(Request request) 10 | { 11 | request.getHeaderFields().remove("X-NAPM-RETRY"); 12 | } 13 | } -------------------------------------------------------------------------------- /Easy163/app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 8dp 6 | 176dp 7 | 16dp 8 | -------------------------------------------------------------------------------- /Easy163/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Easy163 3 | Open navigation drawer 4 | Close navigation drawer 5 | easy163 6 | github.com/ndroi 7 | Navigation header 8 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/util/ByteBufferPool.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.util; 2 | 3 | import java.nio.ByteBuffer; 4 | 5 | public class ByteBufferPool 6 | { 7 | public static final int BUFFER_SIZE = 16384; // XXX: Is this ideal? 8 | 9 | public static ByteBuffer acquire() 10 | { 11 | //return ByteBuffer.allocate(BUFFER_SIZE); 12 | return ByteBuffer.allocateDirect(BUFFER_SIZE); 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /Easy163/.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/hookhttp/Hook.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.hookhttp; 2 | 3 | abstract public class Hook 4 | { 5 | public abstract boolean rule(Request request); 6 | 7 | public void hookRequest(Request request) 8 | { 9 | 10 | } 11 | 12 | public void hookResponse(Response response) 13 | { 14 | 15 | } 16 | 17 | protected String getPath(Request request) 18 | { 19 | String path = request.getUri(); 20 | int p = path.indexOf("?"); 21 | if (p != -1) 22 | { 23 | path = path.substring(0, p); 24 | } 25 | return path; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Easy163/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:4.0.1' 11 | 12 | 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | google() 21 | jcenter() 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } 28 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/vpn/block/BlockHttps.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.vpn.block; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | /* not used yet 7 | * TODO: HTTP-DNS 8 | * */ 9 | public class BlockHttps 10 | { 11 | private static BlockHttps instance = new BlockHttps(); 12 | 13 | public static BlockHttps getInstance() 14 | { 15 | return instance; 16 | } 17 | 18 | private Set hosts = new HashSet<>(); 19 | 20 | public void addHost(String host) 21 | { 22 | hosts.add(host); 23 | } 24 | 25 | public boolean check(String ip) 26 | { 27 | return false; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Easy163/app/src/main/java/org/ndroi/easy163/utils/Song.java: -------------------------------------------------------------------------------- 1 | package org.ndroi.easy163.utils; 2 | 3 | /** 4 | * Created by andro on 2020/5/5. 5 | */ 6 | /* Song::url is enough for playing normally in PC, 7 | * but Android client play need a correct size. 8 | * for Android client download, md5 is must. 9 | * */ 10 | public class Song 11 | { 12 | public String url = "unknown"; 13 | public int size = 10 * 1000 * 1000; 14 | public int br = 192000; 15 | public String md5 = "unknown"; 16 | 17 | @Override 18 | public String toString() 19 | { 20 | String info = "url: " + url + "\nsize: " + size + "\nbr: " + br + "\nmd5: " + md5 + "\n"; 21 | return info; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Easy163/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | 20 | -------------------------------------------------------------------------------- /Easy163/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 |