好友
阅读权限20
听众
最后登录1970-1-1
|
项目地址: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 |
|
用心讨论,共获提升! |
查看全部评分
本帖被以下淘专辑推荐:
- · 学习及教程|主题: 1126, 订阅: 1118
- · 编程之美|主题: 143, 订阅: 13
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|