项目地址:796K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6a6P5s2W2Y4k6h3^5I4j5e0q4Q4x3V1k6U0j5h3I4D9M7%4c8S2j5$3E0Q4y4h3k6K6M7r3!0G2k6R3`.`.
参考577K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6B7K9r3W2F1P5s2y4Q4x3X3g2U0L8$3#2Q4x3V1k6^5z5o6k6Q4x3U0g2q4y4q4)9J5y4f1t1^5i4K6t1#2z5p5g2^5y4U0c8Q4x3U0g2q4y4W2)9J5y4f1p5H3i4K6t1#2z5o6S2Q4x3U0g2q4y4g2)9J5y4e0W2n7i4K6t1#2z5f1g2Q4x3U0g2q4y4W2)9J5y4f1u0m8i4K6t1#2b7f1k6Q4x3V1j5`.
6a6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6D9j5h3u0K6i4K6u0W2N6$3W2@1K9s2y4W2j5%4g2J5k6g2)9J5k6h3y4G2L8g2)9J5c8Y4m8#2j5X3I4A6j5$3q4@1K9h3!0F1M7#2)9J5c8Y4y4H3L8$3!0X3K9h3&6Y4i4K6u0V1j5$3q4D9L8q4)9J5k6s2y4@1j5h3y4C8M7#2)9J5k6s2c8G2i4K6u0V1j5$3!0F1k6Y4g2K6k6g2)9J5k6r3g2V1M7Y4x3`.其实是魔改的下面的这个人的项目 项目里面很多函数的名字可能相同ea4K9s2c8@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,总之任何有空位的地方,都有可能当作返回地址 项目地址:beaK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6a6P5s2W2Y4k6h3^5I4j5e0q4Q4x3V1k6U0j5h3I4D9M7%4c8S2j5$3E0Q4y4h3k6K6M7r3!0G2k6R3`.`.
shellcode
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
还是别用模板吧,总感觉这个挑C++版本,太新太旧都不行
chengqiyan 还是别用模板吧,总感觉这个挑C++版本,太新太旧都不行
请问SPOOF_FUNC的作用是什么?似乎可加可不加的样子。
chengqiyan 解决了.不过他void类型返回值的没处理,是API函数需要套一层返回int或者其他,造个返回值函数