Skip to content

Latest commit

 

History

History
195 lines (112 loc) · 6.17 KB

说明.md

File metadata and controls

195 lines (112 loc) · 6.17 KB

shellc

脚本语言转换为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 选项。

脚本转C代码的工具可以通过以下几种途径获取到源码:

  1. ps -ef 命令就能看到源码,如shc缺省选项生成的

  2. 通过伪造解释器获取到源代码,如将脚本解释器改成echo

  3. 对于非静态编译生成的代码,通过动态加载拦截read 函数获取

  4. 内存转储等方式获取到脚本源代码,kill -SIGSEGV

  5. 通过文件描述符多次读取/proc/<pid>/fd/*获取到源码

  6. 通过读取内存文件或strace方式获取源代码

shellc1.8版已解决1-3点问题,4-6点目前尚未完全解决,若是脚本语言是bash, 建议使用xbashxbash可以解决4-6点问题。

1.0及以上版本除了支持shell外,还支持其他脚本语言,可以完全替代shc。1.6版增加防伪造解释器或内存转储方式获取得脚本源代码功能。1.8版解决通过文件描述符获取到源码,1.8版不支持ruby, ruby需使用1.7版。 目前,该程序已在AIXUNIXLinux 环境中具有实际应用。建议对编译后的程序进行全面测试,以防止生产故障。

使用手册

  • 生成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: 执行脚本的命令,如 shperlpythonnodeRscriptphp 等。

    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值支持BASHFISHZSHPERLPYTHONJAVASCRIPTLUARUBY修复。

    除了内置的修复类型,还可使用外部文件修复参数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

    初始版本