awk:base64加密解密,执行shell命令

本文介绍如何利用awk结合base64命令实现文本的加密与解密操作,并展示了具体的命令用法及示例。同时,文章还提供了执行shell命令的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、awk之base64加密解密

1.1 方式一

      加密:awk  'BEGIN{FS="\n";}  {cmd=sprintf("echo -n %s|base64", $1);  system(cmd);}'  ip.ipb >>encode.conf
      解密:awk  'BEGIN{FS="\n";}  {cmd=sprintf("echo -n %s|base64 -d", $1);  system(cmd); print "";}'  encode.conf >>decode.conf

1.1 方式一

      加密:awk  'BEGIN{FS="\n";}  {cmd=sprintf("echo -n %s|base64", $1);  system(cmd);}'  ip.ipb >>encode.conf
      解密:awk  'BEGIN{FS="\n";}  {cmd=sprintf("echo -n %s|base64 -d", $1);  system(cmd);  print "";}'  encode.conf >>decode.conf


      源文件:ip.ipb

16777471 16777471 232
16778239 16778239 15
16779263 16779263 232
16781311 16781311 25
16785407 16785407 229

      加密文件:encode.conf

MTY3Nzc0NzEgMTY3Nzc0NzEgMjMy
MTY3NzgyMzkgMTY3NzgyMzkgMTU=
MTY3NzkyNjMgMTY3NzkyNjMgMjMy
MTY3ODEzMTEgMTY3ODEzMTEgMjU=
MTY3ODU0MDcgMTY3ODU0MDcgMjI5

      解密后文件:decode.conf  (同ip.ipb)



二、awk之执行shell命令

      echo "/root" | awk  '{cmd="ls "$1;  system(cmd); }'

      echo "/root" | awk  '{cmd=sprintf("echo %s", $1);  system(cmd); }'


参考资料:http://hi.baidu.com/yigwjirqlwakuxe/item/1abd3d1c8d3a0c426926bba7




这是混淆方式1 #!/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" 这是混淆方式2 #!/bin/bash clear #--------------------------------------------------------------------- # 报时 TIME=`date +%Y%m%d%H%M%S` date +"此shell脚本执行时间: %Y-%m-%d %H:%M:%S.%N" #--------------------------------------------------------------------- # 温馨提示 echo -e "\033[31m HEX编码(16进制编码)不是加密,而是一种编码方式,任何人都可以很轻松的将编码后的文件进行解码\033[0m" #--------------------------------------------------------------------- echo_bold_red() { echo -e "\033[1m\033[31m$1\033[0m" } #--------------------------------------------------------------------- # 输入需要编码的文件路径和确保存在 echo -n " 请输入需要编码的文件路径:" read ORIGINAL_SCRIPT_PATH #----- ----- ----- ----- ----- ----- # 确保原始脚本存在 if [ ! -f "$ORIGINAL_SCRIPT_PATH" ]; then echo "原始脚本不存在: $ORIGINAL_SCRIPT_PATH" exit 1 fi #--------------------------------------------------------------------- # 输入编码后的文件保存路径 echo -n " 请输入编码后的文件的路径: " read ENCODED_SCRIPT_PATH #--------------------------------------------------------------------- # 加密层数 # 初始化ENCODED_CONTENT ENCODED_CONTENT="$SCRIPT_CONTENT" # 提示用户输入编码层数 echo -n " 编码层数: " read ENCODING_LAYERS if [ "$ENCODING_LAYERS" -le 0 ]; then echo "编码层数至少为1。" exit 1 fi #--------------------------------------------------------------------- # 歪比巴布(大脑抽风) # 读取原始脚本内容 SCRIPT_CONTENT=$(cat "$ORIGINAL_SCRIPT_PATH") # 初始化编码内容变量 ENCODED_CONTENT="$SCRIPT_CONTENT" #----- ----- ----- ----- ----- ----- # 计算原始脚本大小 ORIGINAL_SIZE=$(echo -n "$SCRIPT_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "原始脚本的大小为: ${ORIGINAL_SIZE} MB" #----- ----- ----- ----- ----- ----- # 初始化大小阈值 MAX_SIZE_1MB=1 MAX_SIZE_2MB=2 #----- ----- ----- ----- ----- ----- # 初始化ENCODED_CONTENT ENCODED_CONTENT="$SCRIPT_CONTENT" #----- ----- ----- ----- ----- ----- # 计算达到1MB和2MB的编码层数 i=0 CONTINUE_ENCODING=1 while [ "$CONTINUE_ENCODING" -lt 1 ]; do i=$(expr $i + 1) echo "尝试第 ${i} 次编码" # 编码 ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n') # 计算编码后大小 ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "编码$1次后的大小为: ${ENCODED_SIZE} MB" #--------------------------------------------------------------------- # 检查大小 # 检查是否达到1MB if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_1MB" | bc)" -eq 1 ] && [ "$MAX_SIZE_1MB" != "-1" ]; then echo_bold_red "达到1MB的编码层数为: $i" MAX_SIZE_1MB=-1 fi # 检查是否超过2MB if [ "$(echo "$ENCODED_SIZE >= $MAX_SIZE_2MB" | bc)" -eq 1 ]; then echo_bold_red "超过2MB的最小编码层数为: $i" break fi done #--------------------------------------------------------------------- # 编码 # 应用用户指定层数的十六进制编码 for i in $(seq 1 $ENCODING_LAYERS); do ENCODED_CONTENT=$(echo -n "$ENCODED_CONTENT" | xxd -p | tr -d '\n') CONTENT_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo "第 $i 层编码后的数据大小为: $CONTENT_SIZE MB" if [ "$(echo "$CONTENT_SIZE > 10" | bc)" -eq 1 ]; then echo "编码后的数据已超过10MB。请减少编码层数。" exit 1 fi done #--------------------------------------------------------------------- # 显示编码后大小 ENCODED_SIZE=$(echo -n "$ENCODED_CONTENT" | wc -c | awk '{print $1/1024/1024}') echo_bold_red "编码脚本最后的大小为: ${ENCODED_SIZE} MB" #--------------------------------------------------------------------- # 创建并写入文件 # 创建新脚本并写入解码逻辑与编码内容 cat > "$ENCODED_SCRIPT_PATH" <<EOF #!/bin/bash ENCODED_SCRIPT="$ENCODED_CONTENT" decode_hex() { local hex=\$1 local count=\$2 while [ \$count -gt 0 ]; do local decoded=\$(echo -n "\$hex" | xxd -r -p) hex="\$decoded" count=\$(expr \$count - 1) done echo -n "\$hex" } DECODED_SCRIPT=\$(decode_hex "\$ENCODED_SCRIPT" $ENCODING_LAYERS) eval "\$DECODED_SCRIPT" EOF #--------------------------------------------------------------------- # 为新脚本添加执行权限 chmod +x "$ENCODED_SCRIPT_PATH" #--------------------------------------------------------------------- # 确保保存成功 if [ ! -f "$ENCODED_SCRIPT_PATH" ]; then echo -e "\033[31m 保存失败!这可能是由于权限不足或保存路径不合法造成的!\033[0m" else echo -e "\033[32m 编码脚本已生成并位于路径: $ENCODED_SCRIPT_PATH\033[0m" fi 我希望结合这两个脚本,在混淆时,处理奇数层使用第二种混淆,处理偶数层使用第一种混淆,二者共同完成一次混淆任务,并且混淆后的代码可以完美运行
05-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值