/*
* 功能:将dll保存到数据库中,然后取出来动态执行
* 目的:隐藏一些代码到dll中(dll代码不会被反编译,比如用vc写的dll)
* 作者:yx
* 日期:2005-12-5
*/
using System;
using System.Data;
using System.Reflection;
using System.Data.SqlClient;
using System.IO;
class BB
{
static string connString = "server=test;database=cqexpress;user id=sa;password=sa";
static void Main()
{
//SaveDllToDB();
SaveDllToDisk();
TestDll();
}
static void TestDll()
{
Assembly aBox = Assembly.LoadFrom("1.aspx");//实际上是一个dll
Type t = aBox.GetType("CSharpClassLibrary1.Class1");
MethodInfo m = t.GetMethod("foo",BindingFlags.Public | BindingFlags.Instance);
object o = Activator.CreateInstance(t);
string i =(string) m.Invoke(o,null);
Console.WriteLine(i);
}
static void SaveDllToDisk()
{
string FILE_NAME = "1.aspx";//dll名称,后缀任意
if (File.Exists(FILE_NAME))
{
Console.WriteLine("{0} already exists!", FILE_NAME);
return;
}
DataSet ds = new DataSet();
string sqlString = "select DisplayMask from Forums where ForumID=1";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand com = new SqlCommand();
com.CommandText = sqlString;
com.Connection = conn;
byte[] myData = (byte[])com.ExecuteScalar();
FileStream fs = new FileStream(FILE_NAME, FileMode.CreateNew);
BinaryWriter w = new BinaryWriter(fs);
w.Write(myData);
w.Close();
fs.Close();
}
static void SaveDllToDB()
{
DataSet ds = new DataSet();
string sqlString = "update Forums set DisplayMask=@dm where ForumID=1";//DisplayMask为image字段
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlCommand com = new SqlCommand();
com.CommandText = sqlString;
com.Connection = conn;
string FileName ="1.dll";
FileStream fs = new FileStream (FileName, FileMode.OpenOrCreate, FileAccess.Read);
byte[] MyData = new byte[fs.Length];
fs.Read(MyData, 0, (int)fs.Length);
fs.Close();
SqlParameter paramData = new SqlParameter( "@dm", SqlDbType.Binary );
paramData.Value = MyData;
com.Parameters.Add( paramData );
com.ExecuteNonQuery();
}
}
Type t = aBox.GetType("CSharpClassLibrary1.Class1");
注意这里的dll不要用c#写
浙公网安备 33010602011771号