COOPgadget搜索方法

admin 2026-03-18 17:30:09 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍了COOPgadget的搜索方法,将其分为Dispatcher和普通gadget两类。Dispatcher负责循环调用可控内存地址,普通gadget执行简单元操作。通过遍历.text段函数,依据首尾指令特征及数量限制进行筛选,Dispatcher需满足特定mov、间接调用及跳转指令组合,普通gadget需满足基于rcx的寄存器赋值条件,利用rcx指向可控block的特性实现利用。 综合评分: 85 文章分类: 二进制安全,漏洞分析,逆向分析,漏洞POC


cover_image

COOP gadget搜索方法

原创

kali kali

信安学习

2026年3月8日 09:24 福建

上篇COOP(Counterfeit Object Oriented Programming)实例分析我们探讨了一个COOP的实例,本文我们研究下怎么搜索COOP gadget。

首先,COOP gadget分为Dispatcher和普通gadget两种。前者我们期望能循环从我们可控内存取出函数地址,并加以调用。后者通常是个短小的合法函数(在浏览器之类大项目里还是不少的),包含一个简单的元操作(例如给寄存器赋值、间接调用某个地址、把寄存器的值写入内存)然后就ret。

我们参考这个代码(代码本身有点小问题不能直接运行,只看思路):

https://github.com/uf0o/Counterfeit_Object_Oriented_Programming_COOP/blob/main/looper_idapython.py

可以看到无论是搜索Dispatcher还是普通gadget,它都在.text段遍历函数列表,要求函数第一条指令是mov开头,最后一条指令是ret。函数包含的指令数量也有限制,Dispatcher要求<=0x30条,普通gadget<=0xF条。

细分的搜索条件如下。

Dispatcher要求包含这3条指令:

mov rbx,&nbsp;[rcx±...]&nbsp;; rbx想必可以换成任意regcall __guard_dispatch_icall_fptr ; 包含间接调用jnz 地址 ; 地址要求<上面那条间接调用指令的地址

普通gagdet只要求包含:

mov reg/reg32, [rcx+...] ; reg/reg32是我们指定寄存器(如rbx)或其32位形式(如ebx)

注意上面两类gadget搜索条件为啥都包含rcx呢?如上篇文章所讲,rcx指向block,而block地址是我们可控的。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:信安学习 kali kali《COOP gadget搜索方法》

美国教英语? 网络安全文章

美国教英语?

文章总结: 该文档内容极为简短,仅包含一个标题美国教英语以及一句问候语阿乐你好,附带时间和地点信息2026年3月8日上海。文档缺乏实质性内容,无法提炼核心观点或
评论:0   参与:  0