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脚本的主要内容,如果未能解决你的问题,请参考以下文章

Lua脚本怎么样调用外部脚本

C#中执行Lua脚本

shell脚本中 的 单引号和反引号经常混淆,请高手帮我区别它们的功能,谢谢

关于shell脚本的一些容易混淆的概念

如何对 Lua 脚本进行去混淆处理?

Redis 中使用 Lua 脚本