1、Skill 简介
这是一个对 shell 脚本进行代码混淆保护的 Skill,能将 shell 脚本源码包装成 gzip+base64 乱码格式防止普通人随意看懂,同时可生成 只执行一次 或**自定义任意循环间隔时间(秒)**的 C 语言调用器。适合需要保护 shell 业务脚本源码、又需要保持跨架构兼容性的开发者使用。
2、使用场景
为什么想做它? 我有几个数据处理的 shell 脚本放到生产服务器上定时跑,不希望登录服务器的人随意 cat 就能看懂脚本逻辑,也不想用太重的方式(比如 shc 编译成二进制后跨架构不兼容)。
之前遇到了什么麻烦?
-
直接放源码:任何人都能看懂
-
shc 编译成二进制:WSL 编译的 x86_64 二进制不能放到 ARM 服务器运行
-
脚本需要支持:单次执行 + 定时循环执行(原脚本里有 while true + sleep ,想把循环逻辑抽出来放到 C 层统一管理)
做出来之后能省掉哪些动作? -
不用再担心脚本被普通人看懂(gzip+base64 包装后打开只有一大串乱码)
-
不用再手写 C 调用器模板,三个命令自动生成:
- 生成混淆 shell
- 生成"只执行一次就退出"的 C 源码
- 生成"自定义任意秒数循环"的 C 源码
3、创作过程
核心是 confuse_script.py Python 工具的开发 + SKILL.md 规范文档:
第一步:确定三种命令模式
用 if name == ‘main’ 分支区分三种 CLI 入口:
第二步:C 模板用 .replace() 替代旧式 % 格式化
因为 C 源码里有大量 printf(“%s”, …) 的 % 符号,用旧式 Python %s 格式化会冲突,改成:
第三步:Skill 文档编写
按规范写 frontmatter,description 里必须包含 功能说明 + 触发条件说明 :
最后在文档末尾加快速参考表格和 Skill 调用话术,方便以后复用。
4、使用步骤 方式一:CLI 命令行直接调用(推荐)
Skill 目录下的 confuse_script.py 可直接独立运行。
方式二:对话中唤醒 Skill
只需说: “使用 shell-obfuscator skill 保护我的脚本”
系统就会自动加载本 Skill 的能力上下文。
5、效果展示 保护效果对比
文件类型 cat file.sh 效果 保护前 (源码) 代码一目了然:
#!/bin/bash
function scan_unit(){
for path in ${paths[1]}; do
…
done
} 保护后 (混淆) 只有乱码:
#!/bin/bash
`a=$(echo "H4sIAAAAAAAAA/…省略1000+字符…/+CMD
C 调用器两种模式效果
RUN ONCE 模式(只执行一次):
LOOP 模式(循环):
int loop_interval = 600; // 可自定义秒数
while (1) {
system(script_path);
sleep(loop_interval); // 循环睡眠
}
6、Skill 链接
- 本地 Skill 位置: .trae/skills/shell-obfuscator/
- SKILL.md
- confuse_script.py
- GitHub 仓库:(你上传后可补充)
7、总结与思考
效率提升:
-
生成混淆 shell:1 条命令,5 秒搞定
-
生成 C 循环调用器:1 条命令,不用再复制粘贴修改模板代码
-
跨架构兼容性:混淆后的脚本还是文本 shell,任何架构 Linux 直接跑
目前最满意的地方: -
三种 CLI 模式参数清晰, python3 confuse_script.py 不带参数直接打印帮助示例
-
C 代码里的循环秒数是变量,不是硬编码数字,一目了然
-
Skill description 触发条件写得比较完整,以后想用只要说"使用 shell-obfuscator skill" 就行
后续还想怎么优化: -
增加 --gzexe 模式:调用系统 gzexe 做另一种保护方式对比
-
增加 shell 变量名/函数名混淆(虽然 eval 包装已经足够应付普通人)
-
增加 C 源码静态编译说明与脚本示例
希望别人怎么体验或给你什么建议: 欢迎下载体验!你有 shell 脚本保护的需求吗?平时除了 shc、gzexe、base64 包装,还有什么别的保护方式?评论区一起交流吧
【shell-obfuscator地址】hongwei-skills: 我做的一些skill