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

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

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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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

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

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

buf = [OFFSET <SHELLCODE>]

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

push xxx
ret

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

00401000 CALL 10041004
00401005 MOV eax, ebx


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


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

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


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

建议采用汇编IDE调试shellcode。

这样不会因为编译器就影响你写的代码了。
2009-7-20 20:32
0
游客
登录 | 注册 方可回帖
返回
//