e9da54c2f9
Too many changes to list.
159 lines
3.5 KiB
JavaScript
159 lines
3.5 KiB
JavaScript
const fs = require('fs')
|
|
|
|
const regex_block_comments = /([\-]{2,}[\[]{2}[\s\S]*?[\]]{2})/igm
|
|
const regex_block_comments2 = /\/\*[\s\S]*?\*\//igm
|
|
const regex_tabs = /([\t]{1,})/ig
|
|
const regex_newlines = /(\n)/gm
|
|
const regex_block_str_to_normal_str = /([\[]{2}[\s\S]*?[\]]{2})/igm
|
|
|
|
const STR_OPEN = ['"', "'", '`']
|
|
const STR_CLOSE = ['"', "'", '`']
|
|
|
|
const SCOPE_IN = ['do', 'then', 'function']
|
|
const SCOPE_OUT = ['end', 'elseif']
|
|
|
|
/*function getRandomInt(min, max) {
|
|
return Math.floor(Math.random() * (max - min + 1)) + min
|
|
}
|
|
|
|
function randomWS(match, m) {
|
|
return ' '.repeat(getRandomInt(1, 10))
|
|
}*/
|
|
|
|
const regex_newline = /(\n)/g
|
|
const regex_newline2 = /(\r)/g
|
|
const regex_quote = /(")/g
|
|
function replace_block_str(match, m, offset, string) {
|
|
m = m.replace(regex_newline, '\\n')
|
|
m = m.replace(regex_newline2, '')
|
|
m = m.replace(regex_quote, '\\"')
|
|
|
|
return '"' + m.substring(2, m.length - 2) + '"'
|
|
}
|
|
|
|
function replace_locals(str) {
|
|
// TODO
|
|
|
|
/*var varName
|
|
var varId = 1
|
|
|
|
varName = 'v' + varId
|
|
varId++*/
|
|
|
|
return str
|
|
}
|
|
|
|
function decomment_line(str) {
|
|
if (str.substring(0, 2) === '--' || str.substring(0, 2) === '//')
|
|
return ' '
|
|
|
|
var si
|
|
var in_string = null
|
|
|
|
for (var i=0; i < str.length; i++) {
|
|
if (in_string !== null) {
|
|
if (str[i] === STR_CLOSE[in_string] && str[i - 1] !== '\\')
|
|
in_string = null
|
|
}
|
|
else if (str[i] === '-' && str[i + 1] === '-' || str[i] === '/' && str[i + 1] === '/') {
|
|
return str.substring(0, i) + ' '
|
|
}
|
|
else {
|
|
si = STR_OPEN.indexOf(str[i])
|
|
if (si >= 0)
|
|
in_string = si
|
|
}
|
|
}
|
|
|
|
return str
|
|
}
|
|
|
|
function obsfucate(str) {
|
|
str = str.replace(/(\r)/g, '')
|
|
|
|
str = str.replace(regex_block_comments, ' ')
|
|
str = str.replace(regex_block_comments2, ' ')
|
|
str = str.replace(regex_block_str_to_normal_str, replace_block_str)
|
|
|
|
const lines = str.split('\n')
|
|
for (var i=0; i < lines.length; i++) {
|
|
lines[i] = decomment_line(lines[i])
|
|
}
|
|
str = lines.join(' ')
|
|
|
|
str = str.replace(regex_tabs, ' ' /*randomWS*/)
|
|
str = str.replace(regex_newlines, ' ')
|
|
|
|
str = replace_locals(str)
|
|
|
|
return str
|
|
}
|
|
|
|
const regex_to_out = /(^[a-z0-9_-]*?)\//im
|
|
function toOut(file) {
|
|
return file.replace(regex_to_out, '$1_obsfucated/')
|
|
}
|
|
|
|
function obsfucateFile(file, skip) {
|
|
var str = fs.readFileSync(file, 'utf8')
|
|
|
|
if (skip)
|
|
console.log('copying ' + file)
|
|
else {
|
|
console.log('obfuscating ' + file)
|
|
str = obsfucate(str)
|
|
}
|
|
|
|
fs.writeFileSync(toOut(file), str)
|
|
}
|
|
|
|
function obfuscateDir(dir) {
|
|
var out_dir = toOut(dir)
|
|
if (!fs.existsSync(out_dir))
|
|
fs.mkdirSync(out_dir)
|
|
|
|
const readdir = fs.readdirSync(dir)
|
|
|
|
for (var i=0; i < readdir.length; i++) {
|
|
if (readdir[i].indexOf('.') >= 0) {
|
|
if (readdir[i].indexOf('.lua') >= 0)
|
|
obsfucateFile(dir + '/' + readdir[i], readdir[i] === 'init.lua' || readdir[i] === 'server.lua' || readdir[i].substr(0, 3) === 'sv_')
|
|
}
|
|
else {
|
|
out_dir = toOut(dir + '/' + readdir[i])
|
|
if (!fs.existsSync(out_dir))
|
|
fs.mkdirSync(out_dir)
|
|
|
|
obfuscateDir(dir + '/' + readdir[i])
|
|
}
|
|
}
|
|
}
|
|
|
|
function deleteFolderRecursive(path) {
|
|
if (fs.existsSync(path)) {
|
|
fs.readdirSync(path).forEach(function(file, index) {
|
|
var curPath = path + "/" + file
|
|
if (fs.lstatSync(curPath).isDirectory())
|
|
deleteFolderRecursive(curPath)
|
|
else
|
|
fs.unlinkSync(curPath)
|
|
})
|
|
|
|
fs.rmdirSync(path)
|
|
}
|
|
}
|
|
|
|
if (process.argv.length < 2)
|
|
console.log('No folders specified')
|
|
else
|
|
process.argv.forEach(function (val, index, array) {
|
|
if (index >= 2) {
|
|
const out_path = val + '_obsfucated'
|
|
|
|
deleteFolderRecursive(out_path)
|
|
|
|
fs.mkdirSync(out_path)
|
|
|
|
obfuscateDir(val)
|
|
}
|
|
})
|