.NET 中的動態編譯(生成exe檔案)

iDotNetSpace發表於2009-05-06

可能很多人都看過灰鴿子中的 配置伺服器端,點選後彈出一個視窗,選擇幾項之後,點生成,就可以生成木馬的伺服器端(一個exe檔案),只要這個exe檔案執行在誰的電腦上,那個電腦就成了肉雞。^_^ 不過我不會這招。

我今天是想做個能夠通過一個exe檔案生成另一個exe檔案的東東。
首先新建個winform應用程式,程式碼如下

Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.CodeDom.Compiler;
using Microsoft.CSharp;

namespace Client
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //原始碼模板
        string codeBase = @"
                    using System;
                    using System.Collections.Generic;
                    using System.Text;

                    namespace lhking
                    {
                        public class Class1
                        {
                             static void Main()
                             {
                                  System.Windows.Forms.Application.Run(new Server.Form1());
                             }
                        }
                    }";
        private void button1_Click(object sender, EventArgs e)
        {
            if (this.textBox1.Text.Length > 0)
            {
                string code = codeBase;

                //編譯生成exe
                CompileCode(code, System.IO.Path.Combine(Application.StartupPath, this.textBox1.Text + ".exe"));
            }
            else MessageBox.Show("檔名不能為空!");
        }
        private CompilerResults CompileCode(string SourceCode, string ExeuteFileName)
        {
            CSharpCodeProvider provider = new CSharpCodeProvider();
            CompilerParameters cp = new CompilerParameters(new string[] { "System.dll", "Server.DLL", "System.Windows.Forms.dll" }, ExeuteFileName, false);

            cp.CompilerOptions = "/target:winexe";
            cp.GenerateExecutable = true;

            CompilerResults cr = provider.CompileAssemblyFromSource(cp, SourceCode);
            return cr;
        }
    }

 

然後新建個類庫,剛才的那個程式引用這個類庫,類庫裡新建個winform視窗。
這個類庫就是彈出個對話方塊
private void Form1_Load(object sender, EventArgs e)
        {
            MessageBox.Show("這是動態生成的exe檔案哦!");
        }
這樣就完成了。


說明下缺點:這樣做,生成的那個exe檔案,如果要想執行,同目錄下必須有那個類庫。??

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-594315/,如需轉載,請註明出處,否則將追究法律責任。

相關文章