安卓可用的shell编码方式

为大家带来一个安卓可用的Shell脚本,无需root

它可以用来将一个文件中的内容编码成Base64,并保存在另一个文件中

但,要知道Base64并不是加密,而是一种编码方式,任何人都可以很轻松的将它解码,因此Base64并不适合用来保护重要内容,如果要保护重要内容可以使用AES等加密算法

源码如下:

#!/bin/bash

clear

#---------------------------------------------------------------------
# 提示作者

    echo -e "\033[33m  作者BiliBili: director_mark\033[0m"
    echo -e "\033[33m  作者BiliBili UID: 1113918991\033[0m"

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 报时

TIME=`date +%Y%m%d%H%M%S`
echo "尊敬的用户,此shell脚本执行时间是: "
date +"%Y-%m-%d %H:%M:%S.%N"

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 善意提醒

    echo -e "\033[31m  Base64不是加密,而是一种编码方式,任何人都可以很轻松的对其进行解密,如需加密shell脚本,有条件的可以使用如AES等加密方式\033[0m"

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 检测执行环境

if [ $SHELL != /system/bin/sh ]; then

    echo -e "\033[33m  shell脚本当前执行环境是: 拓展包\033[0m"

#-----     -----     -----     -----     -----     -----

else

echo "──────────────────⇧执行环境检测(系统)标识⇧─────────────────"

    echo -e "\033[33m  shell脚本当前环境检测是: 系统\033[0m"

fi

#-----     -----     -----     -----     -----     -----
# Root检测

  if [ `id -u` -ne 0 ]; then
      echo -e "\033[33m  shell脚本当前为 非Root执行\033[0m"
      echo -e "\033[36m  需加密文件和保存路径建议存放到本地存储(路径合法前提下)\033[0m"

#-----     -----     -----     -----     -----     -----

  else

      echo -e "\033[33m  shell脚本当前为 Root执行(需加密文件和保存路径可以为任何合法路径)\033[0m"

  fi


#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 输入需要加密的文件的绝对路径

        echo -n "  请输入需要编码的文件绝对路径: "
        read ORIGINAL_SCRIPT_PATH

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 确保原始脚本存在

if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then
    echo -e "\033[31m  文件不存在!请检查您的文件路径是否输入正确以及合法!\033[0m"
    exit 1
fi

#---------------------------------------------------------------------
# 输入加密后的文件绝对路径

        echo -n "  请输入编码后的文件绝对路径: "
        read ENCODED_SCRIPT_PATH

#---------------------------------------------------------------------
# 提示

    echo -e "\033[31m如果保存文件与原文件路径相同,那么保存后的文件会覆盖原文件\033[0m"

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 输入加密层数

        echo -n "  请输入编码层数: "
        read NOEL_SCRIPT_NUMBER

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 读取和初始化

# 读取原始脚本内容
SCRIPT_CONTENT=$(cat "$ORIGINAL_SCRIPT_PATH")

# 初始化编码内容变量
ENCODED_CONTENT="$SCRIPT_CONTENT"



#---------------------------------------------------------------------
# 执行Base64编码

    echo -e "\033[33m  准备对文件进行Base64编码处理...\033[0m"

date +"首次编译开始时间: %Y-%m-%d %H:%M:%S.%N"

for i in $(seq 1 $NOEL_SCRIPT_NUMBER); do
    ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | base64)
    # 进度提示信息

    echo -e "\033[32m>>>已编译 $i 层(第$i层,共$NOEL_SCRIPT_NUMBER层)<<<\033[0m"

date +"第 $i 层结束时间: %H:%M:%S.%N"

done


#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 询问用户是否需要添加可执行化

    echo "  1) 为文件添加可执行化(针对shell脚本(不安全的加密方式))\n  2) 不对文件添加可执行化"
        echo -n "  请输入: "
        read YoN_SCRIPT_NUMBER

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 创建文件


if (( $YoN_SCRIPT_NUMBER == 1 )); then
# 创建一个新的脚本文件并写入解码逻辑与编码后内容
echo -e "\033[36m  对编码后的文件进行可执行化\033[0m"

cat > "$ENCODED_SCRIPT_PATH" <<EOF
#!/bin/bash
ENCODED_SCRIPT="$ENCODED_CONTENT"

for i in \$(seq 1 $NOEL_SCRIPT_NUMBER); do
    ENCODED_SCRIPT=\$(echo -n "\$ENCODED_SCRIPT" | base64 -d)
done
eval "\$ENCODED_SCRIPT"
EOF

#-----     -----     -----     -----     -----     -----

elif (( $YoN_SCRIPT_NUMBER == 2 )); then
    echo -e "\033[36m  不对编码后的文件进行可执行化\033[0m"

cat > "$ENCODED_SCRIPT_PATH" <<EOF
# $NOEL_SCRIPT_NUMBER
$ENCODED_CONTENT
EOF

#-----     -----     -----     -----     -----     -----

else

    echo -e "\033[36m  $YoN_SCRIPT_NUMBER是非法的,自动选择2(不对编译后的文件进行可执行化)\033[0m"

cat > "$ENCODED_SCRIPT_PATH" <<EOF
# $NOEL_SCRIPT_NUMBER
$ENCODED_CONTENT
EOF

fi

#---------------------------------------------------------------------
# 赋予执行权限

# 为新脚本添加执行权限(Linux系统用得上,但是Android系统一般会自动添加660普通权限)
chmod +x "$ENCODED_SCRIPT_PATH"

#---------------------------------------------------------------------

echo "──────────────────────────────────────────────────────────"

#---------------------------------------------------------------------
# 检查是否成功

if [ -f "$ENCODED_SCRIPT_PATH" ]; then
    echo -e "\033[32m  加密脚本已保存在: $ENCODED_SCRIPT_PATH\033[0m"
TIMEz=`date +%Y-%m-%d.%H:%M:%S`
#-----     -----     -----     -----     -----     -----

else

    echo -e "\033[31m 保存失败!\033[0m"
    echo -e "\033[31m这可能是由于权限不足造成的,你可以尝试将需要加密的文件和保存路径进行更改(更改到可以读写的目录)\033[0m"

fi

#---------------------------------------------------------------------
# 创建日志

# 创建文件夹
mkdir -p /storage/emulated/0/Engineering/Base64-code/

# 创建日志


# 写入
JOURNAL_FIXED_FILE=/storage/emulated/0/Engineering/Base64-code/
TIMEz_FILE=$TIMEz.log

cat > "$JOURNAL_FIXED_FILE$TIMEz_FILE" << EOF
'Base64编码'在$TIMEz时
将: $ORIGINAL_SCRIPT_PATH 进行 $NOEL_SCRIPT_NUMBER 层Base64编码
保存在: $ENCODED_SCRIPT_PATH
保存值: $YoN_SCRIPT_NUMBER (1:进行可执行化  2&其他:不进行可执行)
EOF

# 提示
echo -e "\033[33m尊敬的用户:\033[0m"
echo -e "\033[36m  本次编码日志保存在/storage/emulated/0/Engineering/Base64-code/目录下的$TIMEz.log文件\033[0m"

  在这串代码中

$ORIGINAL_SCRIPT_PATH是需要编码的文件路径(绝对路径)

$ENCODED_SCRIPT_PATH是编码后保存的文件路径(绝对路径)

$NOEL_SCRIPT_NUMBER是编码层数(整数)

  因为Shell是可以执行Base64编码过的内容的,所以编码完成后你可以选择对文件进行可执行操作(前提是编码内容编码前就是Shell),但需要注意的是,Base64并不是加密,而是编码,任何人都可以很轻松的解码,所以不能当做加密使用

  同时,本脚本会在编码完后生成日志,存放在/storage/emulated/0/Engineering/Base64-code/文件夹下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

director Carter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值