在DOS时代,我们经常采取加壳的方式来保护我们的程序,下面的代码是一个模仿加壳程序。
1. 我们有一个test.exe的WinForm程序,这是我们要加壳的目标程序。
2. 新建一个WinForm工程,删除Form1,然后新建一个类。如下。
3. 将test.exe 拷贝到该工程目录,作为嵌入式资源。
using
System;
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.IO;
namespace MyNamespace
{
public class Program
{
[STAThread]
static void Main( string [] args)
{
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( " MyNamespace.test.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 );
}
}
}
using System.Windows.Forms;
using System.Resources;
using System.Reflection;
using System.IO;
namespace MyNamespace
{
public class Program
{
[STAThread]
static void Main( string [] args)
{
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( " MyNamespace.test.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 );
}
}
}
编译后的程序会自动将资源中的目标文件加载运行。