This commit is contained in:
Namhyeon Go 2020-10-19 17:11:56 +09:00
parent 8dd76199d8
commit 396bef9abf
5 changed files with 246 additions and 0 deletions

16
config.template.json Normal file
View File

@ -0,0 +1,16 @@
{
"server": "",
"name_server": "https://1.1.1.1/dns-query",
"windivert_filter_string": "outbound and (ip ? ip.DstAddr != 1.2.3.4 and ip.DstAddr != 1.1.1.1 : true)",
"ip_cidr_rules": {
"proxy": []
},
"app_rules": {
"proxy": []
},
"domain_rules": {
"proxy": [],
"direct": [],
"blocked": []
}
}

View File

38
lib/ldplayer.js Normal file
View File

@ -0,0 +1,38 @@
////////////////////////////////////////////////////////////////////////
// LDPlayer API
///////////////////////////////////////////////////////////////////////
var SHELL = require("lib/shell");
var SYS = require("lib/system");
exports.VERSIONINFO = "LDPlayer (ldplayer.js) version 0.1";
exports.global = global;
exports.require = global.require;
exports.getList = function() {
var data = [];
var cmd = [
SYS.getEnvString("SYSTEMDRIVE") + "/LDPlayer/LDPlayer3.0/ldconsole.exe",
"list2"
];
var result = SHELL.exec(cmd);
var lines = result.split(/\r?\n/);
for(var i = 0; i < lines.length; i++) {
var row = lines[i].split(',');
if(row.length == 7) {
data.push({
index: row[0],
title: row[1],
topWindowHandle: row[2],
binddWindowHandle: row[3],
androidStarted: row[4],
PID: row[5],
PIDVBox: row[6]
});
}
}
return data;
};

71
lib/noxplayer.js Normal file
View File

@ -0,0 +1,71 @@
////////////////////////////////////////////////////////////////////////
// LDPlayer API
///////////////////////////////////////////////////////////////////////
var SHELL = require("lib/shell");
var SYS = require("lib/system");
exports.VERSIONINFO = "NoxPlayer (noxplayer.js) version 0.1";
exports.global = global;
exports.require = global.require;
exports.binPath = SYS.getEnvString("PROGRAMFILES(X86)") + "/Nox/bin/nox_adb.exe";
exports.getDevices = function() {
var data = [];
var cmd = [
exports.binPath,
"devices"
]
var result = SHELL.exec(cmd);
var lines = result.split(/\r?\n/);
for(var i = 0; i < lines.length; i++) {
var row = lines[i].split(/\s+/);
if(row.length == 2) {
data.push({
host: row[0],
type: row[1]
});
}
}
return data;
};
exports.getHostname = function(host) {
return SHELL.exec([
exports.binPath,
"-s",
host,
"shell",
"getprop",
"net.hostname"
]).trim();
};
exports.getPID = function(host) {
var row = host.split(':');
var addr = row[0];
var port = row[1];
var cmd = "netstat -ano | findstr :" + port + " | findstr :0";
var result = SHELL.exec(cmd);
return result.substring(result.lastIndexOf(' '));
};
exports.getList = function() {
var data = [];
var devices = exports.getDevices();
for(var i = 0; i < devices.length; i++) {
var hostname = exports.getHostname(devices[i].host);
var pid = exports.getPID(devices[i].host);
data.push({
hostname: hostname,
PID: pid
});
}
return data;
};

121
shadowloader.js Normal file
View File

@ -0,0 +1,121 @@
////////////////////////////////////////////////////////////////////////
// SSloader
////////////////////////////////////////////////////////////////////////
var SS = require("lib/shadowsocks");
var SYS = require("lib/system");
var FILE = require("lib/file");
var SHELL = require("lib/shell");
var LDPlayer = require("lib/ldplayer");
var NoxPlayer = require("lib/noxplayer");
var JSON = require("lib/json");
var PIDList = [];
var NumSessions = 0;
var _NumSessions = 0;
var NumBridges = 0;
var _NumBridges = 0;
exports.main = function() {
console.info("Waiting new launched");
sleep(10000);
while(true) {
sleep(10000);
////////////////////////////////////////////////////////////////
// LDPlayer
////////////////////////////////////////////////////////////////
var LDPList = LDPlayer.getList();
for(var i = 0; i < LDPList.length; i++) {
var pid = parseInt(LDPList[i].PIDVBox);
var title = LDPList[i].title;
if(pid > 0 && PIDList.indexOf(pid) == -1) {
console.info("New launched LDPlayer: " + title);
PIDList.push(pid);
var listenPort;
if(!(title in __config.StaticIP.LDPlayer)) {
console.error("Not assigned static IP: " + title);
continue;
} else {
listenPort = SS.connect(__config.StaticIP.LDPlayer[title]);
}
SHELL.run([
SYS.getCurrentScriptDirectory() + "/bin/shadow.exe",
"-c",
SYS.getCurrentScriptDirectory() + "/config.template.json",
"-s",
"socks://localhost:" + listenPort,
"-p",
pid
]);
NumSessions = SS.getCountOfSessions();
NumBridges = SS.getCountOfBridges();
if(!(NumSessions > _NumSessions && NumBridges > _NumBridges)) {
console.error("Retrying...");
PIDList.pop();
}
_NumSessions = NumSessions;
_NumBridges = NumBridges;
console.info("Waiting new launched");
sleep(10000);
}
}
////////////////////////////////////////////////////////////////
// NoxPlayer
////////////////////////////////////////////////////////////////
var NoxPList = NoxPlayer.getList();
for(var i = 0; i < NoxPList.length; i++) {
var pid = parseInt(NoxPList[i].PID);
var hostname = NoxPList[i].hostname;
if(pid > 0 && PIDList.indexOf(pid) == -1) {
console.info("New launched NoxPlayer: " + hostname);
PIDList.push(pid);
var listenPort;
if(!(hostname in __config.StaticIP.NoxPlayer)) {
console.error("Not assigned static IP: " + hostname);
continue;
} else {
listenPort = SS.connect(__config.StaticIP.NoxPlayer[hostname]);
}
SHELL.run([
SYS.getCurrentScriptDirectory() + "/bin/shadow.exe",
"-c",
SYS.getCurrentScriptDirectory() + "/config.template.json",
"-s",
"socks://localhost:" + listenPort,
"-p",
pid
]);
NumSessions = SS.getCountOfSessions();
NumBridges = SS.getCountOfBridges();
if(!(NumSessions > _NumSessions && NumBridges > _NumBridges)) {
console.error("Retrying...");
PIDList.pop();
}
_NumSessions = NumSessions;
_NumBridges = NumBridges;
console.info("Waiting new launched");
sleep(10000);
}
}
}
};