lua代码暴力混淆--shell脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua代码暴力混淆--shell脚本相关的知识,希望对你有一定的参考价值。
参考技术A #! /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
Lua代码加密,防止代码反编译
加密目的:
在游戏开发中,脚本作为一种资源文件,就像图片视频一样,被引擎所引用。如果不对脚本进行加密,不怀好意的人轻松解压出脚本文件,给你瞬间复制一个游戏出来。在程序发布前一般会对脚本进行加密,防止代码泄漏。
加密工具:
Virbox Protector
DS Protector
优点:
便捷,一键加壳,无需编写代码。
安全,混淆、虚拟化、碎片代码、反黑、定制SDK等最新加密安全技术。
快速,5分钟完成整个程序加壳,专注软件开发。
灵活,云锁、软锁、硬件锁三种许可形式,可满足联网或离线场景,云和软无需硬件加密。
加密工具下载:
SDK需Virbox LM帐号,获取许可ID及密码
1、 获取SDK:https://developer.lm.virbox.com/reg.html?code=f260815126
注册后,转正即可下载定制SDK
2、文档下载: https://lm.virbox.com/fangan.html
包含加密快速流程及加壳详细文档
加密流程
1、注册帐号
2、安装SDK
3、用Virbox Protector对安装目录下的lua.exe 进行加壳。如何加壳?
4、打开 DS Protector,导入刚加壳生成的配置工具,添加所需要保护的demo ,点击保护
5、进入 demo 所在的目录下,运行如lua demo.lua
以上是关于lua代码暴力混淆--shell脚本的主要内容,如果未能解决你的问题,请参考以下文章