2016年6月19日 星期日

開發 File Monitor

加密勒索病毒 CryptoLocker 是很難對付的病毒,中毒之後,重要的檔案都會被加密,而解密的 key 在對方手上,除非防毒軟體有找到這些 key ,不然除了付錢給對方,要求提供解密功能,用其它的方式,幾乎是不可能回復檔案。

但加密檔案,一定會動檔案作異動。這個時候若有可以監控指定目錄下的檔案異動程式,就可以得知是否有可疑的異動。以便使用者進一步作處理。

因此 File Monitor 這個程式,就是因應這樣的需求而作的。

本程式是用 Java 語言,在 Eclipse 下寫作而成。

1. 首先是大概確認使用案例,這裡用簡單的 UML Use case 表示

使用者可以有三個動作,一是執行或停止監控,一是設定指定監控目錄,最後則是設定選項,可以指定目錄、指定檔名過瀘、顯示訊息、撥放聲音檔、執行程式等。先實作紅色框的部分。

2.使用 Eclipse ,建立 FileMonitor 專案,並用 WindowBuilder 拉出如下的視窗

畫面分成三個部分,
    上方 panel,放 Monitor Directory: 文字和按鈕等元件
    中間 scrollPane,放顯示監控到的檔案異動 textArea
    下方 textPane,顯示訊息

3. 實作檔案監控的部分,需要使用到 WatchService API ,可參考 Watching a Directory for Changes ,使用它所提供 WatchDir example,原程式是命令模式執行,並用 System.out 輸出訊息,因此要修改為接收一個 textArea 作輸出。此外,把 WatchDir 實作 Runnable 界面,這樣就可以用 Thread 起動。因此也需加上 run() 的實作部分。


4.在 UI 使用 WatchDir,主要增加 button 的動作。

btnStart = new JButton("Start");
btnStart.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    try {
      wd = new WatchDir(Paths.get(textField.getText()), true, textArea);
      Thread t = new Thread(wd);
      t.setDaemon(true); 
      t.start();
      btnStart.setEnabled(false);
      btnStop.setEnabled(true);
    } catch (IOException e1) {
      textPane.setText(e1.getMessage());
    }
  }
});
panel.add(btnStart);

btnStop = new JButton("Stop");
btnStop.setEnabled(false);
btnStop.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    wd.stopRunning();
    btnStart.setEnabled(true);
    btnStop.setEnabled(false);
  }
});
panel.add(btnStop);

btnClear = new JButton("Clear");
btnClear.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    textArea.setText("");
  }
});
panel.add(btnClear);

5. 實際的執行結果如下

沒有留言:

張貼留言