前言
https://marketplace.visualstudio.com/items?itemName=kangping.luaide
请务必支持官方插件和作者(作者已经把价格写的很低了)
本项目没有任何的商业性质,纯技术分析
流程分析
1. out/src/extension.js
判lua插件冲突,引入extension1.js
全局 luaideLoad=require
2. out/src/extension1.js
var LuaIdeClient_1 = require("./LuaIdeClient");
var UserUtils_1 = require("./luatool/manager/UserUtils");
//注册侧边栏
vscode.window.registerTreeDataProvider('luaide_user', new LuaDocumentProvider_1.LuaDocumentProvider(this.json.user));
//注册方法
vscode.commands.registerCommand('luaide.delUser', (e) => {
//删除用户信息
new UserUtils_1.UserUtils().delUserInfo();
});
new LuaIdeClient_1.LuaIdeClient(context);
//验证文件md5
downLoadFile(){
var md5url = downinfo.md5url;
var downLoadUrl = downinfo.downLoadUrl;
var filePath = downinfo.filePath;
}
//清空 kangping.luaide/runtime/temp 目录
3. out/src/Common.js
let userDataDir = C:\Users\QL\AppData\Roaming\Code\User\luaide
userInfo
{"uuid":"****脱敏****","donateShowMonth":"","showIndex":1,"donateInfo":[false,false]}
luaIdeUserInfo
{"userName":"****脱敏****","pwd":"****脱敏****"}
guid
****脱敏****
4. out/srcsrc/LuaIdeClient.js
ConstInfo_2.ConstInfo.socket1 = net.createConnection(9621, "49.234.141.149");
//去掉"_end_",aes解密
var key = '751f621ea5c8f930';
var iv = 'ad247500f45f8718';
var crypto = require('crypto');
script = new Buffer(script, 'base64').toString('binary');
var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
var decoded = decipher.update(script, 'binary', 'utf8');
decoded += decipher.final('utf8');
//运行
new Function(decoded)()
5. 解密后的1.js
ConstInfo_1 = luaideLoad("./ConstInfo");
socket935 = ConstInfo_1.ConstInfo.socket1
context828 = context
checkTokenHandle666 = null
vscode = luaideLoad("vscode");
userInfoManager = null
const util_1 = luaideLoad("util");
function createGUID() {
function md5Info(str) {
const crypto = require('crypto');
const hash = crypto.createHash('md5');
hash.update(str);
var packagemd5 = hash.digest('hex');
return packagemd5;
}
const node_machine_id_2 = luaideLoad("./luatool/ex/ApiUtils");
var id = node_machine_id_2.machineIdSync(true);
var id2 = node_machine_id_2.machineIdSync();
var userDataDir = null;
var os = require("os");
var path = require("path");
var fs = require("fs");
switch (process.platform) {
case 'linux':
userDataDir = path.join(os.homedir(), '.config');
break;
case 'darwin':
userDataDir = path.join(os.homedir(), 'Library', 'Application Support');
break;
case 'win32':
userDataDir = process.env.APPDATA;
break;
default:
throw Error("Unrecognizable operative system");
}
userDataDir = path.join(userDataDir, 'code', 'user', "luaide");
if (!fs.existsSync(userDataDir)) {
fs.mkdirSync(userDataDir);
}
var userInfoPath = path.join(userDataDir, "guid");
if (!fs.existsSync(userDataDir)) {
fs.mkdirSync(userDataDir);
}
if (!fs.existsSync(userInfoPath)) {
fs.writeFileSync(userInfoPath, md5Info(md5Info(id)));
}
var cachedDataDir = process.env["VSCODE_NODE_CACHED_DATA_DIR"];
var cachedDataDir1 = path.join(path.dirname(cachedDataDir), md5Info(id2));
if (!fs.existsSync(cachedDataDir1)) {
fs.mkdirSync(cachedDataDir1);
}
var infoPath = path.join(cachedDataDir1, id2);
if (!fs.existsSync(infoPath)) {
fs.writeFileSync(infoPath, id2);
}
var cachedDataDir2 = path.join(path.dirname(cachedDataDir), md5Info(id));
if (!fs.existsSync(cachedDataDir2)) {
fs.mkdirSync(cachedDataDir2);
}
infoPath = path.join(cachedDataDir2, md5Info(id));
if (!fs.existsSync(infoPath)) {
fs.writeFileSync(infoPath, md5Info(id));
}
}
try {
createGUID()
createGUID = null
} catch (error) {
createGUID = null
}
socketMsg = "";
var splitStr = "end"
kickOffLine = function(msg) {
socket935.removeAllListeners("data");
socket935.removeAllListeners("close");
socket935.removeAllListeners("error");
socket935.removeAllListeners("timeout");
socket935.destroy()
LuaParse_1 = luaideLoad("./luatool/LuaParse");
if (!util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp)) {
if (!util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp.luaInfoManager)) {
LuaParse_1.LuaParse.lp.luaInfoManager.fileCompletionItemManagers.clear()
}
LuaParse_1.LuaParse.lp.end = function() {}
}
userInfoManager = null;
if (!util_1.isNullOrUndefined(checkTokenHandle666)) {
clearInterval(checkTokenHandle666)
checkTokenHandle666 = null
}
vscode.window.showErrorMessage(msg, {
title: "重新启动",
isCloseAffordance: true,
id: 1
}).then(v => {
vscode.commands.executeCommand('workbench.action.reloadWindow');
});
}
ExInit_1 = luaideLoad("./luatool/ex/ExInit");
function md5File(path) {
var fs = luaideLoad("fs");
var crypto = luaideLoad('crypto');
var contentText = fs.readFileSync(path, 'utf-8');
var hash = crypto.createHash('md5');
hash.update(contentText);
var packagemd5 = hash.digest('hex');
return packagemd5;
}
var os = luaideLoad('os')
var data = {};
data.osType = os.type();
data.hostName = os.hostname();
data.platform = os.platform();
var cups = os.cpus();
var cupinfos = new Array();
var length = cups.length;
for (var index = 0; index < cups.length; index++) {
cupinfos.push(cups[index].model);
}
data.cupinfos = cupinfos;
var networkInfos = new Array();
var networkInfo = os.networkInterfaces();
var interfaces = networkInfo;
for (var devName in networkInfo) {
var macInfos = new Array();
for (var i = 0; i < interfaces[devName].length; i++) {
var face = interfaces[devName][i];
macInfos.push({
address: face.address,
mac: face.mac
});
}
networkInfos.push({
devName: devName,
macInfos: macInfos
});
}
data.networkInfos = networkInfos;
var path = luaideLoad("path");
var packagePath = path.join(context.extensionPath, "package.json");
var extensionPath = path.join(context.extensionPath, "out", "src", "extension.js");
var clientPath = path.join(context.extensionPath, "out", "src", "LuaIdeClient.js");
var packageMd5 = md5File(packagePath);
var extensionMd5 = md5File(extensionPath);
var clientMd5 = md5File(clientPath);
data.versionCode = ConstInfo_1.ConstInfo.version
data.md5Infos = [packageMd5, extensionMd5, clientMd5, packageMd5, extensionMd5, packageMd5]
var node_machine_id_2 = luaideLoad("./luatool/ex/ApiUtils");
var id = node_machine_id_2.machineIdSync();
data.guid = id
var jsonStr = JSON.stringify(data);
jsonStr = jsonStr.replace(new RegExp(" ", "gm"), "");
socket935.removeAllListeners("data");
socket935.removeAllListeners("close");
socket935.removeAllListeners("error");
socket935.removeAllListeners("timeout");
scriptStr = "";
socket935.on("close", function(had_error) {
if (!util_1.isNullOrUndefined(checkTokenHandle666)) {
clearInterval(checkTokenHandle666)
checkTokenHandle666 = null
}
LuaParse_1 = luaideLoad("./luatool/LuaParse");
if (!util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp)) {
if (util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp.luaInfoManager)) {
LuaParse_1.LuaParse.lp.luaInfoManager.fileCompletionItemManagers.clear()
}
LuaParse_1.LuaParse.lp.end = function() {}
}
vscode.window.showErrorMessage("连接断开,请重新启动luaIde!", {
title: "重新启动",
isCloseAffordance: true,
id: 1
}).then(v => {
vscode.commands.executeCommand('workbench.action.reloadWindow');
});
});
socket935.on("error", function(had_error) {
if (!util_1.isNullOrUndefined(checkTokenHandle666)) {
clearInterval(checkTokenHandle666)
checkTokenHandle666 = null
}
LuaParse_1 = luaideLoad("./luatool/LuaParse");
if (!util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp)) {
if (util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp.luaInfoManager)) {
LuaParse_1.LuaParse.lp.luaInfoManager.fileCompletionItemManagers.clear()
}
LuaParse_1.LuaParse.lp.end = function() {}
}
vscode.window.showErrorMessage("连接断开,请重新启动luaIde!", {
title: "重新启动",
isCloseAffordance: true,
id: 1
}).then(v => {
vscode.commands.executeCommand('workbench.action.reloadWindow');
});
});
socket935.on("data", function(buff) {
scriptStr += buff.toString("utf-8");
while (true) {
if (scriptStr.length > 0) {
var sindex = scriptStr.indexOf("_" + splitStr + "_");
if (sindex > -1) {
var script = scriptStr.substring(0, sindex)
var key = '751f621ea5c8f930';
var iv = 'ad247500f45f8718';
function runScript(script) {
var crypto = require('crypto');
script = new Buffer(script, 'base64').toString('binary');
var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
var decoded = decipher.update(script, 'binary', 'utf8');
decoded += decipher.final('utf8');
var fun = new Function("require", "socket", "context", decoded);
try {
fun(require, socket935, context);
} catch (error) {
console.error(error)
}
}
runScript(script)
if (scriptStr.length > sindex + 5) {
scriptStr = scriptStr.substr(sindex + 5);
} else {
return;
}
} else {
return;
}
} else {
return;
}
}
});
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(jsonStr, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("1b6e727d-03a5-4625-9e38-7343b2dd9d18 " + crypted + "\r\n");
data数据
{
"osType": "Windows_NT",
"hostName": "QL",
"platform": "win32",
"cupinfos": [
"****脱敏****"
],
"networkInfos": [
{
"devName": "以太网",
"macInfos": [
{
"address": "****脱敏****",
"mac": "****脱敏****"
}
]
}
],
"versionCode": "1.0.9",
"md5Infos": [
"6ebee864dbb423592881eb8082853487",
"72d04831c9de377565b7b74d08ba598c",
"2c2935f5641123a0a582ed2e3d5b1bdd",
"6ebee864dbb423592881eb8082853487",
"72d04831c9de377565b7b74d08ba598c",
"6ebee864dbb423592881eb8082853487"
],
"guid": "****脱敏****"
}
6. 解密后的2.js
const UserInfoManager_1 = luaideLoad("./luatool/UserInfoManager");
userInfoManager = new UserInfoManager_1.UserInfoManager();
checkTokenHandle = null
userInfoManager.loginUser = function() {
var jsonStr = JSON.stringify(userInfoManager.userInfo);
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(jsonStr, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("userLoginEvent18 " + crypted + "\r\n")
}
userInfoManager.registerUser = function() {
var crypto = luaideLoad('crypto');
var hash = crypto.createHash('md5');
hash.update(this.pwd1);
var value = hash.digest('hex')
var data = {
userName: this.userName,
pwd: value,
}
var node_machine_id_2 = luaideLoad("./luatool/ex/ApiUtils");
var id = node_machine_id_2.machineIdSync();
data.guid = id
var jsonStr = JSON.stringify(data);
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(jsonStr, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("registerEvent124 " + crypted + "\r\n")
}
userInfoManager.sendForgetPwdUserName = function(userName) {
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(userName, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("forgetPwdUserNameEvent658 " + crypted + "\r\n")
}
userInfoManager.sendForgetPwdCode = function(code) {
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(code, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("forgetPwdCodeEvent621 " + crypted + "\r\n")
}
userInfoManager.sendForgetPwd = function(pwd) {
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(pwd, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("forgetPwdEvent646 " + crypted + "\r\n")
}
userInfoManager.sendRePwd = function(data) {
var jsonStr = JSON.stringify(data);
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(jsonStr, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write("rePwdEvent382 " + crypted + "\r\n")
}
userInfoManager.changeSuccess = function() {
}
userInfoManager.checkUserTimeTips = function() {
vscode.window.showInputBox({
value: "请购买luaide后继续使用!如不需要使用luaide功能可禁用luaide插件!重启vscode可购买!,"
}).then(parameter => {
// userInfoManager.checkUserTimeTips();
});
}
userInfoManager.checkUserTime = function() {
this.clearTime()
if (this.timer == null) {
var self = this;
this.timer = setTimeout(function() {
self.checkUserTimeTips();
}, 1000 * 60 * 3);
}
}
userInfoManager.clearTime = function() {
if (this.timer != null) {
clearTimeout(this.timer)
this.timer = null
}
}
userInfoManager.checkUserInfo = function(type_) {
if (this.userInfo == null) {
socket935.write("notUserEvent841 \r\n")
this.startRegisterUser(type_, "请注册账号,注册后可试用7天.");
} else {
this.loginUser();
}
}
userInfoManager.checkUserInfo(1)
userInfoManager.checkUserTime()
out/src/luatool/UserInfoManager.js
function readUserInfo() {
var userPath = Common_1.getConfigDir();
var userInfoPath = path.join(userPath, "luaIdeUserInfo");
if (fs.existsSync(userInfoPath)) {
try {
var contentText = fs.readFileSync(path.join(userInfoPath), 'utf-8');
this.userInfo = JSON.parse(contentText);
if (this.userInfo.guid == null) {
const node_machine_id_2 = require("./../luavm/nodeMachine");
var id = node_machine_id_2.machineIdSync();
this.userInfo.guid = id;
}
}
catch (error) {
this.userInfo = null;
console.log(error.trace);
}
}
else {
this.userInfo = null;
}
}
数据data
{"userName":"****脱敏****","pwd":"****脱敏****","guid":"****脱敏****"}
7. 解密后的3.js
const ExtensionManager_1 = luaideLoad("./luatool/ex/ExtensionManager")
const TokenInfo_1 = luaideLoad("./luatool/TokenInfo");
const LuaFileCompletionItems_1 = luaideLoad("./luatool/manager/LuaFileCompletionItems");
const vscode = luaideLoad("vscode");
var userdata = {
userName: "****脱敏****",
pwd: "****脱敏****"
}
userInfoManager.userInfo = userdata
userInfoManager.writeUserInfo()
var em = new ExtensionManager_1.ExtensionManager();
LuaParseEndFun687 = function() {
var tokens = new Array();
while (true) {
var token = this.lpt.lex();
if (token.error != null) {
this.setError(token, token.error.msg);
return;
}
if (token.type == TokenInfo_1.TokenTypes.EOF) {
break;
}
token.index = tokens.length;
tokens.push(token);
}
this.tokens = tokens;
this.luaInfoManager.init(this, this.currentUri, this.tempUri);
this.tokenIndex = 0;
this.tokensLength = tokens.length;
var isReturn = false;
// try {
if (this.checkSemicolons(true))
this.tokenIndex++;
isReturn = this.setLuaInfo(this.rootLuaInfo, null, null);
// } catch (error) {
// console.log(error)
// }
var returnValueToken = null;
if (isReturn) {
// console.log("isReturn:"+isReturn)
if (this.tokenIndex < this.tokensLength) {
this.setError(this.getLastToken(), "return 的多余字符");
}
}
if (this.isError == false) {
for (var i = 0; i < this.errorFilePaths.length; i++) {
if (this.tempUri.path == this.errorFilePaths[i].path) {
this.errorFilePaths.splice(i, 1);
break;
}
}
//正确了删除错误提示
if (this.diagnosticCollection && this.diagnosticCollection.has(this.tempUri)) {
this.diagnosticCollection.delete(this.tempUri);
}
var fcim = this.luaInfoManager.currentFcim;
fcim.currentFunctionNames = null;
if (this.isSaveCompletion || (this.isSaveCompletion == false && this.isError == false)) {
var oldFcim = this.luaInfoManager.getFcimByPathStr(this.tempUri.path);
// if(oldFcim != null){
// LuaGolbalCompletionManager.clearGolbalCompletion(oldFcim.luaGolbalCompletionInfo)
// LuaGolbalCompletionManager.clearGolbalCompletion(oldFcim.luaFunCompletionInfo)
// }
if (isReturn) {
if (this.tokensLength - 2 >= 0) {
var endIndex = this.tokensLength - 1;
while (endIndex > 0) {
if (this.consume(';', tokens[endIndex], TokenInfo_1.TokenTypes.Punctuator)) {
endIndex--;
} else {
break;
}
}
var returnToken = tokens[endIndex - 1];
if (this.consume('return', returnToken, TokenInfo_1.TokenTypes.Keyword)) {
if (tokens[endIndex].type == TokenInfo_1.TokenTypes.Identifier) {
returnValueToken = tokens[endIndex];
fcim.setRootCompletionInfo(returnValueToken.value);
}
}
}
}
this.luaInfoManager.fileCompletionItemManagers.set(this.tempUri.path, fcim);
LuaFileCompletionItems_1.LuaFileCompletionItems.getLuaFileCompletionItems().checkCompletion(fcim, this
.isApi);
// LuaGolbalCompletionManager.setGolbalCompletion(fcim.luaGolbalCompletionInfo)
// LuaGolbalCompletionManager.setGolbalCompletion(fcim.luaFunCompletionInfo)
this.luaInfoManager.currentFcim = null;
fcim.tokens = null;
this.tokenInfoCache.gc(this.tokens);
this.tokens = null;
this.tokenInfoCache.gcLuaInfo();
this.tokenInfoCache.gcLuaComment();
this.tokenInfoCache.gcLuaRange();
this.tokenInfoCache.clearLuaFiledCompletionInfo();
}
this.luaInfoManager.fileCompletionItemManagers.delete(this.currentUri.path);
} else {
var fcim = this.luaInfoManager.fileCompletionItemManagers.get(this.currentUri.path);
fcim.clear();
}
}
ConstInfo_1 = luaideLoad("./ConstInfo");
userBarItem = ConstInfo_1.ConstInfo.userBarItem
socket935.write("CodeInitEvent867 \r\n")
8.解密后的4.js
const ChangeCaseExtension_1 = luaideLoad("./luatool/ex/ChangeCaseExtension");
const cmf = luaideLoad("./luatool/ex/CreateMoudleFunction");
const CreateFunction = luaideLoad("./luatool/ex/CreateFunction");
const CreateTemplateFile_1 = luaideLoad("./luatool/ex/Template/CreateTemplateFile");
const util_1 = luaideLoad("util");
const vscode = luaideLoad("vscode");
const net = luaideLoad("net");
var splitStr = "end"
const LuaCompletionItemProvider_1 = luaideLoad("./luatool/provider/completion/LuaCompletionItemProvider");
const LuaDefinitionProvider_1 = luaideLoad("./luatool/provider/definition/LuaDefinitionProvider");
const LuaDocumentSymbolProvider_1 = luaideLoad("./luatool/provider/documentSymbol/LuaDocumentSymbolProvider");
const LuaMode_1 = luaideLoad("./luatool/provider/LuaMode");
const LuaSignatureHelpProvider_1 = luaideLoad("./luatool/provider/signatureHelp/LuaSignatureHelpProvider");
const LuaFormattingEditProvider_1 = luaideLoad("./luatool/provider/format/LuaFormattingEditProvider");
const LuaParse_1 = luaideLoad("./luatool/LuaParse");
function removeAllListeners(socket) {
socket.removeAllListeners("data");
socket.removeAllListeners("close");
socket.removeAllListeners("error");
socket.removeAllListeners("timeout");
socket.destroy()
}
reCount592 = 0;
isCloseConn = false
sessionIdEvent527 = "1b6e727d-03a5-4625-9e38-7343b2dd9d18"
function checkReCount()
{
removeAllListeners(socket935)
if(!util_1.isNullOrUndefined(checkTokenHandle666)){
clearInterval(checkTokenHandle666)
checkTokenHandle666 = null
}
if(isCloseConn){
return;
}
if(reCount592 == 0){
reConnServer();
}
else if(reCount592 < 5){
setTimeout(function(){
reConnServer();
},5000)
}else{
// if(!util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp) ){
// if(util_1.isNullOrUndefined(LuaParse_1.LuaParse.lp.luaInfoManager )) {
// LuaParse_1.LuaParse.lp.luaInfoManager.fileCompletionItemManagers.clear()
// }
// LuaParse_1.LuaParse.lp.end = function() {}
// }
luaideProvider.luaCompletionItemProvider.provideCompletionItems = function(){}
luaideProvider.luaDefinitionProvider.provideDefinition = function(){}
ConstInfo_1.ConstInfo.isParse = false;
ConstInfo_1.ConstInfo.barItem.text = "提示:luaide网络断了,请点击进行重新连接"
vscode.window.showErrorMessage("重连失败,luaIde提示功能被取消,重新连接后恢复提示,您也可以点击vscode右下角的重连提示!", {
title: "重新连接",
isCloseAffordance: true,
id: 1
}).then(v => {
if(v!=null){
reCount592 = 0
reConnServer();
}
});
// console.log(7)
}
}
ConstInfo_1.ConstInfo.luaDebugFileMd5 = "fe904f03f65bc2fa86dd0bb11275ca4f"
ConstInfo_1.ConstInfo.luaDebugJitFileMd5 = "148e004a14796572da1e2fb8559763d3"
ConstInfo_1.ConstInfo.isAutoDown = "1";
ConstInfo_1.ConstInfo.barItem.command = "luaide.reConn";
function reConnServer()
{
reCount592 = reCount592+1
ConstInfo_1.ConstInfo.barItem.text = "luaIde:尝试重连服务器第"+ reCount592 + "次.";
// socket935 = net.createConnection(9096, "49.234.141.149");
socket935 = net.createConnection(9622,"49.234.141.149")
socket935.setTimeout(5000);
socket935.on('timeout', function () {
checkReCount();
});
socket935.on("connect",function(){
// console.log("sessionIdEvent527:"+sessionIdEvent527)
socket935.setTimeout(300000);
var node_machine_id_2 = luaideLoad("./luatool/ex/ApiUtils");
var id = node_machine_id_2.machineIdSync();
userInfoManager.userInfo.guid = id
var jsonStr = JSON.stringify(userInfoManager.userInfo);
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update(jsonStr, 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
socket935.write(sessionIdEvent527 +" "+crypted+"\r\n")
})
socket935.on("close", function (had_error) {
checkReCount();
});
socket935.on("error", function (error) {
checkReCount();
});
var scriptStr = "";
socket935.on("data", function (buff) {
scriptStr += buff.toString("utf-8");
while (true) {
if (scriptStr.length > 0) {
var sindex = scriptStr.indexOf("_"+splitStr+"_");
if (sindex > -1) {
var script = scriptStr.substring(0, sindex);
var key = '751f621ea5c8f930';
var iv = 'ad247500f45f8718';
function runScript(script){
var crypto = require('crypto');
script = new Buffer(script, 'base64').toString('binary');
var decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
var decoded = decipher.update(script, 'binary', 'utf8');
decoded += decipher.final('utf8');
var fun = new Function("require", "socket", "context", decoded);
try {
fun(require, socket935, context);
} catch (error) {
console.error(error)
}
}
runScript(script)
if (scriptStr.length > sindex + 5) {
scriptStr = scriptStr.substr(sindex + 5);
}
else {
return;
}
}
else {
return;
}
}
else {
return;
}
}
});
}
function RunCommand(commands, cmd, e) {
for (var i = 0; i < commands.length; i++) {
if (commands[i].label == cmd) {
try{
commands[i].func(e);
} catch (err) {
this.errorMsg = err.message;
vscode.window.showErrorMessage(err.message);
}
break;
}
}
}
socket935.removeAllListeners("close");
socket935.removeAllListeners("error");
;
socket935.on("timeout", function () {
checkReCount();
});
socket935.on("error", function (error) {
checkReCount();
});
socket935.on("close", function (had_error) {
//进行断线重连
checkReCount();
});
onlineEvent = "onLine100"
checkTokenHandle666 = setInterval(function(){
var crypto = require('crypto');
var cipher = crypto.createCipheriv('aes-128-cbc', "721f6s1ea5c8f9d0", "ad247s00f45d8718");
var crypted = cipher.update("onLineStr917", 'utf8', 'binary');
crypted += cipher.final('binary');
crypted = new Buffer(crypted, 'binary').toString('base64');
try {
socket935.write(onlineEvent+" "+crypted+"\r\n");
} catch (error) {
if(!util_1.isNullOrUndefined(checkTokenHandle666)){
clearInterval(checkTokenHandle666)
checkTokenHandle666= null
}
}
},300000)
socket935.setTimeout(600000);
var COMMAND_LABELS = {
toUpperCase: 'toUpperCase',
toLowerCase: 'toLowerCase',
createModuleFunction: 'createModuleFunction',
CreateFunction: "CreateFunction",
createTemplateFile: "createTemplateFile",
LoadLuaScript: "LoadLuaScript",
chatShow: "chatShow",
donate: "donate",
helper:"helper",
resetPwd:"resetPwd",
delUser:"delUser"
};
new LuaParse_1.LuaParse();
var COMMAND_DEFINITIONS = [
{ label: COMMAND_LABELS.toUpperCase, description: '转换为大写', func: ChangeCaseExtension_1.toUpperCase },
{ label: COMMAND_LABELS.toLowerCase, description: '转换为小写', func: ChangeCaseExtension_1.toLowerCase },
{ label: COMMAND_LABELS.createModuleFunction, description: '创建模块方法', func: cmf.createModuleFunction },
{ label: COMMAND_LABELS.CreateFunction, description: '创建方法', func: CreateFunction.createFunction },
{ label: COMMAND_LABELS.createTemplateFile, description: '创建模板文件', func: CreateTemplateFile_1.CreateTemplateFile.run },
];
vscode.commands.registerCommand('luaide.changecase.toLowerCase', (e) => { RunCommand(COMMAND_DEFINITIONS, COMMAND_LABELS.toLowerCase, e); });
vscode.commands.registerCommand('luaide.changecase.toUpperCase', (e) => { RunCommand(COMMAND_DEFINITIONS, COMMAND_LABELS.toUpperCase, e); });
vscode.commands.registerCommand('luaide.utils.createModuleFunction', (e) => { RunCommand(COMMAND_DEFINITIONS, COMMAND_LABELS.createModuleFunction, e); });
vscode.commands.registerCommand('luaide.utils.createFunction1', (e) => { RunCommand(COMMAND_DEFINITIONS, COMMAND_LABELS.CreateFunction, e); });
vscode.commands.registerCommand('luaide.utils.createTemplateFile', (e) => { RunCommand(COMMAND_DEFINITIONS, COMMAND_LABELS.createTemplateFile, e); });
vscode.commands.registerCommand('luaide.reConn', (e) => {
if(isCloseConn) {
vscode.commands.executeCommand('workbench.action.reloadWindow');
return
}
if(reCount592 >= 5){
reCount592 = 0
reConnServer();
}
});
LuaParse_1.LuaParse.lp.end = LuaParseEndFun687
var luaCompletionItemProvider = new LuaCompletionItemProvider_1.LuaCompletionItemProvider();
var luaSignatureHelpProvider = new LuaSignatureHelpProvider_1.LuaSignatureHelpProvider();
var luaFormattingEditProvider = new LuaFormattingEditProvider_1.LuaFormattingEditProvider();
var rangeluaFormattingEditProvider = new LuaFormattingEditProvider_1.LuaFormattingEditProvider();
var luaDefinitionProvider = new LuaDefinitionProvider_1.LuaDefinitionProvider()
var luaDocumentSymbolProvider = new LuaDocumentSymbolProvider_1.LuaDocumentSymbolProvider()
luaideProvider = {
luaCompletionItemProvider : luaCompletionItemProvider,
luaDefinitionProvider : luaDefinitionProvider
}
luaFunCache = {
provideCompletionItems : luaideProvider.luaCompletionItemProvider.provideCompletionItems,
luaDefinitionProvider : luaideProvider.luaDefinitionProvider.provideDefinition
}
ExInit_1.initLuaIdeEx(context828,function(){
context.subscriptions.push(vscode.languages.registerCompletionItemProvider(LuaMode_1.LUA_MODE, luaCompletionItemProvider,
'.', ":", '"', "'", "[", "@","|","=","/"," "));
context.subscriptions.push(vscode.languages.registerDefinitionProvider(LuaMode_1.LUA_MODE, luaDefinitionProvider));
context.subscriptions.push(vscode.languages.registerDocumentSymbolProvider(LuaMode_1.LUA_MODE, luaDocumentSymbolProvider));
context.subscriptions.push(vscode.languages.registerSignatureHelpProvider(LuaMode_1.LUA_MODE, luaSignatureHelpProvider, '(', ','));
context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider(LuaMode_1.LUA_MODE, luaFormattingEditProvider));
context.subscriptions.push(vscode.languages.registerDocumentRangeFormattingEditProvider(LuaMode_1.LUA_MODE, rangeluaFormattingEditProvider));
});
userInfoManager.clearTime();