shc加密
shc是加密脚本的工具,使用RC4加密算法,能把shell程序转化成二进制文件(支持动静态链接库)
安装
# wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz
# tar zxvf shc-3.8.9b.tgz
# cd shc-3.8.9b
# mkdir -p /usr/local/man/man1/
# make install
常用参数:
-e date (指定过期日期)
-m message (指定过期提示的信息)
-f script_name(指定要编译的shell的路径及文件名)
-r Relax security. (可以相同操作系统的不同系统中执行)
-v Verbose compilation(编译的详细情况)
常用使用方法:
# shc -v -r -f shellname
执行后会生成一个 shellname.x 和 shellname.c 文件,直接使用shellname.x 文件即可,名字可以随意修改。
shellname.x 是加密后的二进制执行文件
shellname.c 是脚本转化后C源码文件
若执行shellname.x 文件报错,则可以对shellname.c 文件的修改,修改完后重新编译成二进制文件:
# gcc -o shellname.x shellname.c
以下是我执行过程中遇到一个报错,具体报错输出没有留下来:
当我的脚本第一行写着#!/usr/bin/env bash,使用shc 加密工具会出现报错。
解决方法是把它替换成 #!/usr/bin/bash 或则 #!/bin/bah 即可
rpm打包
使用rpmbuild 对 shellname.x 二进制文件打包成rpm文件
安装相关工具:
# yum install rpmbuild rpmdevtools -y
# rpmdev-setuptree //会自动生成工作目录
工作目录如下:
~/rpmbuild
~/rpmbuild/SOURCES
~/rpmbuild/SPECS
~/rpmbuild/BUILD
~/rpmbuild/RPMS
~/rpmbuild/RPMS/i386
~/rpmbuild/SRPMS
作者当时百度拷贝了一个shell的spec,修改了一下spec,但是打包完成后安装rpm包报错,后来使用 rpmrebuild 重新修改spec,如下是修改方法:
# rpmrebuild -e -p shellname.rpm //会重新生成spec,根据里面的提示重新修改spec内容,此部分是之后排错所用到,现在无需使用
# cd rpmbuild/
# vi BUILD/shellname.spec //把以下拷贝到spec文件,此文件是rpm打包的核心
Summary: Prepare net environment
Name: shellname.x
Version: 43
Release: el7
License: GPL
Group: System Environment/Base
ExclusiveArch: x86_64
Provides: shellname.x = 43-el7
Provides: shellname.x(x86-64) = 43-el7
Requires(pre): /bin/sh #requires 很明显是安装rpm包所需的依赖,根据你的情况填写即可
Requires(post): /bin/sh #不填写也是可以打包成功
Requires(preun): /bin/sh
Requires: libc.so.6()(64bit)
Requires: libc.so.6(GLIBC_2.14)(64bit)
Requires: libc.so.6(GLIBC_2.2.5)(64bit)
Requires: libc.so.6(GLIBC_2.7)(64bit)
Requires: rtld(GNU_HASH)
%description # 描述内容,随便填就好
shellname.x prepare net bridge environment
%prep # 打包前的工作,%{buildroot}是项目根目录,而%{_binddir}是指/usr/bin目录
mkdir -p %{buildroot}%{_bindir} # 创建项目所需的目录,到时候安装rpm包会生成_binddir目录下
install -c -m 755 $OLDPWD/shellname.x %{buildroot}%{_bindir}/shellname.x # 将打包文件拷贝到到项目目录
exit 0
%files # 此处填写项目包含的目录,也将会在此生成出来
/usr/bin/shellname.x
#%{_bindir} # 此处我曾填写,执行rpm安装报错,原因权限不够,现在已注释
#%dir %attr(0755, root, root) "/usr/bin" # 此处我曾填写,执行rpm安装报错,原因权限不够,现在已注释
%attr(0755, root, root) "/usr/bin/shellname.x" # 修改权限和所属
%pre -p /bin/sh # 不清楚含义,rpmrebuild修复后生成出来
%post -p /bin/sh # 同上,rpmrebuild修复后生成出来
%preun -p /bin/sh # 同上,rpmrebuild修复后生成出来
%define __spec_install_pre /bin/true # 同上
%build # 此处应该是编译源码包所需要填写的
%clean # 构建完项目清理
rm -rf %{buildroot}
%changelog # 不清楚作用
使用rpm -bb /BUILD/shellname.spec 注意shellname.x 放在rpmbuild目录
生成的rpm包在rpmbuild/RPMS /目录下 ,输出的rpm包就可以执行安装啦!rpm -ivh shellname.rpm
安装完使用shellname.x 看看是否有此命令
拓展链接:
https://blog.csdn.net/rocky_zhm/article/details/51755257 关于shc
https://blog.csdn.net/txgc1009/article/details/6833764 关于rpmbuild
http://fedoraproject.org/wiki/Packaging/RPMMacros#RPM_directory_macros 关于rpmbuild
https://blog.csdn.net/weixin_33779515/article/details/92567570 关于rpmbuild
来源:oschina
链接:https://my.oschina.net/u/4412764/blog/3230552