首页
社区
课程
招聘
[求助]ShellCode中执行WinExec()的一个小问题
发表于: 2010-7-30 11:22 5263

[求助]ShellCode中执行WinExec()的一个小问题

2010-7-30 11:22
5263
在执行shellcode的过程,执行了WinExec()函数。部分代码如下:

CPU Disasm
Address   Hex dump          Command                                  Comments
……
CPU Disasm
Address   Hex dump          Command                                  Comments
05FE0200    6A 00           PUSH 0
05FE0202    52              PUSH EDX                                     ;指向exe的路径
05FE0203    FF57 EC         CALL DWORD PTR DS:[EDI-14]  ;WinExec()函数
05FE0206    83F8 1F         CMP EAX,1F
05FE0209    0F86 83000000   JBE 05FE0292
……

函数执行完成以后,exe正确运行。但是我发现edx的值居然改了。

注意:  edx——原来指向需要运行的exe的路径
              
                 ——现在指向ntdll.KiFastSystemCallRe

edx只是作为一个输入的压栈参数啊,为什么执行WinExec后会发生改变呢?

ntdll.KiFastSystemCallRe是什么东西?不大懂呃

希望高手指点。谢谢。

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 3171
活跃值: (76)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
2
你按F7进去就知道了,寄存器是公用的就那么几个 不能保证你所使用的寄存器一直被谁独霸着,着就是为啥要push和pop的原因了
2010-7-30 12:44
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
eax ecx edx 这3个寄存器是不保护的, 调用api之前自己push/pop

esp ebp 不会变

ebx esi edi 这三个是保护的
2010-7-30 14:25
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
明白了,谢谢哥哥。

另外,KiFastSystemCallRet是什么意思?
2010-7-30 14:30
0
雪    币: 201
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
804de8bc 83c208          add     edx,8

KiFastSystemCall里做了一些操作,如果只关心R3的话,可以忽略。
2010-7-30 14:39
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢哥哥啦。
2010-7-30 20:37
0
游客
登录 | 注册 方可回帖
返回
//