吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1305|回复: 1
收起左侧

[C&C++ 原创] 伪造调用栈,返回地址在正常模块,支持R0,R3

  [复制链接]
oxygen1a1 发表于 2023-9-24 15:56
项目地址:https://github.com/Oxygen1a1/callstack_spoof
前言
参考
https://jhinxs.com/x86%E4%B8%8Ex64%E6%A0%88%E5%9B%9E%E6%BA%AF/https://labs.withsecure.com/publications/spoofing-call-stacks-to-confuse-edrs
其实是魔改的下面的这个人的项目 项目里面很多函数的名字可能相同
https://github.com/Barracudach/CallStack-Spoofer
原理
Barracudach的项目很好,我基本都是参考的他的思路(通过模板形参包来达到编译期间才生成shellcode这个思路真实绝了)。
但是他的有一个最大缺陷就是,shellcode(模板编程根据参数不同生成的不同函数就是shellcode,本质上是编译期间生成的各种同名函数,但是可以用作函数的包装器)分配在非模块内。
这是因为他对于R0的处理是ExAllocatePool,对于R3的shellcode是使用VirtualAlloc,最后他达到的效果如下

可以看到,有一个shellcode作为返回地址,这样的话调用敏感函数,还是会爆炸,毕竟不在正常模块内;
而我的思路是这样的,R0 R3采取不同方法进行查找模块找到一块足够使用的空白内存(除了ntos,win32XX,hal,这样修改会PG),然后写入shellcode(不用担心shellcode作为包装器不适配,前面提到了这个是编译期间根据参数不同生成的不同的shellcode),这样返回地址就是正确的了;
最后达到的效果如下(R0),可以发现,返回地址是位于ci.sys的一个地址,当然这是代码随机找的,也有可能在beep.sys,总之任何有空位的地方,都有可能当作返回地址

项目地址:https://github.com/Oxygen1a1/callstack_spoof

免费评分

参与人数 3威望 +1 吾爱币 +22 热心值 +2 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
苏紫方璇 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
sam喵喵 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sam喵喵 发表于 2023-9-24 16:54
感谢大佬,有空下载拜读!!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-21 20:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表