-
-
[原创]红队战术学习:在C#使用syscall,翻车记
-
-
[原创]红队战术学习:在C#使用syscall,翻车记
最近阅读到zoemurmure大佬的文章:红队战术:在C#中使用syscall之背景知识介绍,最初的想法是想使用powershell实现syscall的功能,后来需要在powershell里嵌入c#语言,然后着手开始编写调试一个调用syscall的C#程序,不经常使用这些语言,查阅了一些资料搭出了一个半成品,最终程序能执行出一点效果,没达到预期效果,在这里记录一下翻车的经过。
首先从文章中指示的Windows X86-64系统调用表,查找一个目标函数进行测试,于是就找到一个比较简单的函数NtQuerySystemTime,用windbg查看该函数的汇编代码。
摘录下来得到
函数原型
传入long(64位) 通过C#的调用后返回值
STATUS_INVALID_PARAMETER_1 无效参数作为第一个参数传递给服务或函数。
调了很多次后,后来想着写入CC开调试器看堆栈,还没开始做,看了后续的文章红队战术:在C#中使用syscall之编写代码确认代码没有明显错误后研究是不是函数调用出问题了,于是搜索RtlQuerySystemTime查找相关信息想知道这个函数的返回值是什么,然后传给syscall,结果从6e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6Z5k6X3W2J5k6h3j5H3P5q4)9J5c8W2y4&6M7$3y4S2L8r3I4f1j5h3u0D9k6i4y4Q4x3V1k6A6M7%4y4#2k6i4y4Q4x3V1j5I4i4@1f1@1i4@1t1^5i4K6S2m8i4@1f1$3i4K6R3&6i4@1u0q4i4@1f1#2i4K6R3^5i4@1t1H3i4@1f1%4i4K6W2n7i4@1t1^5i4@1f1#2i4K6R3#2i4@1t1K6i4@1f1@1i4@1u0r3i4@1p5I4i4@1f1$3i4K6R3I4i4@1q4r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1^5i4@1q4r3i4@1t1@1i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4K6V1^5i4@1q4r3e0Y4c8c8N6h3g2J5P5g2y4&6M7%4c8W2L8g2c8A6L8h3f1`. 不在syscall的队列里,因为它在用户模式执行RtlQuerySystemTime,NtAccessCheckByTypeAndAuditAlarm 服务号为89(0x59),NtWaitForMultipleObjects 服务号为91(0x5B),这里丢失了90(0x5a),微软资料说明NtQuerySystemTime在未来版本的 Windows 中,可能会更改或不可用。
然后到此我知道我错在哪里了。
正确示范代码请到zoemurmure的Github:SharpCall。
贴一下我的部分核心代码,最终想完成powershell的实现,半成品错误示范:
[培训]科锐逆向工程师培训第53期2025年7月8日开班!