Pupy后门免杀:静态免杀与动态免杀技巧
概述
Pupy作为一款跨平台的后渗透框架,其免杀能力是安全测试人员关注的重点。本文将从静态免杀和动态免杀两个维度,详细介绍Pupy框架中实现免杀的核心技术和实操技巧,帮助安全测试人员更好地规避杀毒软件的检测。
静态免杀技术
代码混淆与编译优化
Pupy框架提供了专门的编译工具PupyCompile.py,通过多种手段对代码进行混淆处理,从而绕过静态特征检测。该工具主要实现了以下功能:
-
删除调试信息:通过AST语法树分析,移除代码中的
logging.debug调用和__debug__条件判断块,减少可被检测的特征。 -
字符串清空:自动清空文件头注释、
__doc__和__copyright__等字符串常量,避免敏感信息泄露。 -
字节码加密:对编译后的Python字节码进行异或加密处理,加密算法如下:
for i,x in enumerate(body):
output[i+offset] = (ord(x)^((2**((65535-i)%65535))%251))
使用方法示例:
python pupy/pupylib/PupyCompile.py -D -M payload.py
其中-D参数用于删除文档字符串,-M参数用于移除__main__函数入口。
路径映射与文件隐藏
在Linux平台下,Pupy通过ld_hooks.c实现动态链接器钩子,重定向文件操作API,实现文件路径的动态映射,从而隐藏恶意文件的真实路径。核心实现如下:
#define define_mapped_path(mapped_path, path) \
char buf[PATH_MAX] = {}; \
const char *mapped_path = __pathmap_callback? \
__pathmap_callback(path, buf, sizeof(buf)) : path
该技术通过钩子函数拦截open、fopen、stat等系统调用,将敏感路径映射为无害路径,有效规避文件系统监控。
动态免杀技术
内存加载技术
Pupy在Windows平台下使用MemoryModule.c实现内存中加载DLL,避免将恶意代码写入磁盘,从而绕过文件系统检测。该技术的核心是解析PE文件格式,在内存中完成重定位和导入表解析,直接将DLL加载到进程地址空间。
系统调用钩子
在Linux系统中,Pupy通过ld_hooks.c实现对系统调用的钩子,主要hook了以下文件操作函数:
open/open64fopen/fopen64__lxstat/__xstatopenat/openat64
通过这些钩子,Pupy可以实现文件操作的重定向、敏感路径的隐藏,以及规避动态行为检测。
综合免杀策略
编译参数优化
建议使用以下命令编译Pupy payload,以获得最佳免杀效果:
python pupy/pupygen.py -O -o payload.exe windows x64
其中-O参数表示开启优化模式,会自动应用代码混淆、字符串加密等静态免杀技术。
行为特征控制
Pupy提供了多种模块来控制恶意行为特征,主要包括:
- daemonize.py:实现进程后台运行,隐藏窗口
- hide_argv.py:清除命令行参数,避免敏感信息泄露
- persistence.py:提供多种持久化方法,避免频繁启动被检测
总结
Pupy框架通过代码混淆、内存加载、系统调用钩子等多种技术手段,实现了较为完善的免杀能力。安全测试人员在使用过程中,应根据目标环境特点,灵活组合各种免杀技术,以达到最佳的渗透测试效果。同时,也需要关注最新的杀毒软件检测技术,不断更新免杀策略。
Pupy框架的免杀技术实现主要集中在以下目录:
- 编译混淆:pupy/pupylib/
- Linux平台钩子:client/sources-linux/
- Windows内存加载:client/sources/
- 脚本免杀模块:pupy/scriptlets/
通过深入研究这些代码,安全测试人员可以进一步理解免杀技术的实现原理,提升自己的安全测试能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



