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

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

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

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

现在我目前正在尝试实现的是:

将那段汇编代码转换为等效字节,以便在使用winapi更改它们后将这些字节写回到内存中。
或者以某种方式将字符串的内容写入分配的内存中,如果不将其转换为字节.. idk,这似乎是不可能的

我不知道是否可能,但我也有这个主意:

在C ++中制作一个DLL,它将具有可以从我的C#应用​​程序导入的功能
通过传递asm操作码并将已分配的内存地址作为参数传递给我(不是c ++专家),可以利用任何可能的方式来达到我的目标,但是我知道inline asm在c ++中是可能的。

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

c#大神给出的解决方案

使用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);
}

要将作弊引擎代码注入脚本转换为C#代码,您需要进行外部绕行。使用VirtualAllocateEx()获取目标进程中的空间,使用WriteProcessMemory将使用KeyStone创建的shell代码写入内存,然后执行绕行操作以绕过执行流程,以注入的shellcode。

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

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

LeetCode题解计算机为什么是基于二进制的?

可以是三进制么?二进制有什么好处?题解:为什么叫电子计算机?算盘应该没有二进制

LeetCode题解统计城市的所有灯泡

这个是我刚毕业的时候,一个真实的面试题,这是一个开放题。题目描述:想办法,将一个城市的所有灯泡数量统计出来。题解:费米估算法1、如果某个城市常驻人口有1000万2、假设每5人居住在一套房里,每套房有灯泡5只,那么住宅灯泡共有1000万只3、假设公众场所每10人共享一只灯泡,那么共有100万只4、主要的这两者相加就得出了1100万只当然实际上这是估算的,具体应…

LeetCode题解黑白圆盘

一个圆盘被涂上了黑白二色,两种颜色各占一个半圆。圆盘以一个未知的速度、按一个未知的方向旋转。你有一种特殊的相机可以让你即时观察到圆上的一个点的颜色。你需要多少个相机才能确定圆盘旋转的方向?题解:可以用一个相机即可

LeetCode题解圆上任取三点构成锐角三角形的概率

来自字节跳动的一道几何题题解:1/4

LeetCode题解深度优先遍历和回溯的关系?

深度优先遍历的范围更大还是回溯的范围更大?为什么?题解:我的理解是:dfs是回溯思想的一种体现- 回溯:是在整个搜索空间中搜索出可行解,在搜索过程中不断剪枝回退,这是回溯的思想,这个搜索空间并没有限制于特定的数据结构。- dfs:dfs是指特定的数据结构中如图,树(特殊的图)中搜索答案,范围限制在了特定的数据结构。个人拙见。