You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何消除Windows Shellcode中的空字节——以mov ebx, fs:30h为例

去除mov ebx, fs:30h Shellcode中的空字节方法

原指令mov ebx, fs:30h对应的机器码是648b1d30000000,其中包含三个连续的空字节(000000),这会导致Shellcode被字符串处理函数截断,无法正常执行。以下是几种可行的无空字节替代方案:

方案1:寄存器间接寻址(用cl构造偏移)

xor ecx, ecx   ; 清空ecx寄存器
mov cl, 30h    ; 将30h加载到cl(仅占用1字节,无高位空字节)
mov ebx, fs:[ecx]  ; 通过ecx间接访问fs段的30h地址

对应的机器码:31c9b130648b19,无空字节。

方案2:使用lea指令结合16位立即数

xor eax, eax   ; 清空eax寄存器
mov ax, 30h    ; 以16位立即数加载30h到ax,避免32位立即数的空字节
lea ebx, fs:[eax]  ; 计算fs段中eax指向的地址并赋值给ebx

对应的机器码:31c066b83000648d18,无空字节。

方案3:加法构造偏移地址

xor edx, edx   ; 清空edx寄存器
add dl, 30h    ; 通过加法将30h存入dl
mov ebx, fs:[edx]  ; 通过edx间接访问fs段的30h地址

对应的机器码:31d280c230648b1a,无空字节。

这些方案的核心思路都是避免直接使用32位立即数30000000,转而通过寄存器构造偏移地址,从而消除机器码中的空字节。

内容的提问来源于stack exchange,提问作者R-Rothrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 19:44:52