Linux环境下脚本加密软件SHC的解密方法
Linux环境下脚本加密软件SHC的解密方法
2016/08/06:更新一个新的解密脚本
https://github.com/yanncam/UnSHc
自从我在博客里面发布了一些免流相关的东西之后,不少博友都加我QQ想了解如何解密经过SHC加密后的脚本。博主在这里需要跟大家说明的一点是:博主真的不是什么高手或大牛!博主解密这些脚本的方法都是搜索一下就能够找到的东西,我只是汇总了一下分享给大家,这个没什么技术含量可言的。另外,博主对于Linux的了解也就仅限于正常的使用。所以,不要一加QQ就咨询解密啦,我真的知道的不多,而且最新的解密脚本都是一些博友发给我的。
收到博友的反馈说是解密脚本有些能解,有些不能解,具体原因我不太清楚,今天就给大家了解下SHC解密的另一个思路(在上一篇文章中我提供的是一个现成的脚本)。当然,要想知道如何解密SHC,最好还是要了解下SHC是个啥东西,怎么工作的,咱先来科普一下吧。
SHC简单介绍及安装使用
SHC是一个用于加密linux脚本的软件,在某种程度上来说可以提高安全性。如果您不希望自己编写的shell脚本里面的相关信息透露出来,或者不愿意让人看到和修改shell代码,就可以使用shell加密。实际上SHC是一个脚本编译程序,使用RC4加密代码加密shell, 并把shell转换为二进制可执行文件(支持动态链接和静态链接)
如何安装和使用SHC?
SHC官网地址:http://www.datsi.fi.upm.es/~frosal/sources/
可以在直接从官网上WGET下载最新的源码到本机进行编译,执行步骤如下:
wget http://www.datsi.fi.upm.es/~frosal/sources/shc-3.8.9b.tgz tar vxf shc-3.8.9b.tgz cd shc-3.8.9b make test make strings make install
安装的时候可能会出现下面的情况,可以直接无视,一般没什么影响,只是少了对应的帮助文档。
*** Installing shc and shc.1 on /usr/local *** ?Do you want to continue? y install -c -s shc /usr/local/bin/ install -c -m 644 shc.1 /usr/local/man/man1/ install: target `/usr/local/man/man1/' is not a directory: No such file or directory make: *** [install] Error 1
SHC加密程序使用参数:
-e date (指定过期时间) -m message (指定过期提示的信息) -f script_name (指定要编译的shell路径) -r relax security (在不同操作系统执行) -v Verbose compilation (输出编译的详细情况)
简单使用实例:用SHC加密当前目录下的 abc.sh 文件
shc -v -f abc.sh shc -e 28/01/2012 -m "过期" -f abc.sh
如果需要用静态链接,只需要只需SHC加密的时候前面加上代码:CFLAGS=-static
静态链接加密实例:
CFLAGS=-static shc -v -f abc.sh
使用shc加密Shell脚本
[root@martin shc-3.8.7]# ./shc -v -r -T -f random.sh shc shll=bash shc [-i]=-c shc [-x]=exec '%s' "$@" shc [-l]= shc opts= shc: cc random.sh.x.c -o random.sh.x shc: strip random.sh.x shc: chmod go-r random.sh.x
运行后会生成两个文件,script-name.x 和 script-name.x.c
script-name.x是加密后的可执行的二进制文件
script-name.x.c是生成script-name.x的原文件(c语言)
[root@martin shc-3.8.7]# ll random.sh* -rwxr-xr-x 1 root root 146 Aug 2 10:26 random.sh -rwx--x--x 1 root root 9424 Aug 2 10:30 random.sh.x -rw-r--r-- 1 root root 10080 Aug 2 10:30 random.sh.x.c
执行加密后的脚本
[root@martin shc-3.8.7]# ./random.sh.x How many random numbers do you want to generate?3 28955 21487 29513
还不完善,只能全路径执行shc命令或者进入目录内,加入全局环境变量/etc/profile未生效
SHC解密的一些方法
2016/8/13日更新:根据博友反馈本方法运行出错,解密思路是一个朋友给的,目前还没有回复,等到回复了会第一时间更新。
虽然使用SHC对SHELL脚本进行RC4加密编译可以从一定程度上防止脚本程序被修改,但是这种加密方式并不是坚不可破的,心中无码才是最高境界,当然,国内环境大家懂的,在这里就不扯开话题了。
经过SHC加密的脚本能够被解密的原因是:在执行加密脚本的时候,还是会在内存中解密全部的shell代码,所以解密的思路就是从内存中获取解密后的代码。
好了,解密的思路有了,下面就来一步一步探讨下怎么从内存中获取解密后的代码。
那么有啥方法可以从内存中读取数据呢?经过一番搜索之后,找到了Core Dump这个神器。
什么是Core dump
Core dump翻译过来就是核心转储,当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。core dump在应用crash掉之后对问题的诊断是很有帮助的。多数情况下Core dump默认是关闭状态的。
那如何打开Core Dump呢?
方法一:直接执行命令行开启:
ulimit -c 70000 echo "/core_dump/core.%e.%p" > /proc/sys/kernel/core_pattern
通过上面的命令就开启了core dump,同时限制文件大小为7000k,也就是限制单个文件大小为7M左右,一般的脚本没那么大的。
方法二:配置profile文件,打开/etc/profile文件,在里面可以找到
ulimit -S -c 0 > /dev/null 2>&1
将它修改成下面这样就可以了。
ulimit -S -c unlimited > /dev/null 2>&1
当然,对于像我们这样的菜鸟来讲,还是方法一比较实际。
开启了Core Dump,我们就可以进行猥琐的解密工作了。
首先设置下执行脚本并中断,假如你需要解密的二进制脚本文件名为abc
(请注意:博友反馈这一步执行不了)
./abc (sleep 0.2 && kill -SIGSEGV $!)
输出脚本执行信息和脚本代码到文件
cd /core_dump cat ./core.***.**** | strings > ~/abc.sh ***.***是你执行代码后的随机值(对应的PID等)
好了,输出后的abc.sh文件就是从内存里面取出的解密后的代码,当然里面还是有些多余文本内容,自己稍微动手剔除后就得到解密后的脚本了。
上面是手工方式获得解密代码,当然也是最稳妥的,下面再给大家送上一份一个一键解密脚本,当然,博主不保证能够解密成功,也是拿出来参考参考而已。
最后,如果各位博友解密了脚本的话,欢迎发我一份。
#!/bin/sh ############################################################## # Used to unzip script files generated by shc # # Modified by cuterhei at 2014-02-26: 目录遍历 # # Created by cuterhei at 2014-02-25 : 创建 # ############################################################## shcd_help() { echo " Used to unzip script file generated by shc." echo " Usage:" echo " 0. shcd -h|?|-help ---- Current you see" echo " 1. shcd inputfile ---- 解压单个文件(输出文件inpfile.bat)" echo " 2. shcd inpfile outpfile ---- 解压单个文件(输出文件outpfile)" echo " 3. shcd -d ---- 深层目录遍历解压(输出文件*.bat)" echo " 4. shcd -a ---- 当前目录遍历解压(输出文件*.bat)" exit 0 } get_skip() { skip=0 while read skip_line do let "skip -= 1" skl_f="none" skipstrlist=$(echo $skip_line|tr "=" "\n") for xs in $skipstrlist; do if [ "$skl_f" = "none" ]; then if [ "$xs" = "skip" ]; then skl_f="found" else break; fi elif [ "$skl_f" = "found" ]; then skip=$xs; break else break fi done if [ "$skl_f" = "found" ] || [ $skip -le -2 ]; then break fi done < "$1" echo $skip } ucount=0 uncomp_shc() { skipline=$(get_skip $1) if [ "$skipline" = "" ] || [ $skipline -le 1 ]; then echo "%>_<% Skip flag not found: $1" else if tail -n +"$skipline" "$1" | gzip -cd > "$2"; then let "ucount += 1" echo "^_^ $ucount. Unzip $1<skip=$skipline> to $2" else echo "%>_<% Unzip $1<skip=$skipline> failed" fi fi } uncshc_dir() { echo "......Enter dir '$1' ......" for file in $1/* do if [ -f $file ]; then uncomp_shc "$file" "$file.bat" elif [ -d $file ] && [ "$2" = "-d" ]; then uncshc_dir "$file" "$2" fi done echo "......Leave dir '$1' ......" } # now start to work if [ "$#" = "0" ] || [ "$1" = "-?" ] || [ "$1" = "-h" ] || [ "$1" = "-help" ]; then shcd_help elif [ -f $1 ]; then if [ "$#" = "2" ]; then uncomp_shc "$1" "$2" else uncomp_shc "$1" "$1.bat" fi elif [ "$1" = "-d" ] || [ "$1" = "-a" ]; then uncshc_dir . $1 else echo "File $1 is not exist." fi echo "$ucount files are unzipped." exit # end of job
转载于:https://my.oschina.net/u/3367404/blog/3066799
Linux环境下脚本加密软件SHC的解密方法相关推荐
- 在Linux环境下mysql的root密码忘记解决方法(三种)
这篇文章主要介绍了在Linux环境下mysql的root密码忘记解决方法,详细的介绍了3种解决办法,具有一定的参考价值,有兴趣的可以了解一下. MySQL密码的恢复方法之一 1.首先确认服务器出于安全 ...
- window与linux环境下,java调用c语言的方法
windows环境下,java调用c语言的方法 1.环境 C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了 ...
- 在Linux环境下mysql的root密码忘记解决方法
在Linux环境下mysql的root密码忘记解决方法 参考文章: (1)在Linux环境下mysql的root密码忘记解决方法 (2)https://www.cnblogs.com/hgj123/p ...
- 网站截图环境 php,Linux环境下php实现给网站截图的方法
本文实例讲述了Linux环境下php实现给网站截图的方法.分享给大家供大家参考,具体如下: 第一步:下载wkhtmltopdf 复制代码 代码如下: [root@iZ94aawoublZ ~]# wg ...
- php网站挂linux,Linux环境下php实现给网站截图的方法
本文实例讲述了Linux环境下php实现给网站截图的方法.分享给大家供大家参考,具体如下: 第一步:下载wkhtmltopdf [root@iZ94aawoublZ ~]# wget http://d ...
- 在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 2.修改MySQL的登录设置: # vi /etc/my.c
在Linux环境下mysql的root密码忘记解决方法 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 2.修改MySQL的登录设置: # vi /etc/my.cnf ...
- linux下读写ntfs硬盘吗,Linux环境下实现NTFS分区完全读写的方法
可能大多数人对 Linux 访问 NTFS 的印象还是'只读,写会很危险',其实从 ntfsmount 开始,就能够安全的在 NTFS 上写文件,或者创建文件了.现在发布的是在 ntfsmount 基 ...
- linux python mysqldb安装包,linux环境下python中MySQLdb模块的安装方法
前言 最近开始学习python数据库编程后,在了解了基本概念,打算上手试验一下时,卡在了MYSQLdb包的安装上,折腾了半天才解决.记录一下我在linux中安装此包遇到的问题. 系统是ubuntn15 ...
- python 和linux环境下:音频处理变频变调的方法和框架
前戏--音乐基础 声音是靠波来传播的,区别任何的声音需要依据三个来区分:响度.音高和音色响度 音高:声音具有确定的音高,声音就可以使空气以笃定的方式运行.低音就是频率低. 一个乐音频率是另外一个乐音的 ...
最新文章
- PyTorch的十七个损失函数
- struts2.xml详解
- 克隆仓库时HTTPS和SSH方式的区别和使用
- paddlepaddle系列之三行代码从入门到精通
- TCP/IP的分层管理
- delete if only one note header
- arcgis vue 添加图层优化_行业 | ArcGIS制图技巧(超全)
- IDEA 正式版终于支持中文版和 JDK 直接下载了(太方便了)附介绍视频
- 减治法在查找算法中的应用(JAVA)--快速查找
- java+逆向工程怎么运行_MyBatis逆向工程的创建和使用
- 神操作!傅里叶变换取代Transformer自注意力层
- ASP.NET模拟其他用户进行关机
- 性格倔强的女人,在感情中很难幸福
- STM32F207和DM9161A的以太网实现方案
- 前后端分离之JWT(JSON Web Token)的使用
- 上网时间监控软件_网管软件有哪一些?哪家好?
- 【转】数据挖掘从入门到进阶
- win7触摸板怎么关闭_笔记本触控板怎么关闭 笔记本触控板关闭方法【详解】
- 跟朋友合伙创业股权怎么分配
- web开发中前端页面是如何跟后端服务器数据交互的