# shellc **Repository Path**: jking/shellc ## Basic Information - **Project Name**: shellc - **Description**: shell脚本编译成可执行程序 - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2024-03-20 - **Last Updated**: 2024-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # shellc **shell脚本转换为c代码的工具** ### 安装 ```bash cc -s shellc.c -O2 -o shellc ``` ### 编译shell脚本并生成可执行程序 ```bash shellc example.sh cc -s example.sh.c -O2 -o example -lpthread ``` 生成的C代码是 ```example.sh.c```,即原始文件名后加```.c```。 对于生产环境中使用的程序,建议在编译时添加参数```-s```, 以删除可执行程序中的符号表,增加了反汇编和逆向工程的难度。 本人试用了可以将shell脚本编译成可执行程序的工具```shc``` 和 ```shellcrypt```,存在的主要问题是: - ```shc``` 实际调用的是```sh -c``` 命令,通过```ps -ef``` 命令就能看到源码。shell脚本长度不能超过ARG_MAX值。 - ```shellcrypt```不支持外部参数输入,加密算法相对简单。生成的可执行程序可以通过与```0x000C```进行异或解密来获得源代码。 shellc除了解决上述这两工具存在的问题外,还增加了代码混淆、随机生成有效字符位置计算函数、随机字符加密、反调试等增加反汇编逆向复杂度。 该程序适用于可定义函数语法的shell,如```ksh```、```bsh```、```zsh```等,不支持```csh```(```csh```不支持函数定义)。 目前,该程序已在```AIX```、```UNIX```、 ```Linux``` 环境中具有实际应用。建议对编译后的程序进行全面测试,以防止生产故障。 **如果shell脚本涉及人机交互,需对原shell脚本做一些修改,``` read input ``` 需改为 ``` read input