关于CsWhispers
CsWhispers是一款针对C#编程项目的源代码生成工具,该工具基于C#开发,并且完全开源,可以帮助广大研究人员向已有的C#项目添加D/Invoke和间接系统调用方法源码。
工具要求
C#项目
NuGet包
Visual Studio
支持的API
NtAllocateVirtualMemory
NtClose
NtCreateSection
NtCreateThreadEx
NtFreeVirtualMemory
NtMapViewOfSection
NtOpenFile
NtOpenProcess
NtProtectVirtualMemory
NtQueryVirtualMemory
NtReadVirtualMemory
NtUnmapViewOfSection
NtWriteVirtualMemory
工具下载
广大研究人员可以直接使用下列命令将该项目源码克隆至本地:
git clone https://github.com/rasta-mouse/CsWhispers.git
接下来,打开Visual Studio并导入项目,根据代码架构构建解决方案即可。
工具使用
首先,我们需要将最新版本的NuGet包添加到你的项目中,并允许不安全的代码:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net481</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <LangVersion>12</LangVersion> </PropertyGroup> <!-- CsWhispers package --> <ItemGroup> <PackageReference Include="CsWhispers" Version="0.0.3" /> </ItemGroup> <!-- Allow unsafe code --> <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <AllowUnsafeBlocks>true</AllowUnsafeBlocks> </PropertyGroup> </Project>
在你的项目中,创建一个名为CsWhispers.txt的文件,然后将其构建行为属性设置为“AdditionalFiles”:
<ItemGroup> <None Remove="CsWhispers.txt" /> <AdditionalFiles Include="CsWhispers.txt" /> </ItemGroup>
接下来,将任何你想要引入你项目中的NT API和结构体/枚举类型添加进来,其中的每一项必须单独作为一行写入:
NtOpenProcess HANDLE NTSTATUS CLIENT_ID UNICODE_STRING OBJECT_ATTRIBUTES PWSTR PCWSTR
全局命名空间将会自动添加到进代码项目中以实现代码清理:
public static unsafe void Main() { // use self as example using var self = Process.GetCurrentProcess(); HANDLE hProcess; OBJECT_ATTRIBUTES oa; CLIENT_ID cid = new() { UniqueProcess = new HANDLE((IntPtr)self.Id) }; var status = NtOpenProcess( &hProcess, PROCESS_ALL_ACCESS, &oa, &cid); Console.WriteLine("Status: {0}", status.SeverityCode); Console.WriteLine("HANDLE: 0x{0:X}", hProcess.Value.ToInt64()); }
D/Invoke
CsWhispers包含了一个最小化的D/Invoke版本,因此我们也可以调用Generic.GetLibraryAddress和Generic.DynamicFunctionInvoke等代码。
类的继承使用
该工具所生成的全部代码都会被添加到CsWhispers.Syscalls类中,我们可以通过继承这个类来添加我们自己的API。比如说,我们可以创建一个名为MyAPIs.cs的文件,并添加下列代码:
namespace CsWhispers; public static partial class Syscalls { public static NTSTATUS NtCreateThreadEx() { // whatever return new NTSTATUS(0); } }
接下来,我们就可以在主代码中调用这个类,并且无需添加任何额外的声明或语句:
namespace ConsoleApp1; internal static class Program { public static void Main() { var status = NtCreateThreadEx(); } }
许可证协议
本项目的开发与发布遵循MIT开源许可证协议。
项目地址
CsWhispers:【GitHub传送门】
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)