首页
社区
课程
招聘
[旧帖] shelllcode 跳转回原始OEP的两种方法 0.00雪花
2010-2-25 16:49 2046

[旧帖] shelllcode 跳转回原始OEP的两种方法 0.00雪花

2010-2-25 16:49
2046
几种跳转指令和对应的机器码

0xE8    CALL    后面的四个字节是地址

0xE9    JMP    后面的四个字节是偏移

0xEB    JMP    后面的二个字节是偏移

0xFF15    CALL    后面的四个字节是存放地址的地址

0xFF25    JMP    后面的四个字节是存放地址的地址

0x68    PUSH    后面的四个字节入栈

0x6A    PUSH    后面的一个字节入栈

shellcode跳转回原始OEP方法一

大部分人比较喜欢直接jmp跳转到原始oep,这时候一般都用e9跳转,e9后面的四个字节是一个偏移地址。

计算公式: 偏移地址 = 目的地址 - 跳转基地址(jmp的下一条指令的地址)

也就是 原始OEP - jmp的下一条指令的地址

    db    0e9h        ;这是jmp
OEPOffs:
    dd    ?        ;这里是4个字节 未初始化

偏移地址 = 原始OEP - (offset OEPOffs + 4)  为什么+4 因为OEPOffs标号向后偏移4个字节 才是jmp的下一条指令地址  也就是跳转基地址

shellcode跳转回原始OEP方法二

有些人用 push oep然后jmp dword ptr [esp]的方法跳回原始oep,这时候shellcode要这样写:

    db    68h
OEP:
    dd    ?
    jmp dword ptr [esp]

68h是 push后面四个字节的意思  dd ? 声明了四个字节,然后通过OEP标号,定位到这个位置,然后把原始OEP写进去就可以了

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

收藏
点赞6
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回