gpt4 book ai didi

c# - 我如何在字符串变量中运行 ASM 操作码或将其转换为字节?

转载 作者:行者123 更新时间:2023-12-02 12:20:30 26 4
gpt4 key购买 nike

我在字符串属性中有这段asm代码:

mov [ecx+ebx*4+10],ff
jmp client.dll+3A8D96

在进入我想要实现的目标之前,首先我会将 client.dll+... 更改为它的最终地址。

现在我正在努力实现的是:

  • 将这段 asm 代码转换为它的等效字节,这样我就可以在使用 winapi 更改这些字节后将它们写回到内存中..

  • 或者以某种方式将字符串的内容写入分配的内存中,如果不将其转换为字节,这似乎是不可能的.. idk

我不知道是否可能,但我也有这个想法:

  • 用 C++ 创建一个 dll,其中包含可以从我的 C# 应用程序导入的函数
  • 通过传递 asm 操作码和分配的内存地址作为参数(不是 c++ 专家),利用任何可能的方法来实现我的目标,但我知道内联 asm 在 c++ 中是可能的。

请记住,本文中给出的 ASM 代码只是为了演示我正在尝试做的事情,它实际上会发生很大的变化,我希望您明白这一点。

最佳答案

使用Keystone's C# bindings将程序集转换为字节。它非常容易使用,您给它一个字符串,它会给您一个字节数组,表示您为输入提供的汇编代码:

using Keystone;

using (Engine keystone = new Engine(Architecture.X86, Mode.X32) { ThrowOnError = true })
{
ulong address = 0;

keystone.ResolveSymbol += (string s, ref ulong w) =>
{
if (s == "_j1")
{
w = 0x1234abcd;
return true;
}

return false;
};

EncodedData enc = keystone.Assemble("xor eax, eax; jmp _j1", address);

enc.Buffer.ShouldBe(new byte[] { 0x00 });
enc.Address.ShouldBe(address);
enc.StatementCount.ShouldBe(3);
}

要将 Cheat Engine 代码注入(inject)脚本转换为 C# 代码,您需要进行外部绕行。使用 VirtualAllocateEx() 获取目标进程中的空间,使用 WriteProcessMemory 将您使用 KeyStone 创建的 shell 代码写入内存,然后执行绕行,将执行流绕道至您的 shellcode你注入(inject)了。

您需要在绕行函数中手动解决相对跳转和所有相对地址。

或者,您可以使用 CreateRemoteThread() 在新线程中执行目标进程中的代码,而不是绕道执行,具体取决于您想要执行的操作。

关于c# - 我如何在字符串变量中运行 ASM 操作码或将其转换为字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60468509/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com