Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#运行字节数组而不转储到临时文件_C#_Arrays_Reflection_Byte_Assembly.load - Fatal编程技术网

C#运行字节数组而不转储到临时文件

C#运行字节数组而不转储到临时文件,c#,arrays,reflection,byte,assembly.load,C#,Arrays,Reflection,Byte,Assembly.load,我是来问这里是否有人能帮我。我一直在做以下工作: 从文件中复制字节 使用base64加密字节并将其转换为字符串 用二进制编写器将字符串写入程序 程序将提取字符串并将其存储在变量中 程序现在将其转换回字节数组并解密 现在我试图让程序用assembly.load运行字节(出错的地方) System.BadImageFormatException:无法加载文件或程序集 如果您需要任何其他详细信息,请询问 注意:我希望能够对任何程序(因此任何体系结构,本机或非本机)执行此操作,我不希望将字节写入文件并运

我是来问这里是否有人能帮我。我一直在做以下工作:

  • 从文件中复制字节
  • 使用base64加密字节并将其转换为字符串
  • 用二进制编写器将字符串写入程序
  • 程序将提取字符串并将其存储在变量中
  • 程序现在将其转换回字节数组并解密
  • 现在我试图让程序用assembly.load运行字节(出错的地方)
  • System.BadImageFormatException:无法加载文件或程序集

    如果您需要任何其他详细信息,请询问

    注意:我希望能够对任何程序(因此任何体系结构,本机或非本机)执行此操作,我不希望将字节写入文件并运行新文件,我希望所有操作都在内存中完成,而不是在执行后在存储设备上完成

    提前感谢大家

    运行字节数组的示例:

    Assembly execassembly=Assembly.Load(decryptedBuffer);
    object[]参数=新对象[1];
    execassembly.EntryPoint.Invoke(null,参数);
    
    [解决方案]
    我使用RunPE将字节自注入存根。很好,感谢所有帮助过你的人

    这里有很多要求,因为您想加载任何类型的非本机文件,我建议您开始研究.net和常规PE文件之间的区别,看看win32 api调用
    CreateProcess
    ,网络上有许多解决方案可以为.net应用程序和PE文件实现这一点,我从这里开始,当你遇到问题时,回来看看usI,我还记得这个错误“BadImageFormatException”,我在Roslyn程序集的实验中,在运行时将c#编译为内存中的程序集。您正在将二进制解密文件初始化为程序集。在这两种情况下,请检查程序集的引用,并确保在调用入口点之前添加它们。您必须将MetadataReference[]类型的数组连接到程序集才能使其工作,但我不确定在读取二进制文件时是否采用相同的方式。您在这里有很多要求,并且由于您希望加载任何类型的文件,因此我建议您开始研究.net和常规PE文件之间的差异,请看win32 api调用
    CreateProcess
    ,网络上有许多解决方案可以为.net应用程序和PE文件执行此操作,当您遇到问题时,请返回并查看usI,记住此错误“BadImageFormatException”从我在运行时编译c#的Roslyn程序集实验到内存中的程序集。您正在将二进制解密文件初始化为程序集。在这两种情况下,请检查程序集的引用,并确保在调用入口点之前添加它们。您必须将MetadataReference[]类型的数组连接到程序集才能让它工作,但我不确定在读取二进制文件时是否采用相同的方式。