美文网首页
lua代码暴力混淆--shell脚本

lua代码暴力混淆--shell脚本

作者: disilin | 来源:发表于2019-08-22 17:10 被阅读0次

    #! /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代码暴力混淆--shell脚本

          本文链接:https://www.haomeiwen.com/subject/xtkosctx.html