《電子技術應用》
您所在的位置:首頁 > 通信與網絡 > 業界動態 > 網絡安全編程:U盤防御軟件

網絡安全編程:U盤防御軟件

2021-07-31
來源:計算機與網絡安全
關鍵詞: U盤 防御軟件

  在早期互聯網還不發達的時候,病毒都是通過軟盤、光盤等媒介進行傳播的。到后來互聯網被普及以后,通過互聯網進行傳播的病毒大面積地相繼出現。雖然軟盤已經被淘汰,但是并沒有使移動磁盤的病毒減少。相反,U盤的普及使得移動磁盤對病毒的傳播更加方便。U盤的數據傳輸速度和數據存儲容量等多方面都比軟盤要先進很多,因此,軟盤可以傳播病毒,U盤當然也可以傳播病毒。

  通過U盤來傳播病毒通常是使用操作系統的自動運行功能,并配合U盤下的Autorun.inf文件來實現的。著名的“擺渡攻擊”就是依靠此Autorun.inf來進行實施的。如果讓操作系統不自動運行移動磁盤,或者保證移動磁盤下不存在Autorun.inf文件,那么通過U盤感染病毒的幾率就小很多了。

  1. 通過系統配置禁止自動運行

  先來介紹如何通過系統配置禁止U盤中Autorun.inf的自動運行。通常情況下需要進行兩方面的設置,一方面是通過“管理工具”中的“服務”來進行設置,另一方面是通過“組策略”來進行設置。一般這兩處都需要進行修改。下面分別介紹如何對這兩處進行設置。

  先來看如何在“服務”中進行設置。首先打開控制面板中的“管理工具”,然后找到“服務”,將其雙擊打開。在服務列表中找到名稱為“Shell Hardware Detection”的服務,雙擊該服務,打開“Shell Hardware Detection的屬性”對話框。單擊“停止”按鈕將該服務停止,再把“啟動類型”修改為“已禁用”狀態,如圖1所示。

  圖1  禁用“Shell Hardware Detection”服務

  將服務中的“Shell Hardware Detection”禁用后,再對“組策略”進行設置。首先在“運行”中輸入“gpedit.msc”,然后依次單擊左邊的樹形控件“計算機配置”→“管理模板”→“系統”,再在右邊雙擊“關閉自動播放”選項,彈出“關閉自動播放屬性”對話框。在“設置”選項卡中選擇“已啟用”單選項,在“關閉自動播放”處選擇“所有驅動器”選項,設置完成后單擊“確定”按鈕。再到左邊的樹形控件中選擇“用戶配置”→“管理模板”→“系統”,到右邊找到“自動關閉播放”選項,設置方法同上,如圖2所示。

  圖2  組策略中的“關閉自動播放”

  通過以上設置,的確可以相對有效地保護計算機不中U盤相關的病毒。不過,不能因此而滿足,因為目的是打造一個U盤防御的軟件。

  2. 打造一個簡易的U盤防御軟件

  這里打造一個U盤防火墻,當插入U盤時會有提示,并且自動檢查U盤下是否有Autorun.inf文件,并解析Autorun.inf文件。除此之外,通過U盤防火墻可以打開U盤,從而安全地使用U盤。

  如何才能知道有U盤被插入電腦呢?可以使用定時器不斷地檢查,也可以開啟一個線程不斷地檢查,還可以通過Windows的消息得到通知。前兩種方法笨了些,這里主動不斷地檢查是否有U盤插入,不如被動地等待Windows的消息來通知。

  在Windows下有一個消息可以通知應用程序計算機配置發生了變化,這個消息是WM_ DEVICECHANGE。消息過程定義如下:

  LRESULT CALLBACK WindowProc(

  HWND hwnd,

  UINT uMsg,

  WPARAM wParam,

  LPARAM lParam

  );

  該消息通過兩個附加參數來進行使用,其中wParam表示設備改變的事件,lParam表示事件對應的數據。要得到設備被插入的消息類型,因此wParam的取值為DBT_DEVIC EARRIVAL,而該消息對應的數據類型為DEV_BROADCAST_HDR,該結構體的定義如下:

  typedef struct _DEV_BROADCAST_HDR {

  DWORD dbch_size;

  DWORD dbch_devicetype;

  DWORD dbch_reserved;

  } DEV_BROADCAST_HDR;

  typedef DEV_BROADCAST_HDR *PDEV_BROADCAST_HDR;

  在該結構體中,主要看的是dbch_devicetype,也就是設備的類型。如果設備類型為DBT_DEVTYP_VOLUME,則把當前結構體轉換為DEV_BROADCAST_VOLUME結構體,該結構體定義如下:

  typedef struct _DEV_BROADCAST_VOLUME {

  DWORD dbcv_size;

  DWORD dbcv_devicetype;

  DWORD dbcv_reserved;

  DWORD dbcv_unitmask;

  WORD dbcv_flags;

  } DEV_BROADCAST_VOLUME;

  typedef DEV_BROADCAST_VOLUME *PDEV_BROADCAST_VOLUME;

  在該結構體中,主要看的是dbcv_unitmask和dbcv_flags。dbcv_unitmask通過位表示邏輯盤符,第0位表示A盤,第1位表示B盤。dbcv_flags表示受影響的盤符或媒介,其值為0時表示U盤或移動硬盤。

  上面介紹了WM_DEVICECHANGE消息,由于是在MFC下進行開發的,因此可以使用OnDeviceChange()消息響應函數來代替WM_DEVICECHANGE消息。雖然使用了OnDeviceChange()消息響應函數而沒有使用WM_DEVICECHANGE,但是響應函數的附加參數與WM_DEVICECHANGE相同。OnDeviceChange()函數定義如下:

  afx_msg BOOL OnDeviceChange( UINT nEventType, DWORD dwData );

  3. 通過OnDeviceChange()消息獲得被插入U盤的盤符

  下面使用MFC下的OnDeviceChange()消息響應函數來編寫一個獲取被插入U盤的盤符的小程序,為編寫U盤防火墻做簡單的準備工作。首先來添加消息映射,具體代碼如下:

  BEGIN_MESSAGE_MAP(CUFirewallDlg, CDialog)

  //{{AFX_MSG_MAP(CUFirewallDlg)

  ON_MESSAGE(WM_DEVICECHANGE, OnDeviceChange)

  ON_WM_SYSCOMMAND()

  ON_WM_PAINT()

  ON_WM_QUERYDRAGICON()

  //}}AFX_MSG_MAP

  END_MESSAGE_MAP()

  在頭文件中添加消息響應函數的定義,具體如下:

  // Generated message map functions

  //{{AFX_MSG(CUFirewallDlg)

  afx_msg BOOL OnDeviceChange(UINT nEventType, DWORD dwData); // 消息響應函數

  virtual BOOL OnInitDialog();

  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

  afx_msg void OnPaint();

  afx_msg HCURSOR OnQueryDragIcon();

  //}}AFX_MSG

  最后添加消息響應函數的實現,具體代碼如下:

  BOOL CUFirewallDlg::OnDeviceChange(UINT nEventType, DWORD dwData)

  {

  if ( nEventType == DBT_DEVICEARRIVAL )

  {

  PDEV_BROADCAST_HDR pDevHdr = (PDEV_BROADCAST_HDR)dwData;

  if ( pDevHdr->dbch_devicetype == DBT_DEVTYP_VOLUME )

  {

  PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pDevHdr;

  // pDevVolume->dbcv_flags 為 0 表示為 U 盤

  if ( pDevVolume->dbcv_flags == 0 )

  {

  CString DriverName;

  char i;

  // 通過將 pDevVolume->dbcv_unitmask 移位來判斷盤符

  DWORD dwUnitmask = pDevVolume->dbcv_unitmask;

  for (i = 0; i < 26; ++i)

  {

  if ( dwUnitmask & 0x1)

  {

  break;

  }

  dwUnitmask = dwUnitmask 》 1;

  }

  if ( i >= 26 )

  {

  return ;

  }

  DriverName.Format(“檢測到的 U 盤盤符為: %c \r\n”, i + 'A‘);

  // 顯示盤符

  MessageBox(DriverName);

  }

  }

  }

  }

  將其編譯連接并運行,插入一個U盤,得到如圖3所示的提示。

  圖3  檢測到的U盤盤符

  上面的這段代碼可以將其封裝為一個函數,封裝后的函數定義如下:

  VOID GetDriverName(DWORD dwData);

  在使用類似DBT_DEVICEARRIVAL的以DBT_開頭的宏時,應包含頭文件“dbt.h”文件。

  4. U盤防火墻的完善

  前面已經獲得了被插入U盤的盤符,接下來就可以對U盤上的Autorun.inf文件進行分析,并刪除要運行的程序,還可以安全地打開U盤。改寫OnDeviceChange()函數,以實現要完成的功能,具體代碼如下:

  BOOL CUFirewallDlg::OnDeviceChange(UINT nEventType, DWORD dwData)

  {

  if ( nEventType == DBT_DEVICEARRIVAL )

  {

  GetDriverName(dwData);

  MessageBox(DriverName);

  if ( DriverName != “” )

  {

  m_SafeOpen.EnableWindow(TRUE);

  CString File = DriverName;

  File += “\\autorun.inf”;

  char szBuff[MAX_PATH] = { 0 };

  if ( GetFileAttributes(File.GetBuffer(0)) == -1 )

  {

  m_SafeOpen.EnableWindow(FALSE);

  return FALSE;

  }

  // 獲取 open 后面的內容

  GetPrivateProfileString(“AutoRun”,“open”,

  NULL,szBuff,MAX_PATH,File.GetBuffer(0));

  CString str;

  str = “是否刪除:”;

  str += szBuff;

  if ( MessageBox(str, NULL, MB_YESNO) == IDYES )

  {

  // 刪除要執行的文件

  DeleteFile(str.GetBuffer(0));

  }

  }

  }

  else if ( nEventType == DBT_DEVICEREMOVECOMPLETE )

  {

  m_SafeOpen.EnableWindow(FALSE);

  }

  return TRUE;

  }

  安全打開U盤的實現代碼如下:

  void CUFirewallDlg::OnBtnSafeopen()

  {

  // TODO: Add your control notification handler code here

  ShellExecute(NULL, “open”, DriverName.GetBuffer(0), NULL, NULL, SW_SHOW);

  }

  用DeleteFile()函數刪除U盤中要運行的程序可能會失敗,因為有時U盤并沒有完全準備好。可以通過判斷來完成,但這里就不給出代碼了,大家可自行修改完成。代碼中涉及兩個新的API函數,分別是GetPrivateProfileString()和ShellExecute()。這兩個函數的功能分別是獲取配置文件中指定鍵的鍵值、運行指定的文件或文件夾。

  在上面的程序中,通過提示讓用戶選擇是否要刪除U盤中要被執行的文件。如果用戶對此并沒有太多的了解和認識的話,很有可能不刪除。如果刪了本不該刪的文件,那么用戶對該軟件的友好感便會降低。應該如何做呢?應該建立一個白名單和黑名單,無論是通過散列進行比較,還是通過文件名進行比較,都可以。當然,越精確的匹配方法越好。這樣,就可以提早為用戶進行判斷了,然后給出一個安全建議,這樣不但提高了軟件的友好度,而且會顯得相對較為專業。




電子技術圖片.png

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
伊人久久久大香线蕉综合直播| 亚洲调教视频在线观看| 欧美激情视频网站| 老司机免费视频一区二区| 久久精品国产一区二区三区| 欧美一区二区三区在线观看| 午夜一区二区三视频在线观看 | 香蕉视频成人在线观看| 亚洲免费视频中文字幕| 亚洲一区二区三区激情| 中文亚洲字幕| 亚洲午夜性刺激影院| 一区二区三区免费看| 99亚洲一区二区| 一本久久a久久免费精品不卡| 日韩视频欧美视频| 一本色道久久综合狠狠躁篇怎么玩 | 欧美日韩一区二区在线| 欧美日韩在线大尺度| 欧美日韩一区视频| 国产精品v亚洲精品v日韩精品| 国产精品video| 国产精品丝袜91| 国产亚洲精品福利| 黄色日韩网站视频| 亚洲高清不卡一区| 亚洲精品一区在线观看| 中文有码久久| 久久成年人视频| 亚洲国产免费| 一区二区三区四区国产精品| 亚洲女人天堂成人av在线| 久久成人这里只有精品| 免费成人高清在线视频| 欧美日产一区二区三区在线观看| 欧美视频一区二区在线观看| 国产目拍亚洲精品99久久精品| 国产综合精品| 91久久久久| 亚洲一区区二区| 亚洲第一在线综合在线| 日韩一级大片在线| 午夜伦理片一区| 久久综合给合| 欧美日韩一区自拍| 国产日产精品一区二区三区四区的观看方式 | 国产精品久久久久影院色老大| 国产三级精品三级| 亚洲激情视频在线观看| 亚洲性av在线| 亚洲黄一区二区三区| 亚洲视频综合| 久久免费国产精品| 欧美日韩不卡合集视频| 国产欧美日韩在线| 亚洲激情在线播放| 亚洲欧美日韩久久精品| 亚洲靠逼com| 欧美一区二区在线看| 女女同性女同一区二区三区91| 国产精品igao视频网网址不卡日韩| 国产亚洲成精品久久| 日韩视频一区二区| 欧美一区综合| 亚洲一区二区三区高清不卡| 久久亚洲影音av资源网| 欧美午夜欧美| 亚洲成色777777在线观看影院| 亚洲一本大道在线| 亚洲美女福利视频网站| 久久国产免费| 欧美图区在线视频| 在线观看国产精品淫| 亚洲免费一在线| 中文一区二区| 美脚丝袜一区二区三区在线观看| 国产精品久久久久影院色老大| 在线精品视频一区二区三四| 亚洲欧美日韩天堂| 亚洲视频电影在线| 欧美大胆a视频| 国产一区二区丝袜高跟鞋图片| 一本色道久久综合亚洲二区三区| 亚洲国产欧美久久| 久久国产精品久久精品国产| 国产精品v欧美精品v日韩精品| 亚洲国产免费看| 欧美中在线观看| 午夜精品久久久久久久| 欧美日韩黄色大片| 在线免费观看日本一区| 欧美在线免费一级片| 午夜精品在线| 欧美视频在线观看| 亚洲人成亚洲人成在线观看图片 | 亚洲性夜色噜噜噜7777| 一区电影在线观看| 欧美**字幕| 激情亚洲网站| 久久aⅴ国产欧美74aaa| 欧美在线视频免费观看| 国产精品高潮呻吟久久| 一本色道久久88精品综合| 日韩视频一区二区| 欧美成人精品福利| 极品中文字幕一区| 欧美在线日韩| 久久久国际精品| 国产亚洲毛片在线| 亚洲欧美国产日韩中文字幕| 亚洲一区美女视频在线观看免费| 欧美日韩免费在线观看| 亚洲精品国产系列| 99re在线精品| 欧美日韩八区| 亚洲精品一区二区三区99| 亚洲精品一区二区三区樱花| 欧美电影打屁股sp| 亚洲国内精品| 亚洲理伦在线| 欧美日韩精品系列| 一区二区免费在线播放| 一区二区三区 在线观看视| 欧美日韩精品伦理作品在线免费观看 | 最新中文字幕一区二区三区| 亚洲乱码国产乱码精品精可以看| 欧美成人午夜激情在线| 亚洲国产精品久久久久秋霞不卡 | 日韩一级黄色av| 欧美日韩免费区域视频在线观看| 日韩视频在线一区二区三区| 在线视频亚洲一区| 欧美午夜国产| 亚洲影视九九影院在线观看| 久久xxxx| 一区二区三区中文在线观看 | 午夜激情综合网| 国产视频欧美视频| 亚洲二区在线| 欧美国产一区二区在线观看| 亚洲毛片在线免费观看| 亚洲一区二区视频在线| 国产精品一区二区三区四区五区| 午夜亚洲性色福利视频| 可以看av的网站久久看| 亚洲日本中文字幕| 亚洲在线1234| 国产视频观看一区| 91久久黄色| 欧美日韩在线视频一区| 亚洲欧美另类中文字幕| 老牛嫩草一区二区三区日本| 亚洲精品国产品国语在线app| 亚洲专区欧美专区| 国产亚洲第一区| 亚洲精品在线二区| 国产精品v日韩精品| 午夜视频一区在线观看| 免费观看30秒视频久久| 日韩一二三在线视频播| 欧美在线播放一区二区| 在线观看国产日韩| 亚洲一区二区三区四区视频| 国产网站欧美日韩免费精品在线观看| 亚洲国产日韩在线| 欧美四级电影网站| 欧美一区视频在线| 欧美精品三级在线观看| 午夜精彩国产免费不卡不顿大片| 免费亚洲婷婷| 亚洲你懂的在线视频| 免费日韩av| 亚洲在线一区二区三区| 欧美激情区在线播放| 亚洲欧美第一页| 欧美激情视频网站| 性欧美暴力猛交69hd| 欧美日韩精品免费观看| 欧美一区高清| 欧美图区在线视频| 91久久国产综合久久| 国产九九精品视频| 亚洲免费电影在线观看| 国产区二精品视| 宅男噜噜噜66一区二区66| 国内在线观看一区二区三区| 亚洲午夜久久久久久久久电影院| 国产一区二区观看| 亚洲专区欧美专区| 亚洲福利视频一区二区| 欧美一区三区二区在线观看| 亚洲精品视频一区二区三区| 久久久一区二区三区| 一区二区激情视频| 欧美成人免费va影院高清| 欧美亚洲免费| 国产精品久久久久一区| 亚洲精品乱码久久久久久久久 | 亚洲一区日本| 亚洲国产精品一区二区第一页|