Xencrypt如何绕过AMSI检测?
Xencrypt:一款基于PowerShell脚本实现的反病毒绕过工具
在Windows安全领域,AMSI(Antimalware Scan Interface)像一道矗立在PowerShell门口的安检闸机,它的职责是拦截那些试图蒙混过关的恶意脚本。然而,Xencrypt的出现,就像为攻击者提供了一套精心设计的伪装术,让危险的载荷得以“体面”地通过检查。它的核心手法,并非正面硬闯,而是一种基于混淆与加密的深度伪装。

理解AMSI的工作原理
要明白Xencrypt如何绕过,得先知道AMSI是怎么工作的。AMSI本身不提供检测引擎,它更像一个标准化的“采样口”。当PowerShell运行时,AMSI会将被执行的脚本内容(包括从内存中动态加载的)采样并传递给已注册的反恶意软件引擎进行分析。关键在于,它分析的是脚本在执行前的明文或可解释的代码。如果脚本在运行时才解密出真正的恶意代码,AMSI在采样阶段看到的就只是一堆无害的加密数据或混乱的指令。
Xencrypt的“三步伪装法”
- 深度加密与压缩:Xencrypt使用AES算法对原始PowerShell脚本(如经典的Mimikatz)进行加密,随后再用Gzip或DEFLATE压缩。这直接改变了脚本的静态特征,使得基于签名的检测完全失效。AMSI采样到的,只是一个包含加密负载和一小段解密加载器的“壳”。
- 运行时动态重构:生成的脚本内部,真正的恶意代码以加密字符串的形式存在。脚本执行时,内置的加载器会先在内存中解密、解压这些数据,然后通过如
Invoke-Expression或反射加载等方式动态执行。这个过程完全发生在AMSI的采样之后,恶意行为在运行时才“现出原形”,完美避开了静态扫描。 - 多态混淆与随机化:这可能是最让防御者头疼的一环。Xencrypt每次加密都会随机生成变量名、调整代码语句顺序,甚至随机选择加密和压缩的组合方式。这意味着,即使是同一份恶意脚本,每次加密产生的“马甲”都截然不同。那些依赖模式匹配或简单启发式规则的AMSI集成引擎,面对这种“千变万化”的样本,很难建立有效的检测模型。
递归加密:对抗动态分析的“时间陷阱”
Xencrypt还有一个杀手锏——递归分层加密(通过-Iterations参数实现)。你可以让脚本像俄罗斯套娃一样,被一层层加密上百次。想象一下,动态分析引擎(沙箱)为了检测这个脚本,必须模拟执行它,并一层层解开所有加密。这需要消耗大量的CPU时间和内存资源。
大多数沙箱为了控制成本和提高效率,都设定了分析超时时间(比如30秒或1分钟)。当Xencrypt的递归层数足够多时,解密过程会故意“拖延时间”,导致沙箱在触发真正的恶意负载前就已超时退出,从而将其判定为“无害”。这本质上是一场精心设计的资源消耗战。
对防御的启示与挑战
Xencrypt的成功绕过,暴露了传统签名检测和简单行为分析在面对高级混淆时的无力感。它迫使蓝队必须将检测重点从静态特征转向更复杂的维度:监控PowerShell进程内存中的异常行为(如大量解密操作)、检测反射加载等高风险API的调用链、建立基于机器学习的异常脚本行为模型。
然而,攻防的天平总是在摇晃。就在安全厂商增强了对这类加密混淆工具的检测后,攻击者社区可能又在开发下一代绕过AMSI的技术,比如直接修补内存中的AMSI上下文,或者寻找AMSI实现中的逻辑漏洞。这场围绕PowerShell脚本可视性的猫鼠游戏,远未到终局。

参与讨论
这工具现在还能用吗?听说微软打了补丁
前几天搞红队演练用过,确实能绕,但得调参数
递归加密那块太狠了,沙箱直接卡崩
AMSI本来就不该只靠静态扫描,早该上行为分析了
感觉PowerShell迟早要被禁用,现在太危险了
我试了v3版本,-Iterations设到50就超时了,爽
这不就是加密壳嘛,跟病毒早年玩法一模一样
内存解密的时候EDR不会告警吗?求大佬解答
话说这和Invoke-Obfuscation比哪个更顶?
又是脱壳又是解密,蓝队看到这种脚本头大了