将 C# 转换为涉及 DllImport 的 Powershell

Posted

技术标签:

【中文标题】将 C# 转换为涉及 DllImport 的 Powershell【英文标题】:Converting C# into Powershell with DllImport involved 【发布时间】:2022-01-18 07:51:39 【问题描述】:

我最近一直在做一个小项目,看看是否可以进行一些内存编辑以使用 PowerShell。我在 C# 中编写了一个不需要管理权限的小脚本,运行时会在 Hill Climb Racing 中为您提供最大的硬币和钻石。

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace HCRtest2

    public class Programmmm
    
        public static void Main()
        
            [DllImport("kernel32.dll")]
            static extern bool WriteProcessMemory(IntPtr hProcess, long lpBaseAddress, byte[] lpBuffer, uint nSize, out uint lpNumberOfBytesRead);
            long BaseAddress;
            IntPtr ProcessHandle;
            Process process = Process.GetProcessesByName("HillClimbRacing")[0];
            if (process.Handle.ToInt64() != 0L)
            
                BaseAddress = process.MainModule.BaseAddress.ToInt64();
                ProcessHandle = process.Handle;
                uint num = 0U;
                WriteProcessMemory(ProcessHandle, BaseAddress + 0x28CAD4, BitConverter.GetBytes(2147483647), 4U, out num);
                WriteProcessMemory(ProcessHandle, BaseAddress + 0x28CAEC, BitConverter.GetBytes(2147483647), 4U, out num);
            
        
    

我现在的挑战是看看我是否能找到一种方法在我的学校笔记本电脑上执行此代码.我一直在做很多研究,但找不到将此脚本移植到 PowerShell 的好方法。如果有人有什么好主意,请告诉我,因为这让我现在很紧张。

【问题讨论】:

如果一个操作系统函数需要某些权限,不管你是从 C# 还是 Powershell 调用它,你只需要这些权限。 【参考方案1】:

This website 提供了有关如何在 powershell 会话中播放 c# 的答案。

$code = @"
using System;
namespace HelloWorld

    public class Program
    
        public static void Main()
            Console.WriteLine("Hello world!");
        
    

"@
 
Add-Type -TypeDefinition $code -Language CSharp 
iex "[HelloWorld.Program]::Main()"

【讨论】:

以上是关于将 C# 转换为涉及 DllImport 的 Powershell的主要内容,如果未能解决你的问题,请参考以下文章

c#使用DllImport调用c++dll的函数

将 MediaInfo DLL 与 C# DLLImport 一起使用

Dllimport 将字符串从 C# 传递到 C++

如何使用 DLLImport 将字符串从 C# 传递到 C++(以及从 C++ 到 C#)?

如何在 C# 中将 Byte* 从 C++ 转换为 Byte[]

如何编组多字节字符集 C#