lua代码暴力混淆--shell脚本
#! /usr/local/bin/bash
####################################### skip define ##########################################
skipFolderArr=("src/cocos" "src/packages")
skipFileArr=("src/main.lua" "src/gm.lua" "src/config.lua" "src/app/MyApp.lua" "src/app/Utils.lua" "src/app/dataModel/name.lua" "src/app/views/Huodong/TwoTip.lua" "src/app/views/activity/Activity01.lua" "src/app/views/activity/Activity02.lua" "src/app/views/activity/Activity03.lua")
####################################### skip define ##########################################
# define rootPath
rootPath=$1
rootPathLength=${#rootPath}
newProffix="new/"
newProffixLength=${#newProffix}
newRootPath=${newProffix}${rootPath}
newRootPathLength=${#newRootPath}
folderReflactFile="folder-reflact.txt"
fileReflactFile="file-reflact.txt"
####################################### some handler ##########################################
# clear old files
#rm -rf src
rm -rf ${newRootPath} ${folderReflactFile} ${fileReflactFile}
mkdir -p ${newRootPath}
#tar -zxvf src.tar.gz
####################################### some handler ##########################################
# mv map
# origin file path name -> target file path name
declare -A fileNameMap
declare -A filePathNameMap
####################################### utils function ##########################################
# upper string's first letter
function first_letter_upper(){
temp=`echo ${1:0:1} | tr '[a-z]' '[A-Z]'`${1:1}
echo $temp
}
# random switch 0 orn 1
function random_switch(){
temp=$(($RANDOM%2))[图片]
echo $temp
}
# random string with length
name_string_arr=(a b c d e f g h i j k l m n o p q r s t u v w x y z)
function random_string(){
str=""
for ((i=0; i < $1; i++));do str="$str${name_string_arr[$RANDOM%26]}";done
echo $str
}
####################################### utils function ##########################################
# random folder name, length=5.
function randomFolderName(){
echo $(random_string 5)
}
# random file name, length=10.
function randomFileName(){
str=$(random_string 10)
str=$(first_letter_upper $str)
echo $str
}
# check if string in array
# $1 string
function checkFolderIn(){
exist=false
for str in ${skipFolderArr[@]}
do
if [ $1 == $str ]; then
exist=true
break
fi
done
echo $exist
}
# check if string in array
# $1 string
function checkFileIn(){
exist=false
for str in ${skipFileArr[@]}
do
if [ $1 == $str ]; then
exist=true
break
fi
done
echo $exist
}
# handle file path name map save
function handleMapSave(){
# key reduce length
krl=${rootPathLength}+1
# value reduce length
vrl=${newRootPathLength}+1
saveKey=${1:${krl}}
saveKey2=${saveKey//'/'/'.'}
saveValue=${2:${vrl}}
filePathNameMap[${saveKey}]=${saveValue}
filePathNameMap[${saveKey2}]=${saveValue}
}
function writeFolderReflactToFile(){
echo -e ${1}"-----------mkdir----------"${2} >> ${folderReflactFile}
}
function writeFileReflactToFile(){
echo -e ${1}"-----------file path name----------"${2} >> ${fileReflactFile}
}
# traverse folders to collect folders and files
function skipFolderTraverse(){
for file in `ls $1`
do
if [ -d $1"/"$file ]; then
# traverse folder
oldPath=$1"/"${file}
mkdirPath=${newRootPath}${1:${rootPathLength}}"/"${file}
echo ${oldPath}"-----------mkdir----------"${mkdirPath}
writeFolderReflactToFile ${oldPath} ${mkdirPath}
mkdir -p ${mkdirPath}
skipFolderTraverse ${oldPath}
else
# define copy filePathName -> newFilePathName
filePathName=${1}"/"${file}
newFilePathName=${newRootPath}${1:${rootPathLength}}"/"${file}
echo ${filePathName}"-----------file path name----------"${newFilePathName}
writeFileReflactToFile ${filePathName} ${newFilePathName}
cp ${filePathName} ${newFilePathName}
fi
done
}
# traverse folders to confuse folders and files
function confuseFolderTraverse(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
oldPath=$1"/"${file}
newFolder=$(randomFolderName)
newPath=$2"/"${newFolder}
mkdirPath=${newRootPath}${1:${rootPathLength}}"/"${file}
# folder "cocos" and "package" are con't fixed.
if [ $(checkFolderIn ${oldPath}) == true ]; then
echo ${oldPath}"-----------mkdir----------"${mkdirPath}
writeFolderReflactToFile ${oldPath} ${mkdirPath}
mkdir -p ${mkdirPath}
skipFolderTraverse ${oldPath}
continue
fi
mkdirPath=${newRootPath}${2}"/"${newFolder}
echo ${oldPath}"-----------mkdir----------"${mkdirPath}
writeFolderReflactToFile ${oldPath} ${mkdirPath}
mkdir -p ${mkdirPath}
# traverse folder
confuseFolderTraverse ${oldPath} ${newPath}
else
# get file suffix
fileSuffix="."${file##*.}
# echo "-----------file suffix-----------"${fileSuffix}
# define fileName -> newFileName
fileName=$(basename ${file} ${fileSuffix})
newFileName=$(randomFileName)
# echo ${fileName}"-----------file name----------"${newFileName}
# define file -> newFile
newFile=$newFileName$fileSuffix
# echo $file"-----------file----------"$newFile
# define copy filePathName -> newFilePathName
filePathName=${1}"/"${file}
newFilePathName=${newRootPath}${2}"/"${newFile}
if [ $(checkFileIn ${filePathName}) == true ]; then
newFilePathName=${newRootPath}${2}"/"${file}
echo ${filePathName}"-----------file path name----------"${newFilePathName}
writeFileReflactToFile ${filePathName} ${newFilePathName}
handleMapSave ${filePathName//${fileSuffix}/''} ${newFilePathName//${fileSuffix}/''}
cp ${filePathName} ${newFilePathName}
continue
fi
echo ${filePathName}"-----------file path name----------"${newFilePathName}
writeFileReflactToFile ${filePathName} ${newFilePathName}
handleMapSave ${filePathName//${fileSuffix}/''} ${newFilePathName//${fileSuffix}/''}
cp ${filePathName} ${newFilePathName}
sed -i "s|${fileName}|${newFileName}|g" $newFilePathName
fileNameMap[${fileName}]=${newFileName}
fi
done
}
function replace(){
for file in `ls $1`
do
if [ -d ${1}"/"$file ]
then
oldPath=${1}"/"${file}
#echo ${oldPath}
echo ${oldPath:${newProffixLength}}
if [ $(checkFolderIn ${oldPath:${newProffixLength}}) == true ]; then
continue
fi
replace ${oldPath}
else
filePathName=${1}"/"$file
for key in ${!filePathNameMap[@]};do
value=${filePathNameMap[${key}]}
echo "sed -i 's|${key}|${value}|g' $filePathName"
sed -i "s|${key}|${value}|g" $filePathName
done
for key in ${!fileNameMap[@]};do
value=${fileNameMap[${key}]}
echo "sed -i 's|${key}|${value}|g' $filePathName"
sed -i "s|${key}|${value}|g" $filePathName
done
fi
done
}
function handler(){
# traverse folder to handle files
confuseFolderTraverse ${rootPath}
echo "-----------------------------------------------------------------------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
echo "----------------------------------------------------traverse-----------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
echo "-----------------------------------------------------------------------------------------------------------------"
replace ${newRootPath}
}
handler