首页
社区
课程
招聘
急,菜鸟求援。。。
发表于: 2011-5-27 08:25 2982

急,菜鸟求援。。。

2011-5-27 08:25
2982
下面一段程序:
lea     ecx, dword ptr [esp+12C0]        //[esp+12C0]=12E408,[12E408]=0
call    006A78D0                        //子程序在下边
push    edi                        //edi=0
lea     ecx, dword ptr [esp+12C4]
push    0A
push    ecx
mov     dword ptr [esp+12CE], eax
add     esp, 0C
mov     ecx, dword ptr [C0980C]
mov     edx, dword ptr [ecx]
push    edi
push    0A
lea     eax, dword ptr [esp+12C8]
push    eax
call    dword ptr [edx+10]

其中:
006A78D0  /$  8BC1          mov     eax, ecx
006A78D2  |.  C600 16       mov     byte ptr [eax], 16
006A78D5  |.  C640 01 60    mov     byte ptr [eax+1], 60
006A78D9  |.  C740 06 00000>mov     dword ptr [eax+6], 0
006A78E0  \.  C3            retn
***************************************************
我写的注入程序:
lea     ecx, dword ptr [esp]
mov     byte ptr [esp], 16
mov     byte ptr [esp+1], 60
mov     dword ptr [esp+6], 0
mov     edi, 0
push    edi
lea     ecx, dword ptr [esp+04]   //应该走是到这里,提示该内存不可read
push    0A
push    ecx
mov     dword ptr [esp+0E], eax   //该内存不可写?
add     esp, 0C
mov     ecx, dword ptr [00C0980C]
mov     edx, dword ptr [ecx]
push    edi
push    0A
lea     eax, dword ptr [esp+8]
push    eax
call    dword ptr [edx+10]

可以注入运行,能得到结果,只是程序崩溃,我也崩溃ing。。。。应该怎么写???

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
子调用
mov     eax, ecx
mov     byte ptr [eax], 16
mov     byte ptr [eax+1], 60
mov     dword ptr [eax+6], 0
retn
其实是隐式返回了值,改变了eax值,返回eax
所以原程序mov     dword ptr [esp+12CE], eax是正确的

而你的mov     dword ptr [esp+0E], eax   ;eax都没有初始化,怎么会正确啊?
2011-5-28 03:12
0
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
lea     ecx, dword ptr [esp+12C0]  //[esp+12C0]=[12E408],[12E408]=0
call    006A78D0                           
push    edi      //edi=0   
lea     ecx, dword ptr [esp+12C4]  //压栈一次esp-4,相当于[esp+12C4]=[12E408]
push    0A
push    ecx
mov     dword ptr [esp+12CE], eax //共压栈3次,相当于[esp+12C4]=[12E408]
add     esp, 0C
mov     ecx, dword ptr [C0980C]
mov     edx, dword ptr [ecx]
push    edi
push    0A
lea     eax, dword ptr [esp+12C8] //add  esp, 0C,再压2次栈,[esp+12C8]=]=[12E408]
push    eax
call    dword ptr [edx+10]

所以,这里的操作,基本上都是针对固定的栈地址=[12E408]操作的!
可以先保存下这个地址,写起来就清晰多了
mov     ebp,esp
mov     byte ptr [ebp], 16
mov     byte ptr [ebp+1], 60
mov     dword ptr [ebp+6], 0
push    0
mov     ecx,ebp   //这里相当于这个,不存在不可读的问题
push    0A
push    ecx
mov     dword ptr [ebp], ebp  //这里eax=ebp=12E408,相当于【12E408】=12E408,也不存在不可写的问题
mov     ecx, dword ptr [C0980C]
mov     edx, dword ptr [ecx]
push    0
push    0A
mov     eax,ebp
push    eax
call    dword ptr [edx+10]
2011-5-28 03:42
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢举剑问天,这两天比较忙,没顾上回,刚才测试了下,还是崩溃,连结果也得不到了~
2011-5-29 23:11
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
崩溃的原因不在此,而是因为数据验证部分,我再慢慢找吧,再次感谢~
2011-5-30 11:09
0
游客
登录 | 注册 方可回帖
返回
//