html tool

2019年1月15日星期二

读书笔记-VoID shellcodeFun-eip计算



VoID shellcodeFun-eip计算

  • + - code:
    VOID ShellCodeFun(VOID)
    {
    __asm
    {
    push eax //占位,一会儿用做跳转地址
    pushad   //大小0x20
    pushfd   //大小0x04
    call L001
    L001:
    pop ebx
    sub ebx,8         -------------------------------------------------?
    push dword ptr ds:[ebx+0x34] //szDllPath
    call dword ptr ds:[ebx+0x30] //LoadLibraryA
    mov eax,dword ptr ds:[ebx+0x38] //OriginalEIP
    xchg eax,[esp+0x24] //将原来的EIP交换到栈上
    popfd
    popad
    retn //jmp to OriginalEIP
    nop
    nop
    nop
    nop
    nop
    }
    }
    [popexizhi: 这里的ebx,8为什么是可以自定义到入口的eip地址,这个pope一直没有计算明白,参见下图1,而pope的计算方式是图2,这里的8,是指 push eax这个命令在内存执行占用1字节的地址存储空间,不是说push eax指定的内存50~5E地址,见图1的A部分,是代码段本身的占用地址,不是其所指向的内存位置地址,所以剩下的就好解释了
    pusha 代码段占用1个字节(图1 中的 60)
    pushf 代码段占用1个字节(图1 中的 9c)
    call $+5 代码段占用5个字节(图1 中的 E8 00 00 00 00)
    而调用了L001之后的
    先把eip出站到ebx中
    再用ebx-8,就得到了调用这个shellcode之前的最后一个执行地址,即eip的内容了:)PS:IDA好强大,好厉害啊,刚刚知道这个tool,敬意一个:)
    ]
    图1

    图2

    •  




没有评论:

发表评论