首页 » PHP教程 » php隐蔽shell技巧_若何隐藏shell脚本内容

php隐蔽shell技巧_若何隐藏shell脚本内容

duote123 2024-12-07 0

扫一扫用手机浏览

文章目录 [+]

从事 Linux 开拓的同学,常常须要编写 shell 脚本,有时脚本中会涉及到一些敏感内容,比如一些 IP 地址,用户名以及密码等,或者脚本中有一些关键的代码, 所有这些内容你都不想别人阅读或者修正,更进一步,你希望对脚本设置过期韶光,超过指定时间韶光之后,脚本就无法利用

在不改变脚本内容、功能以及实行办法的情形下,有没有办法实现上面的需求呢?

php隐蔽shell技巧_若何隐藏shell脚本内容

答案是:有的, 在Linux下,我们可以利用 shc 这个工具来实现隐蔽shell脚本内容以及设置过期韶光的目的

php隐蔽shell技巧_若何隐藏shell脚本内容
(图片来自网络侵删)
简介

shc 是一个通用shell脚本编译器,它将 shell 脚本编译 可实行的二进制文件,它的功能以及实行办法和原始脚本没有差异

和 gcc 编译器不同的是,shc 并没有把脚本源代码转化成机器码,它只是天生了一份 C 措辞代码,这份 C 措辞代码中包含了加密的原始shell脚本,并为它添加了过期功能,然后,通过gcc编译器将C代码编译成可实行的二进制文件

安装

目前,大多数的 Linux 发行版的仓库中都已经包含了 shc, 只须要利用默认的包管理器就可以安装,详细的安装命令如下:

yum install shc

输入 shc -v 命令,下面的输出表示安装成功

[root@ecs-centos-7 shc_test]# shc -vshc parse(-f): No source file specifiedshc Usage: shc [-e date] [-m addr] [-i iopt] [-x cmnd] [-l lopt] [-o outfile] [-rvDSUHCABh] -f script常用选项

下面是 shc 常用的一些选项以及选项的描述

选项

描述

-f

待编译的shell脚本文件

-o

指定编译天生的二进制文件

-e

设置过期韶光,格式 日/月/年

-m

过期之后,实行脚本时的提示信息

-v

输出编译shell脚本的过程

-r

编译天生可再发行的二进制

编译脚本

sehll 脚本编译成可实行的二进制文件之后,只须要把二进制文件供应给实行者即可,这样实行者就无法知道原始脚本代码了,从而实现别人无法阅读和修正代码的目的

新建 func.sh 脚本,往个中添加如下内容:

#!/bin/bash#是否是有效的密码valid_passwd(){ if [ "$1" == "123" ]; then echo 1 else echo 0 fi}#获取最大数量max_num(){ echo 100}#登录到远程机器login(){ sshpass -p '123456' ssh test@192.168.70.20}#版本号ver(){ echo "1.0"}if [ $# -ne 0 ]; then name="$1" shift 1 ${name} "$@"fi

实行下面的命令,编译 func.sh 脚本

shc -rf func.sh -o func.bin

编译完之后,当前目录下会涌现三个文件

[root@ecs-centos-7 shc_test]# ll-rwxrwxr-x 1 root root 11640 7月 1 00:24 func.bin-rw-r--r-- 1 root root 373 7月 1 00:19 func.sh-rw-r--r-- 1 root root 19811 7月 1 00:24 func.sh.x.c

func.sh 是原始的脚本文件,func.sh.x.c 是天生的 c措辞代码, func.bin 是天生可实行的二进制文件,它的利用方法和原始脚本是一样的

把稳: 编译出来的二进制文件func.bin,如果想让它在其他机器也能运行的话,一定要指定 -r 选项

利用 file 命令分别查看 func.bin 、func.sh.x.c,结果如下:

脚本对外供应 valid_passwd、 max_num、 login、 ver 这四个接口,脚本中已经注明了每个接口的浸染,利用方法是 ./func.bin 接口名 接口参数列表,下面的两个实例解释了如何利用脚本

实例1

分别实行 ./func.bin ver 和 ./func.sh ver 命令,结果如下

从上图可以看出,无论是用脚本还是二进制,终极的结果都是一样的

实例2

实行 ./func.bin login 命令,结果如下

当传入 login 参数时,就会实行func.sh脚本中的 login 函数,该函数的浸染是利用 SSH 登录到远程机器, 函数体中的 sshpass 是一个自动添补SSH登录密码的工具

从结果可以知道,实行 ./func.bin login 命令之后,就登录到 ip 为 192.168.70.20 机器的 /home/test 目录,后面再输入 exit 从远程机器退回到当前机器的目录

我们把 func.sh 脚本编译成 func.bin 二进制文件的目的便是要隐蔽脚本文件中一些敏感信息,比如:脚本中的SSH用户 test , IP地址 192.168.70.20 以及密码 123456

设置过期韶光

shc 除了将把脚本编译成二进制,还能为二进制设置过期韶光,下面还是以 func.sh 脚本为例来解释

实行 shc -e 25/6/2021 -m "The script is expired, Please contact test@qq.com" -rf func.sh -o func.bin 命令把脚本的过期韶光设置为 2021年6月25日,实行过期后的脚本提示语设置为 "The script is expired, Please contact test@qq.com"

然后,实行 ./func.bin ver 命令进行测试,结果如下

从上图可以看出,脚本设置过期韶光之后,再次实行脚本会提示已经由期了

如何引用二进制脚本

func.sh 编译成了二进制后,其他脚本引用它的办法也要调度下,原来以 source ./func.sh 的利用办法都须要修正,由于 fun.sh 已经由原来的 ASICII 文件变成了 二进制文件了,下面给出一个shell脚本引用二进制脚本 func.bin 的实例

新建 test_func.sh 脚本,脚本内容如下:

#!/bin/bash#调用 valid_passwd 函数ret=$(./func.bin valid_passwd 123)if [ $ret -eq 1 ]; then echo "passwd ok"fi#调用 valid_passwd 函数ret=$(./func.bin valid_passwd 124)if [ $ret -eq 1 ]; then echo "passwd ok"else echo "passwd fail"fi#调用 max_num 函数ret=$(./func.bin max_num)echo "max_num:"$ret#调用 ver 函数ret=$(./func.bin ver)echo "version:"$ret

实行 ./test_func.sh 命令,结果如下

从上图可以看出,test_func.sh 脚本分别调用了二进制文件 fun.bin 中的 valid_passwd、max_num、 ver 函数,根据 func.sh 脚本内容,可以确定结果输出都是精确的

从这个实例可以得出,普通脚本也可以正常利用二进制的脚本

安全性

shc 利用的加密类型是叫做 RC4流密码的一个变体,目前它已经被证明存在弱点,存在被破解的可能, 尤其在 shc 中,密钥被携带到加密脚本本身中,以是,是存在 通过反汇编破解出密钥,进而通过密钥还原原始脚本的可能性

因此,我们不应该依赖 shc 加密的安全性,而是更多的把它当作是shell脚本内容的隐蔽或者稠浊工具

小结

本文紧张先容了隐蔽shell脚本内容的工具 shc, 虽然它加密的安全性不高,但是我们平常可以把它作为一个shell脚本代码隐蔽和稠浊工具来利用,也能达到我们的目的, 更多关于 shc 的干系知识请参考网上其他资料

相关文章

restfulphp代码技巧_PHP编程 RESTful

符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:直不雅观简短的资源地址:URI,比如...

PHP教程 2024-12-09 阅读0 评论0

php读入文件乱码技巧_php读取数据库乱码

从后台读取数据时,常日会涌现乱码情形,比如“汉字”变成“?”等,造成这种情形的缘故原由常日是编码设置不对,办理方法如下:第一种方法...

PHP教程 2024-12-09 阅读0 评论0