将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)

1. 我们有一个test.exe的WinForm程序,这是我们要加壳的目标程序。
2. 新建一个WinForm工程,删除Form1,然后新建一个类。如下。
3. 将test.exe 拷贝到该工程目录,作为嵌入式资源。

ExpandedBlockStart.gif 代码
using  System;
using  System.Windows.Forms;
using  System.Resources;
using  System.Reflection;
using  System.IO;
namespace  test
{
    
static   class  Program
    {
        [STAThread]
        
static   void  Main( string [] args)
        {
            Stream stream 
=  Assembly. GetExecutingAssembly_r(). GetManifestResourceStream_r( " test.Code.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_r();
            
if  ((parameters  !=   null &&  (parameters.Length  >   0 ))
                info.Invoke(
null , ( object [])args);
            
else
                info.Invoke(
null null );
        }
    }
}

编译后的程序会自动将资源中的目标文件加载运行。继续发挥一下,我们可以增加启动密码;将目标程序进

---------------------------------------------------------------------------------------------------

ExpandedBlockStart.gif 代码
Stream   streamObj    =     this . GetType_r().Assembly. GetManifestResourceStream_r( " Test_ExeInResource.AllTest.exe " );  
   
byte []   b    =     new     byte [streamObj.Length];  
streamObj.Read(b,   
0 ,   b.Length);  
   
Assembly   a   
=    Assembly.Load(b);  
Type[]   mytypes   
=    a. GetTypes_r();  
BindingFlags   flags   
=    (BindingFlags.NonPublic    |    BindingFlags.Public    |     
BindingFlags.Static   
|    BindingFlags.Instance    |    BindingFlags.DeclaredOnly);  
   
foreach (Type   t    in    mytypes)  
{  
            MethodInfo[]   mi   
=    t. GetMethods_r(flags);  
            Object   obj   
=    Activator.CreateInstance(t);  
   
           
foreach (MethodInfo   m    in    mi)  
           {  
                  
if    (m.Name    ==     " Main " )  
                 {  
                        MainDelegate   md   
=     (MainDelegate)Delegate.CreateDelegate( typeof (MainDelegate),   m);  
                       md.BeginInvoke(
null ,    null );  
                }  
          }  
}

转载于:https://www.cnblogs.com/sofire/archive/2010/08/02/1790592.html

猜你喜欢

转载自blog.csdn.net/weixin_34138255/article/details/94147897