bash二进制脚本
bash二进制脚本
2017/07/25
SHC代表shell script compiler,即shell脚本编译器。通过SHC编译过的脚本程序对普通用户而言是不读的,因此如果你想保护你的代码(例如含有密钥),则可以考虑SHC;然而有些人可以通过反向编译的方式破解SHC加密过的脚本。
1.下载并编译SHC
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.7.tgz
tar xvfz shc-3.8.7.tgz
cd shc-3.8.7
make
2.静态编译
安装成功后,直接执行如下命令:
CFLAGS=-static shc -r -f t.sh (CFLAGS=-static shc -r -f kacpi_hotplug ) kacpi_hotplug为shell文件
CFLAGS指明为static静态编译,因为默认生成的是动态库,在不同的系统可能运行不了。
-r也是为了生成的脚本二进制可执行程序能在其它的电脑上运行,
-f参数用于指明要编译的脚本文件.
常用参数:
-e date (指定过期日期)
-m message (指定过期提示的信息)
-f script_name(指定要编译的shell的路径及文件名)
-r Relax security. (可以在相同操作系统的不同系统中执行)
-v Verbose compilation(编译的详细情况)
这时候在目录中会生成一个t.sh.x的文件,这个是加密后的脚本文件.
还有一个t.sh.x.c的文件,这是加密后的源文件代码。
3.修改C语言代码并gcc编译
如果后期需要一些修改,也可以自行修改t.sh.x.c的源码文件,本身就是是c语言代码,可以自己用gcc进行编译完成,如下图所示 :
gcc -o t t.sh.x.c -static;
gcc -o kacpi_hotplu kacpi_hotplu.x.c -static
4.遇到的问题
当库文件有问题的时候,shc无法自动生成对应的二进制文件.且无提示信息.
当使用gcc进行静态编译过程中遇到报错:
/usr/bin/ld: cannot find -lc ...
搜索libc.so文件,发现在/usr/lib64/目录内.尝试ldconfig重载库文件,依然不行.修改/etc/ld.so.conf配置文件,将/usr/lib64/目录加到最前面,执行ldconfig -v|grep "lib64".依然不行.
尝试安装静态库资源: yum install glibc-static 问题解决.
解决此问题后,重新使用shc命令,则可以不仅生成c语言代码,并同时生成了二进制文件.
5.查看文件属性信息
file kacpi_hotplug*
kacpi_hotplug: Bourne-Again shell script text executable
kacpi_hotplug.x: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.18, stripped
kacpi_hotplug.x.c: ASCII C program text

浙公网安备 33010602011771号