想自制一个exe加壳程序,但在第一步就卡住了,不知道为什么,Assembly.Load时老是出错,exe文件是正常的,并且已设置成嵌入资源,程序代码如下:
using System;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.IO;namespace Reader
{
  public class LoadExe
    {
        [STAThread]
        static void Main(string[] args)
        {
            Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Reader.aaa.exe");
            byte[] bs = new byte[stream.Length];
            stream.Read(bs, 0, (int)stream.Length);
            Assembly asm = Assembly.Load(bs);            MethodInfo info = asm.EntryPoint;
            ParameterInfo[] parameters = info.GetParameters();
            if ((parameters != null) && (parameters.Length > 0))
                info.Invoke(null, (object[])args);
            else
                info.Invoke(null, null);
        }
    }
}
运行到
Assembly asm = Assembly.Load(bs);
时,报错:
Could not load file or assembly '1569465 bytes loaded from Reader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. An attempt was made to load a program with an incorrect format.换过几个exe文件,结果都一样,救命!!!

解决方案 »

  1.   

    这个问题有点意思,不过楼主可以分三步来走
    第一步就是直接载入文件执行
    第二步就是将文件处理成byte数组后载入执行
    第三步就是将资源处理成byte数组后载入执行
    关键是第一步现在是否实现?无他先关注一下
      

  2.   

    第一步是完全能实现的,只要不设置成嵌入资源,就可以根据路径执行.
    第二步没试,明天试一下,第三步就是我现在做的.
    不过,跟踪时发现,将资源处理成Byte数组是正常的,到载入执行时才出错.
      

  3.   

    “第一步是完全能实现的”
    如何实现?你不会说是用
    Process.Start();
    这个方法可不是载入后再执行注意我说的也是通过Assembly载入
    把你实现第一步的调试代码贴出来看看
      

  4.   

    如果以写病毒的方法来做的话,最好的办法是嘿嘿嘿(C#不知道行不行啊,C++是行的,偶试试C#)。
      

  5.   

    lz的exe依赖什么dll吧,至少这个外壳代码没什么大错
    把依赖的dll拷贝到外壳程序的目录上再试一下
    PS:有一个小错误
    info.Invoke(null,   (object[])args); -〉 info.Invoke(null,   new object[]{args});
      

  6.   

    你不好用程序域AppDomain,来执行Reader.aaa.exe AppDomain currentDomain=AppDomain.CurrentDomain //得到当前程序域
    currentDomain.ExecuteAssembly("Reader.aaa.exe");
      

  7.   

    经过研究发现,原来是测试exe不适合用这种方法运行.测试exe都是C++写的,在MSDN上查到,可能是由于 C++ 编译器从可执行文件中抽出重定位地址或 .Reloc 部分所导致的.没办法了,先天性缺陷.