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

lua代码暴力混淆--shell脚本,第1张

#! /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=0i <$1i++))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

实践证明,无法实现,依然可以用反编译编稿闹译出来。

目前我的做法是,编译后,用压缩工具比如UPX压缩,然后篡改文件头,算是简单加密。

应用时,用一个专门恢复文件头的春备程序进行解密,然后再执行正常程序。

当然了,所有程序都封装成Dll,中间有加密过程,也算是那啥,不过,要看你的程扒敬毁序值不值了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12273606.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存