ROP(Return Oriented Programming)

本文详细介绍了ROP(Return-Oriented Programming)技术的起源及其如何对抗DEP/NX技术。ROP技术通过精心构造返回地址来实现对程序执行流程的控制,已被证明是图灵完备的。文章还提供了深入学习ROP技术的相关参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROP

在ret2libc中提到了ROP,今天在此详细记录
在YouTube看rop的视频时,视频制作者提及这项技术是Hovav Shacham 于2007年首先展示出来,很是震惊,现在已经是2017年了,10年之内技术又进步到哪里了呢?还望自己勤勉学习,能早一日看见顶峰

rop的起源

每一项技术的出现,背后必定有存在的意义,在ret2libc中,我们提及这是为了对抗DEP/NX即W^N技术而产生。
想一想如果一个函数不会被正常的程序使用,那又为什么要加载呢?如果在libc中移除system()又会怎么样?

esp就是新的eip

回想一下在ret2libc中我们做过的事情,在ret处覆盖为system(),在其之上覆盖为exit()地址,这样在执行完system()之后紧接着执行的就是exit(),这不就是一条我们能控制的执行流吗?假如我们能控制好覆盖后的地址,确保每一次执行完都能ret,那么esp就能成为我们的新eip指针~

gadgets的来源

一个精致小巧的工具
https://github.com/packz/ropeme
rop思想的精髓就在于覆盖的内容是精巧设计的而不仅仅是覆盖了ret-addr,在每一次的ret之后返回的地址实际就是下一次的eip指针,以以下例子举例
esp
这里我们把ret-addr及之后的位置进行覆盖,那么接下来会执行的指令
pop eip 或者是 ret
就会帮我们把eip指向0x0808ad33这个位置,继续执行

pop eax
ret

就会把0x5赋值给eax,然后ret~我们就又一次跳转到了我们指定好的一个位置0x07ff3a42
这就是rop

ROP的完备性

rop真的能完成所有的工作吗?这个问题已经被证明,rop是图灵完备的~所以放心大胆的去做吧

更详细的参考资料

1.完整的rop利用 Return-Oriented-Programming-By Saif El-Sherei

2.详尽的ROP介绍 Return-oriented Programming:
Exploitation without Code Injection-Erik Buchanan, Ryan Roemer, Stefan Savage, Hovav Shacham
University of California, San Diego

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值