首页
社区
课程
招聘
[求助][原创]怎样调试shellcode
2009-3-17 10:07 4228

[求助][原创]怎样调试shellcode

2009-3-17 10:07
4228
请问一下,《0 day》那本书中的装载shellcode的程序
void main()
{
        _asm
        {
                lea     eax,buf
                push    eax
                ret
        }
}
是什么原理啊?
为什么ret之后,跳不到我写的shellcode的地方喃?

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (5)
雪    币: 235
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
evilight 1 2009-3-17 10:16
2
0
ret之后,应该会把返回地址退栈,而,此时的返回地址看程序应该是想把刚才压入栈的
eax里的地址作为返回地址吧,这样理论上应该就运行到你的buf里shellcode了。

不过也许现在保护措施多了吧,不允许运行数据段的代码?

不清楚了。等大大们来详细解答
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
soshort 2009-3-17 10:20
3
0
开了DEP的话会弹框。。装了卡巴会弹框。。不过几率貌似很低

buf = [OFFSET <SHELLCODE>]

跳不到的话尝试修改lea指令为MOV指令

push xxx
ret

这句相当于jmp xxx,记住就OK了
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
soshort 2009-3-17 10:55
4
0
诶。。还是有必要再说一下过程。。

00401000 CALL 10041004
00401005 MOV eax, ebx


这个CALL指令相当于
PUSH 401005
JMP 10041004


假设当前栈顶的数据是
0012FF28 00401005

那么RET指令就相当于
POP eax //00401005入EAX
JMP eax //跳到401005


这样就好理解了吧。。诶。。昨天没睡好觉,有点晕。。再搞不懂的话找牛们再解释下吧
雪    币: 192
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dcbeyond 2009-7-20 17:19
5
0
调试时一定要注意版本、调试环境,否则就有可能跟书中所描写的不一样
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
北极狐狸 7 2009-7-20 20:32
6
0
注意编译环境。

建议采用汇编IDE调试shellcode。

这样不会因为编译器就影响你写的代码了。
游客
登录 | 注册 方可回帖
返回