首页 > 系统相关 >如何将 shell 脚本编译成二进制执行文件

如何将 shell 脚本编译成二进制执行文件

时间:2023-04-18 15:14:52浏览次数:58  
标签:shell xxxx 二进制 编译成 sh wangzy root localhost shc

一、说明

很多人写了一些shell脚本,想给其他人用但是又不想公开源代码,所以就要对shell脚本进行加密处理,那么我们可以Shell 脚本编译器工具 (SHC) ,使用 shc 将 bash/shell 脚本编译为二进制文件,隐藏源代码并防止被被人修改的功能。由于在大多数操作系统上默认是不安装的, 因此需要手动安装。

shc的工作过程分为两步:

  • 将shell脚本转化为C语言源码

  • 将C语言源码进行编译链接得到二进制文件

二、安装

2.1 安装服务

[root@localhost wangzy]# yum -y install shc

2.2 书写测试脚本

书写一个 “hello world” 测试脚本

[root@localhost wangzy]# ls
[root@localhost wangzy]# vi wangzy.sh 
[root@localhost wangzy]# cat wangzy.sh 
#!/bin/bash
echo "hello world"

2.3 编译

# 方式一:直接编译
[root@localhost wangzy]# shc -f wangzy.sh 
[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c

#方式二:加参数
[root@localhost wangzy]# shc -r -v -f wangzy.sh
[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c

#说明:shc运行后会生成两个文件:
xxxx.sh.x 和 xxxx.sh.x.c
xxxx.sh.x 二进制文件,重命名后用 chmod +x xxxx.sh 赋予权限后可执行。默认自带执行权限
xxxx.sh.x.c 则是 C 编译后的C语言文件,无用,可以删除

如果打包不成功的话,shc -h最下面有environment环境要求,要在保证满足。

2.4 重命名二进制文件

[root@localhost wangzy]# ls
wangzy.sh  wangzy.sh.x  wangzy.sh.x.c
[root@localhost wangzy]# rm -rf wangzy.sh.x.c 
[root@localhost wangzy]# mv wangzy.sh.x wangzy

#说明:shc运行后会生成两个文件:
xxxx.sh.x 和 xxxx.sh.x.c
xxxx.sh.x 二进制文件,重命名后用 chmod +x xxxx.sh 赋予权限后可执行
xxxx.sh.x.c 则是 C 编译后的C语言文件,无用,可以删除

2.5 测试

# 运行二进制文件
[root@localhost wangzy]# ./wangzy 
hello world

# cat发现文件已经无法查看
[root@localhost wangzy]# 

# 删除原始脚本
[root@localhost wangzy]# rm -rf wangzy.sh

附加:

shc反编译,待后续

 

标签:shell,xxxx,二进制,编译成,sh,wangzy,root,localhost,shc
From: https://www.cnblogs.com/wangzy-Zj/p/17329627.html

相关文章

  • shell脚本中的&&解析
    #!/bin/bashtouchfile1#创建文件file1rm-ffile2#删除文件file2if[-ffile1]&&echo"hello"&&[-ffile2]&&echo"world"#如果文件file1存在,则输出"hello"#如果前面的命令(即echo"hello")执行成功,则继续判断是否存在文件f......
  • 部署多节点elasticsearch集群的shell脚本
    以下是一个部署多个节点的elasticsearch集群的shell脚本示例:#!/bin/bash#设置集群名称CLUSTER_NAME="my_cluster"#设置elasticsearch版本号ES_VERSION="7.10.2"#设置elasticsearch安装目录ES_HOME="/usr/local/elasticsearch"#设置elasticsearch数据目录DATA_DI......
  • shell 编写脚本的一些细节心得:流程控制
    流程控制用得最多的,无非也就是老三样,if、for、while。if其中if作为判断的函数使用,其中也是有很多小细节的。例如你要判断两个值是否相等的时候,有两种方式,代码如下:test=2if((${test}==2))thenecho"yes"fiif[${test}-eq2]thenecho"yes"fi其实两段代码的......
  • Shell脚本--重定向
    0.从终端输入一个命令时,通常会将该命令的结果输出到终端。例如,在终端执行 pwd 命令会在屏幕上显示当前目录:#pwd/root大多数UNIX系统中,命令通常从一个叫标准输入的地方读取输入。同样,命令通常将其输出写入到标准输出。标准输入和标准输出默认情况下都是终端。那如果想......
  • Shell脚本--变量
    1. 定义变量Shell 支持一下三种定义变量的方式:variable=valuevariable='value'variable="value"variable是变量名,value是赋给变量的值。如果value不包含任何空白符,那么可以不用引号;否则就必须使用引号。注意,赋值号=的周围不能有空格。Shell变量的命名规范和大......
  • shell正则之Grep
    1.shell正则之Grep通配符及特殊符号 正则表达式 ......
  • Shell之bash脚本的编写
    下面是我写的一段部署脚本。#!/bin/bashcontainerID=`dockerps|grepkapok-admin|awk'{print$1}'`dockerstop$containerIDecho"dockerstop$containerID"imageID=`dockerimages|grepkapok-admin|awk'{print$3}'`foridin$im......
  • shell编程学习笔记之特殊变量($0、$1、$2、 $?、 $# 、$@、 $*)
    特殊变量($0、$1、$2、$?、$#、$@、$*)shell编程中有一些特殊的变量可以使用。这些变量在脚本中可以作为全局变量来使用。名称说明$0脚本名称$1-9脚本执行时的参数1到参数9$?脚本的返回值$#脚本执行时,输入的参数的个数$@输入的参数的具体内容(将输入的参数作为......
  • How to execute a shell script in the .profiles file All In One
    Howtoexecuteashellscriptinthe.profilesfileAllInOnedemos$cat./dd-ip-notice-robot.sh#!/usr/bin/envbash#coding:utf8#自动发送树莓派ip地址,到钉钉上DD_ROBOT_TOKEN=404e996c8747ea4a1230f5cd5f7b2d36006f2732f9111bd3f39ce36d17fa1202echo......
  • 探究公众号接口漏洞:从后台登录口到旁站getshell
    探究公众号接口漏洞:从后台登录口到旁站getshell1、入口发现与利用公众号接口安全漏洞某120公众号提供了一处考核平台,通过浏览器处打开该网站。打开可以看到一处密码登录口,试了一下常用的手机号和密码,没有登录成功。这个时候扫个目录吧。扫到了一处管理员页面:/index.php?c=h......