如何使用CsWhispers向C#项目添加DInvoke和间接系统调用方法

2024-04-06 902 0

关于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(#换成@)

相关文章

苹果试图保护你的隐私,OpenAI可能做不到
Shuffle:一款完全自动化的安全栈增强平台
如何使用CODASM编码Payload并降低熵值
SessionExec:一款针对会话安全的安全命令测试工具
Arkime:一款大规模数据包捕获和索引数据库系统
从蓝队流量角度分析Shiro-550反序列化漏洞

发布评论