首页
社区
课程
招聘
《一段让od跑飞的字符串压栈》解释
发表于: 2008-11-19 21:54 4559

《一段让od跑飞的字符串压栈》解释

2008-11-19 21:54
4559
Combojiang大叔blog上有篇文章《一段让od跑飞的字符串压栈》,不过他没有解释,偶解释一下,希望大叔见谅:-)

pushsz MACRO str1
        LOCAL label_1,label_2,label_3
        push edx
        call label_1                ; call label相当于push eip, jmp label
        db 06ah,00h,0e8h,91h,0ch,00h,00h,0a3h    ; (A),8字节
        jmp label_2                                                   ; (B)
        db 0e8h
label_1:   
        pop eax                        ; 此时eax = eip ,也即是A处地址
        add eax,8                            ; eax 此时等于B处地址
        push eax                            ; 保存eax
        call label_3                ; push eip, jmp label_3,eip->db str1, 0
        db str1,0
label_3:
        pop edx                        ; edx指向db str1, 0
        pop eax                        ; 恢复eax
        jmp eax                        ; 跳转到eax,即为(B): jmp label_2
label_2:
       xchg eax,edx                ; 交换eax和edx, eax指向字符串
       pop edx      
ENDM

当执行完宏时,eax 指向字符串
起花指令的作用,IDA看了很乱

主要测试代码如下:

.code

start:

invoke GetModuleHandle,NULL
mov g_hInst,eax

invoke GetCommandLine
mov g_CmdLine,eax

invoke   WinMain,g_hInst,NULL,g_CmdLine,SW_SHOWDEFAULT
invoke   ExitProcess,   eax

WinMain proc uses esi edi hInstance:dword,hInstPrev:dword,lpCmdLine:dword,nCmdShow:dword
           push 0
           pushsz "combojiang"
           push eax
           push eax
           push 0
           call MessageBoxA
           xor     eax, eax
           ret
WinMain endp
end start

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
嗯..刚刚看了...
2008-11-19 22:19
0
雪    币: 340
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
UDD不能自动更新很让人不爽~~
2008-11-19 22:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯,花指令,但od能够识别

/*401000*/  push    0
/*401002*/  call    <jmp.&kernel32.GetModuleHandleA>
/*401007*/  mov     dword ptr [403000], eax
/*40100C*/  call    <jmp.&kernel32.GetCommandLineA>
/*401011*/  mov     dword ptr [403004], eax
/*401016*/  push    ebp
/*401017*/  mov     ebp, esp
/*401019*/  push    esi
/*40101A*/  push    edi
/*40101B*/  push    0
/*40101D*/  push    edx
/*40101E*/  call    0040102E
/*401023*/  push    0
/*401025*/  call    00401CBB
/*40102A*/  db      A3
/*40102B*/  jmp     short 00401047
/*40102D*/  db      E8
/*40102E*/  pop     eax
/*40102F*/  add     eax, 8
/*401032*/  push    eax
/*401033*/  call    00401043
/*401038*/  ascii   "combojiang",0
/*401043*/  pop     edx
/*401044*/  pop     eax
/*401045*/  jmp     eax
/*401047*/  xchg    eax, edx
/*401048*/  pop     edx
/*401049*/  push    eax
/*40104A*/  push    eax
/*40104B*/  push    0
/*40104D*/  call    <jmp.&user32.MessageBoxA>
2008-11-19 23:16
0
游客
登录 | 注册 方可回帖
返回
//