首页
社区
课程
招聘
伪造调用栈,返回地址在正常模块,支持R0,R3
发表于: 2023-9-24 15:53 18755

伪造调用栈,返回地址在正常模块,支持R0,R3

2023-9-24 15:53
18755

项目地址:ba1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6a6P5s2W2Y4k6h3^5I4j5e0q4Q4x3V1k6U0j5h3I4D9M7%4c8S2j5$3E0Q4y4h3k6K6M7r3!0G2k6R3`.`.

参考
98bK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7K9r3W2F1P5s2y4Q4x3X3g2U0L8$3#2Q4x3V1k6^5z5o6k6Q4x3U0g2q4y4q4)9J5y4f1t1^5i4K6t1#2z5p5g2^5y4U0c8Q4x3U0g2q4y4W2)9J5y4f1p5H3i4K6t1#2z5o6S2Q4x3U0g2q4y4g2)9J5y4e0W2n7i4K6t1#2z5f1g2Q4x3U0g2q4y4W2)9J5y4f1u0m8i4K6t1#2b7f1k6Q4x3V1j5`.

a78K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9j5h3u0K6i4K6u0W2N6$3W2@1K9s2y4W2j5%4g2J5k6g2)9J5k6h3y4G2L8g2)9J5c8Y4m8#2j5X3I4A6j5$3q4@1K9h3!0F1M7#2)9J5c8Y4y4H3L8$3!0X3K9h3&6Y4i4K6u0V1j5$3q4D9L8q4)9J5k6s2y4@1j5h3y4C8M7#2)9J5k6s2c8G2i4K6u0V1j5$3!0F1k6Y4g2K6k6g2)9J5k6r3g2V1M7Y4x3`.
其实是魔改的下面的这个人的项目 项目里面很多函数的名字可能相同
ec0K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6n7j5i4u0J5j5h3y4#2k6r3q4U0K9q4)9J5c8V1y4S2L8r3I4e0N6r3q4U0K9#2)9J5k6q4y4H3L8$3!0X3k6i4t1`.

Barracudach的项目很好,我基本都是参考的他的思路(通过模板形参包来达到编译期间才生成shellcode这个思路真实绝了)。
但是他的有一个最大缺陷就是,shellcode(模板编程根据参数不同生成的不同函数就是shellcode,本质上是编译期间生成的各种同名函数,但是可以用作函数的包装器)分配在非模块内。
这是因为他对于R0的处理是ExAllocatePool,对于R3的shellcode是使用VirtualAlloc,最后他达到的效果如下
图片描述
可以看到,有一个shellcode作为返回地址,这样的话调用敏感函数,还是会爆炸,毕竟不在正常模块内;
而我的思路是这样的,R0 R3采取不同方法进行查找模块找到一块足够使用的空白内存(除了ntos,win32XX,hal,这样修改会PG),然后写入shellcode(不用担心shellcode作为包装器不适配,前面提到了这个是编译期间根据参数不同生成的不同的shellcode),这样返回地址就是正确的了;
最后达到的效果如下(R0),可以发现,返回地址是位于ci.sys的一个地址,当然这是代码随机找的,也有可能在beep.sys,总之任何有空位的地方,都有可能当作返回地址
图片描述
项目地址:67fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6a6P5s2W2Y4k6h3^5I4j5e0q4Q4x3V1k6U0j5h3I4D9M7%4c8S2j5$3E0Q4y4h3k6K6M7r3!0G2k6R3`.`.


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 5
支持
分享
最新回复 (10)
雪    币: 6552
活跃值: (6134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错
2023-9-24 16:50
0
雪    币: 8625
活跃值: (32836)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-9-25 09:09
1
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
试用下看看 ,晚点给出顾客评价
2023-9-26 16:10
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5

还是别用模板吧,总感觉这个挑C++版本,太新太旧都不行

最后于 2023-9-26 16:28 被chengqiyan编辑 ,原因:
2023-9-26 16:23
0
雪    币: 2515
活跃值: (6011)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
chengqiyan 还是别用模板吧,总感觉这个挑C++版本,太新太旧都不行
开C++ 17以上试试,还有记得关闭CFG,如果是调试模式下记得关闭JMT,还有运行库基本检查设置成默认值,增量链接关闭
2023-9-26 16:53
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
解决了.不过他void类型返回值的没处理,是API函数需要套一层返回int或者其他,造个返回值函数
2023-9-26 17:33
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢 分享
2023-10-7 18:02
0
雪    币: 94
活跃值: (655)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9

请问SPOOF_FUNC的作用是什么?似乎可加可不加的样子。

最后于 2023-10-9 15:46 被dico编辑 ,原因: 问题修正
2023-10-9 14:58
0
雪    币: 187
活跃值: (851)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
chengqiyan 解决了.不过他void类型返回值的没处理,是API函数需要套一层返回int或者其他,造个返回值函数
怎么解决的,能贴了看下吗
2024-6-15 00:30
0
雪    币: 310
活跃值: (215)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
如果同时还有crc检测呢? 那你找空白位置写shellcode不是没用了
2025-12-3 22:52
0
游客
登录 | 注册 方可回帖
返回