安全矩阵

 找回密码
 立即注册
搜索
查看: 7931|回复: 0

Csharp Syscall

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2021-2-3 23:10:03 | 显示全部楼层 |阅读模式
原文链接:Csharp Syscall

系统调用

在Windows中,分为两种处理器访问模式:1.用户模式,2.系统模式。这些模式的实现背后的想法是保护用户应用程序免于访问和修改任何重要的OS数据。用户应用程序(例如Chrome,Word等)均以用户模式运行,而OS代码(例如系统服务和设备驱动程序)均以内核模式运行。
通过学习如何使用Csharp进行系统调用最终躲避杀软hooking是我的目的。因为杀软通常可以hookwin32api而不能hook本地api
如何查找win32api对应的本地api
写一个调用了win32api的程序,然后使用API Monitor打开,把API Filter全部勾起,查找就可以定位到win32api调用了哪个本地api

如何使用本地api
不过找到的都是针对c/c++的代码,那么在Csharp中就需要用到封送
封送参考https://docs.microsoft.com/en-us ... ith-platform-invoke
为了在Csharp中利用syscall,仅知道本地API的名称是不够的,例如NtCreateThread。所以在封送之前,需要先找到本地api的syscall号,每个本机API都有一个匹配的syscall编号。我们还需要知道我们的代码将在哪个版本的Windows上运行,因为syscall号很可能会在两个Windows版本之间发生变化
syscall号参考https://resources.infosecinstitu ... ispatch-table-ssdt/
有两种方法可以找到本地api对应的syscall号:
WinDbg查找本地Api对应的syscall号
  • 打开一个notepad.exe,再打开WinDbg Preview(可以在Microsoft Store下载)
  • 用WinDbg加载notepad.exe进程,然后在Command界面下会显示所有已经加载的模块
  • 输入x ntdll!NtCreateThreadEx,会返回NtCreateThreadEx函数的内存位置


    • x:查找符号命令,可以使用通配符*。可以用来查找函数
      ntdll:ntdll.dll
      NtCreateThreadEx:本地API

  • 输入u 00007ffe`ec91de70,会返回内存地址的反汇编,而syscall号就在里面:十六进制的BD


    • u:反汇编命令,可以直接跟内存地址,也可以直接跟函数名,但必须是全名


代码实现
代码已上传至:`https://github.com/XingYun-Cloud/CsharpSyscall`
  • 参照NtCreateThreadEx的本地API原型定义委托

  • 用WinDbg得到NtCreateThreadEx的反汇编,并定义为一个数组

  • 取到上一步NtCreateThreadEx的反汇编的函数指针,并把权限更改为 执行

  • 把NtCreateThreadEx函数指针转换为委托

  • 至此,完成了对本地API NtCreateThreadEx的定义,直接通过委托调用即可。
  • 其他的本地API也一样,关键在于找到原型,因为微软文档并没有公开了所有的本地API

检测
通过直接观察我们不确定是否真的进行了系统调用,那么我们可以使用Procmon Monitor监控并启动写好的程序
  • 这是用户调用NtCreateThreadEx的调用堆栈

  • 这是使用系统调用NtCreateThreadEx的调用堆栈


参考
  • https://jhalon.github.io/utilizing-syscalls-in-csharp-1/
  • https://jhalon.github.io/utilizing-syscalls-in-csharp-2/
  • https://www.solomonsklash.io/syscalls-for-shellcode-injection.html


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 18:38 , Processed in 0.015767 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

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