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

WinExec触发EXCEPTION_ACCESS_VIOLATION:修改Shellcode运行notepad.exe报错

问题分析与修复方案

问题原因

你替换calc.exe为notepad.exe时,采用两次push r9构造字符串,虽RCX指向了正确的字符串起始地址,但存在以下问题:

  1. 两次8字节push的栈布局与原代码4字节push逻辑不兼容,间接影响了字符串的可访问性;
  2. 栈中字符串的内存布局因8字节push出现未预期的对齐问题,导致WinExec访问时触发内存异常;
  3. 生成EXE文件的栈环境与纯Shellcode注入后的环境存在差异,进一步放大了内存访问问题。

修复方案

方案1:调整字符串构造方式

将两次push r9替换为多段4字节push,确保字符串内存布局稳定且符合C风格null终止要求:

; 替换原notepad.exe构造代码
push 0x00657865          ; 压入 'exe\0'(小端序)
push 0x2e646170          ; 压入 'pad.'(小端序)
push 0x65746f6e          ; 压入 'note'(小端序)
push rsp
pop rcx                  ; RCX指向字符串起始地址

方案2:生成纯Shellcode而非EXE

原代码为纯Shellcode设计,生成EXE会引入额外栈环境干扰,改用以下命令生成二进制Shellcode:

nasm -fbin w64-exec-calc-shellcode.asm -o shellcode.bin

通过Shellcode注入工具将其注入目标进程运行,避免EXE环境的影响。

方案3:显式确保栈对齐(可选)

在调用WinExec前强制栈16字节对齐,严格符合x64调用约定:

; 在CDQ之后、CALL RDI之前添加
and rsp, -16             ; 强制栈16字节对齐

验证方法

修复后重新汇编,若用EXE方式需确保链接命令正确;若用纯Shellcode,注入到任意64位进程中,应能正常启动notepad.exe。

内容的提问来源于stack exchange,提问作者FAMO4S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 04:09:51