尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

解密OWASP ZSC六大编码算法:XOR/ADD/SUB/INC/DEC原理与绕过思路

解密OWASP ZSC六大编码算法:XOR/ADD/SUB/INC/DEC原理与绕过思路 解密OWASP ZSC六大编码算法XOR/ADD/SUB/INC/DEC原理与绕过思路【免费下载链接】ZSCOWASP ZSC - Shellcode/Obfuscate Code Generator https://www.secologist.com/项目地址: https://gitcode.com/gh_mirrors/zs/ZSCOWASP ZSC 是一款开源的 Shellcode 生成与混淆编码工具常被安全研究人员用来研究恶意代码免杀与编码绕过技术。它的核心能力之一就是把一段普通的 Linux x86 汇编 Shellcode改写成带有 XOR、ADD、SUB、INC、DEC 运算的变形代码从而隐藏特征码、绕过来自杀毒软件与入侵检测系统的静态查杀。本文面向刚接触 Shellcode 编码的新手用通俗的语言拆解 OWASP ZSC 最常用的六大编码算法XOR 随机密钥、XOR 自定义密钥、ADD 加法、SUB 减法、INC 递增、DEC 递减并解释它们背后的绕过思路。为什么需要给 Shellcode 编码先理解特征码查杀在进入算法之前先想清楚一个关键问题杀毒软件凭什么能认出 Shellcode答案通常是特征码。一段经典的/bin/sh执行代码反汇编出来就是\x6a\x0b\x58\x99\x52\x68...这串固定字节。杀软数据库里存着它的指纹扫描时一比对就命中。OWASP ZSC 的编码器干的活就是把这段一眼可辨的字节流变成一串运行时才还原的指令组合。它用到的核心思想只有一个不要在代码里直接写真实数值而是把一个数拆成两个数运行时通过算术/逻辑运算还原。这样磁盘上的字节流完全变了样静态特征码自然失效。六大编码算法速览一张表看懂差异编码算法源码文件还原运算密钥来源特点XOR 随机密钥xor_random.py异或每次运行随机生成一次一密抗特征分析XOR 自定义密钥xor_yourvalue.py异或用户指定可复现便于测试ADD 加法编码add_random.py相加随机拆分指令温和不触发异常SUB 减法编码sub_random.py相减随机拆分配合 neg 处理负数INC 递增编码inc_timesyouwant.py逐次加 1次数由用户指定指令序列冗长迷惑性高DEC 递减编码dec_timesyouwant.py逐次减 1次数由用户指定同上逆向思维另外还有 mix_all.py——它每次运行随机挑一种算法相当于编码器的俄罗斯轮盘进一步增加随机性。算法一XOR 异或编码——最经典的万能还原术异或XOR是绕过技术里的老朋友。它的数学性质非常漂亮A ^ B C反过来C ^ B A同一个数异或两次等于什么都没做OWASP ZSC 的 XOR 编码正是利用这个性质。以 Linux x86 的chmod任务为例真实值0x0f会被拆成两个随机数汇编层面变成push $0x1d ; 随机数 A pop %eax push $0x12 ; 随机数 B pop %ebx xor %eax,%ebx ; A ^ B 0x0f push %ebx两个随机数每一行代码都是重新生成的所以每次生成的 Shellcode 字节都不一样。更妙的是代码中还专门避免了00字节的出现——因为很多字符串处理函数比如strcpy会把00当成字符串结尾Shellcode 里出现它往往直接导致执行失败。 想深入研读的同学直接看这两个源码lib/encoder/linux_x86/xor_random.pylib/encoder/linux_x86/xor_yourvalue.py算法二ADD 加法编码——把数值拆开再拼回ADD 编码的思路更朴素假如真实值是0x0f就随机拆成0x1d和0x12让0x1d - 0x12 0x0f然后运行时用加法还原push $0x1d pop %eax push $0x12 pop %ebx add %eax,%ebx ; 相加还原 push %ebx注意源码里拆数时用的是减法来求差值最终用add拼回去。当差值出现负数时还会引入neg指令取反兜底——这个细节说明 ZSC 在边界情况处理上相当用心。 源码参考lib/encoder/linux_x86/add_random.py算法三SUB 减法编码——与 ADD 恰好相反SUB 编码是 ADD 的镜像把真实值拆成两个随机数后运行时用减法还原。对应关系是较大数 - 较小数 真实值所以拆数时用的是加法。push $0x2a ; 随机数 pop %eax push $0x1b ; 另一个随机数 pop %ebx sub %eax,%ebx ; 相减还原 push %ebx代码里同样做了00字节过滤并且会检查结果是否为负数保证生成的指令序列始终合法可执行。 源码参考lib/encoder/linux_x86/sub_random.py算法四与算法五INC / DEC 递增递减——用次数说话如果觉得加减乘除太直白OWASP ZSC 还准备了更有迷惑性的 INC 和 DEC 编码。它们的思路是INC先把真实值减 N 再压栈运行时连续执行 N 次inc1还原DEC先把真实值加 N 再压栈运行时连续执行 N 次dec-1还原N 就是编码器名字里的timesyouwant你想要多少次比如inc_100表示连续自增 100 次。汇编展开后是一长串密集的递增指令push $0xffffff91 ; 预先减好的值 pop %eax inc %eax ; ×100 次 inc %eax ... inc %eax push %eax这种做法的杀伤力在于指令序列极其冗长、机械重复没有经验的逆向工程师一眼看过去只会觉得这是什么鬼代码特征提取难度也大幅上升。 源码参考lib/encoder/linux_x86/inc_timesyouwant.pylib/encoder/linux_x86/dec_timesyouwant.py算法六mix_all 混合编码——随机挑一种防模板指纹细心的读者可能发现如果每次都固定用 ADD 编码那么虽然字节变了但ADD 模板本身还是可能被安全厂商做成新特征。怎么办OWASP ZSC 的答案是 mix_all.py它内部维护了add_random、sub_random、xor_random、inc_timesyouwant、dec_timesyouwant五种算法的候选池每次运行用random.choice随机挑一种。这样同一份原始 Shellcode每次产出的编码风格都不同彻底打乱模板指纹。除了 x86还有哪些编码方向OWASP ZSC 的价值不止于 Linux x86。它的编码器还覆盖了Windows x86 / x86_64目录 lib/encoder/windows_x86/macOS (OSX x86)目录 lib/encoder/osx_x86/脚本语言JavaScript、Python、PHP、Ruby、Perl 的混淆比如大名鼎鼎的 jsfuck.py 可以把任意 JavaScript 转成只有[]()!六个字符的火星文不同平台的指令集不同但拆分—运算—还原的编码哲学完全一致值得触类旁通。如何快速上手 OWASP ZSC想亲手实验这些编码算法最快的方式是克隆项目本地运行git clone https://gitcode.com/gh_mirrors/zs/ZSC cd ZSC python zsc.py启动后进入交互式菜单依次选择系统类型如 Linux x86、生成任务如chmod、编码算法如xor_random工具就会输出一段全新的、编码后的 Shellcode并支持直接编译成可执行文件验证效果。官方使用文档见 doc/README.md。绕过思路总结四个关键点回顾六大算法可以提炼出四条通用的绕过思路这也是任何 Shellcode 编码器设计的底层逻辑消除固定特征真实字节永不直接出现运行时才在寄存器里还原。规避坏字符全程过滤00等危险字节保证 Shellcode 在各种环境下都能执行。引入随机性密钥、拆分数值、编码方式全部随机化让同源不同形样本库难以归类。增加分析成本INC/DEC 的重复指令、混合编码的随机模板都让静态分析和人工逆向的代价大幅上升。写在最后安全研究的边界最后必须提醒一句OWASP ZSC 是面向安全研究的开源工具其官方文档明确声明用于挑战杀毒技术、研究新型加密方法、保护敏感开源文件贡献者与 OWASP 基金会不对任何非法使用负责。理解编码原理、搭建检测对抗实验、提升防御能力才是学习这套算法的正确打开方式——毕竟只有真正读懂攻击者的变形手法才能写出更坚固的检测规则。【免费下载链接】ZSCOWASP ZSC - Shellcode/Obfuscate Code Generator https://www.secologist.com/项目地址: https://gitcode.com/gh_mirrors/zs/ZSC创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表