[C#]紀錄被綁架的資料庫還原

 近來出現一波針對威聯通(QNAP)網路儲存裝置(NAS)的勒索攻擊 Qlocker,用戶裝置一旦感染之後,NAS 中的所有檔案便會被惡意軟體使用 7zip 壓縮並加上密碼保護。據了解,Qlocker 的幕後主使者在短短五天之内,不法所得已高達 26 萬美元以上。






根據資安媒體 BleepingComupter 報導,從 2021 年 4 月 19 日起觀測到Qlocker 勒索攻擊的足跡,且受害者數量快速增加,世界各國陸續傳出災情。使用者的 QNAP NAS 裝置一旦感染 Qlocker,當中所有檔案便會被惡意軟體使用 7zip 壓縮並加上密碼保護。而當 Qlocker 完成壓縮後,用戶的 NAS 中便會出現一個顯示「!!!READ_ME.txt」的未加密文字檔,內文即是威脅用戶付出 0.01 枚比特幣的贖金,以取得解壓縮用的密碼。










如同上述文章,最近花錢消災,取得加密密碼後,才發現後續工程才是一大麻煩啊!



先分析加密的資料有那些問題~


  1. 超過20M以上不會被加密壓縮
  2. 中文檔案的壓縮檔打開後的檔名是亂碼
  3. .7z檔 無法直接用套件解壓縮原本使用  DoNetZip 的套件,但是一直出現錯誤(無法視為ZipFile)

解決方法
  •     直接用cmd 執行7zip 解壓縮

    //解壓縮
        {
            Process process = new Process();
            process.StartInfo.FileName = @"C:\Program Files\7-zip\7z.exe";
            process.StartInfo.Arguments = @"e E:\test.zip -o(檔案路徑) -p(密碼)";
            process.Start();
       }

但問題解了一個還有一個,中文檔案的名稱不對阿 ヽ(#`Д´)ノ

  • 原本打算先從cmd 取得檔名,然後利用.7z檔名取代內部錯誤的檔名,但是檔名是亂碼根本無法取得檔案。產生一個暫存資料夾,解壓縮一份檔案後取得資料夾內部檔案,利用File.Move()的方式,將檔名更換,最後刪掉暫存檔的資料。
最後發現這樣還是無法判斷執行檔到底有沒有work,需要產生一個log檔,原本打算用log4Net,但是電腦是斷網的方式處理那些中毒的資料。

程式範例:

Program.cs

using System;
using System.IO;
//log for .NET
using log4net;
using log4net.Config;

namespace SimpleSample
{
    class Program
    {
        //取得日誌記錄物件(ILog)
        private static ILog log = LogManager.GetLogger(typeof(Program));
        static void Main(String[] args)
        {
            try
            {
                //讀取設定檔
                XmlConfigurator.Configure(new FileInfo("C:\\log4netconfig.xml")); 
!!!我就一直卡在這裡啦~~~


                //各等級的log顯示,顯示的等級會根據設定檔的設定而不同
                //等級: debug < info < warn < error < fatal
                log.Debug("這是debug等級");//目前設定檔設定為info,debug等級的log不會輸出
                log.Info("這是info等級");
                log.Warn("這是warn等級");
                log.Error("這是error等級");
                log.Fatal("這是fatal等級");
            }
            catch (Exception e)
            {
                System.Console.WriteLine(e.Message);
                System.Console.WriteLine(e.StackTrace);
            }


            System.Console.ReadLine();
        }
    }
}


我的程式一直讀不到我的config檔,索性決定建一個文字檔自己寫入


string path = @"c:\temp\MyTest.txt"; if (!File.Exists(path)) { // Create a file to write to. using (StreamWriter sw = File.CreateText(path)) { sw.WriteLine("Hello"); } }

最後終於可以處理那些資料了,但是電腦搬運資料會無比得慢.......都不知道到底要不要救那些資料回來了◢▆▅▄▃崩╰(〒皿〒)╯潰▃▄▅▇◣


參考文件
  1. https://docs.microsoft.com/zh-tw/dotnet/api/system.io.file.createtext?view=net-5.0
  2. https://luckystar1216.pixnet.net/blog/post/13159723
  3. https://blog.xuite.net/f8789/DCLoveEP/39200386
  4. 族繁不及備載....








留言

這個網誌中的熱門文章

[HTML]標籤-下

論P, NP, NP-Complete, NP-Hard問題

[Python]基礎課程

[系統]解除電腦限制頻寬

[HTML]標籤-上

[AlaSQL] 多data查詢+累計

How to Check the MySQL Version

[SQL Sever] 日期時間

推薦使用的9款編程字體

類別型態 vs 基本型態