使用shc加密shell腳本,並打包成rpm文件


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






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章