脚本语言转换为C代码的工具
shellc
开源历时约一年,发布版本约20次,但因存在技术上无法解决的问题,今后不再发布新版本。如果对代码保护要求不高,可以使用此工具,如果有较高的保护要求,切勿使用此类工具。采用管道方式传输给解释器的加密方式,技术上无法解决通过strace
获取源代码,源码破解方法参见decrypt。发布破解方法是希望有人能解决破解工具中存在的漏洞,同时也告知使用shellc
此类工具的风险。如果脚本语言是bash
, 请使用xbash工具。
cc shellc.c -O2 -o shellc
shellc sh example.sh
cc example.sh.c -O2 -o example
生成的C代码是 example.sh.c
,即原始文件名后加.c
。
对于需要源码代码保护的程序,建议在编译使用静态编译和strip
命令删除符号表,且启用 -i 或 -a 选项。
-
ps -ef
命令就能看到源码,如shc
缺省选项生成的 -
通过伪造解释器获取到源代码,如将脚本解释器改成
echo
-
对于非静态编译生成的代码,通过动态加载拦截
read
函数获取 -
内存转储等方式获取到脚本源代码,
kill -SIGSEGV
-
通过文件描述符多次读取
/proc/<pid>/fd/*
获取到源码 -
通过读取内存文件或strace方式获取源代码
shellc
1.8版已解决1-3点问题,4-6点目前尚未完全解决,若是脚本语言是bash
, 建议使用xbash
,xbash
可以解决4-6点问题。
1.0及以上版本除了支持shell外,还支持其他脚本语言,可以完全替代shc
。1.6版增加防伪造解释器或内存转储方式获取得脚本源代码功能。1.8版解决通过文件描述符获取到源码,1.8版不支持ruby
, ruby
需使用1.7版。
目前,该程序已在AIX
、UNIX
、 Linux
环境中具有实际应用。建议对编译后的程序进行全面测试,以防止生产故障。
-
生成C代码命令
shellc command inputfile [-t] [-a] [-x] [-f fix-format] [-e fix-file] [-p parameter] [-i interpreter] [-b 8|16|32|64] [-d YYYYMMDD] [-m message]
command: 执行脚本的命令,如
sh
、perl
、python
、node
、Rscript
、php
等。inputfile: 脚本语言文件名
-t 选项: 对于不支持反调试功能的系统,生成的代码需该选项。
-x 选项: 新版xbash已变为纯粹的代码转换工具, -x已无效。
-a 选项: 防止伪造解释器,要求运行环境的解释器与编译环境的解释器MD5值相同。
-f 选项: 修复参数0值。
-e 选项: 使用外部文件修复参数0值。
-p 选项: 命令参数,如
busybox shell
使用shellc busybox example.sh -p sh
-b 选项: 操作系统位数设置
-i 选项: 内置解释器,
interpreter
是运行环境对应的解释器文件名, 如/usr/bin/sh
, 也可使用自定义文件名, 如/tmp/myshell
, 如果运行时环境中没有相应的解释器,则解释器文件将在运行时自动生成。内置解释器具有防伪造解释器功能。-d 选项: 程序失效日期,格式为YYYYMMDD
-m 选项: 程序失效信息提示。
-
参数修复
参数0值支持
BASH
、FISH
、ZSH
、PERL
、PYTHON
、JAVASCRIPT
、LUA
、RUBY
修复。除了内置的修复类型,还可使用外部文件修复参数0。文件格式:
?
表示参数0值,换行必须明确使用\n
,双引号需加转义符\
。参考test/fix.txt
。
0.3及以上版本增加了反调试功能,并且测试了以下工具反调试功能
操作系统 | 调试工具 | 是否支持 |
---|---|---|
AIX 7.1 | dbx sdb | 支持 |
SCO UNIX 5.0.6 | dbx sdb adb | 支持 |
Red Hat Linux7.8 | gdb | 支持 |
CentOS Linux6.4 | gdb | 支持 |
debian 12.4.0 | gdb | 支持 |
Fedora 39 | gdb lldb | 支持 |
FreeBSD 14.0 | gdb | 支持 |
openSUSE Leap 15.5 | gdb | 支持 |
OracleLinux R9 | gdb | 支持 |
ubuntu 22.04.3 | gdb lldb | 支持 |
openEuler | gdb | 支持 |
Debian | gdb | 支持 |
NetBSD 10.0 | gdb | 不支持 |
DragonFly 6.4 | gdb | 不支持 |
macOS 13 | lldb | 不支持 |
-
v1.8.2 2024-11-25
修复问题#27
-
v1.8.1 2024-11-11
修复特殊场景内存检测错误
-
v1.8 2024-11-10
通用模式和安全模式合并
增加对xbash的支持
防调试使用ptrace方式
增加程序失效功能
-
v1.7 2024-09-18
修复问题#18
安全模式SHELL人机交互支持不修改源脚本程序
增加安全模式别名支持
-
v1.6.2 2024-09-01
修复内存溢出
-
v1.6.1 2024-09-01
修复数组长度为空
-
v1.6 2024-09-01
增加内置解释器功能
增加防伪造解释器功能
增加防内存转储功能
-
v1.5 2024-08-25
修复安全模式退出值不正确问题
-
v1.4 2024-08-17
修复内存泄露
-
v1.3 2024-06-28
增加命令参数支持
-
v1.2 2024-06-22
增加操作系统位数设置功能
-
v1.1 2024-06-12
扩充安全模式下功能
-
v1.02 2024-06-06
删除生代码中的宏定义便于专业工具生成更复杂的混淆代码
-
v1.01 2024-06-02
删除对FreeBSD特殊处理
-
v1.0 2024-06-01
增加非SHELL脚本语言支持
增加参数0修复功能
删除BSD和LINUX变种系统线程要求
-
v0.3 2023-12-25
增加反调试功能
修复在部分系统下编译告警
-
v0.21 2023-12-13
修复在
zsh
环境下程序BUG -
v0.2 2023-12-12
数据结构由结构体改为字符串数组减少大文件编译时间
增加代码字符加密功能
-
v0.1 2023-12-01
初始版本