共計 4790 個字符,預計需要花費 12 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通

2.33GB 的 sql 數據庫被后綴.[mr.hacker@tutanota.com] 加密
? ? 最近幾天有一個一卡通綜合管理平臺的數據庫被勒索病毒加密了,因為整個服務器只有 sql 數據庫是重要的,而且客戶拒絕向勒索病毒的 *** 繳納贖金,客戶聯系達思科技,希望達思科技能夠幫助修復數據庫。
? ? 由于中了勒索病毒的客戶越來越多,達思科技數據庫修復團隊也希望用這個案例,把整個勒索病毒加密的 sql 數據庫修復的過程展示出來,以便幫助更多的受到勒索病毒威脅的公司降低隨時。
一、SQL 數據庫修復前的準備工作
1.1 環境準備:
1、操作系統:推薦使用 windows server2016 或 2019
2、SQL 數據庫環境:從 2000 開始安裝(如何安裝,網上有相應的教程),按照版本依次安裝,可以安裝 SQL Server2000、2005、2008、2008R2、2012、2014、2016、2017、2019 等;
3、硬盤:修 SQL 數據庫對硬盤讀寫要求較高,推薦使用 m.2 接口(NVMe 協議)的 SSD 固態硬盤。
? ? ? 內存:建議 64GB 以上
1.2 判斷 SQL Server 數據庫的版本?
? ? 如果客戶可以準確提供 SQL 數據庫版本,就不需要自己檢測版本了,如果客戶不確定,我們也可以自己判斷,用 winhex 打開 sql 數據庫的 mdf 文件,跳轉到第 144 扇區,看看 00012060X4 和 00012060X5 兩個字節,看看 16BIT 對應的數值,就可以準確判斷 SQL 數據庫的版本,準確判斷 SQL 版本來確定我們修復數據庫時需要選擇的輸出環境的版本。
請看下圖,本案例庫數值是 661,說明版本是 SQL SERVER 2008R2
?
圖一:判斷數據庫版本
不同 SQL 數據庫版本對應的內部數據庫版本數字如下:
SQL Server 數據庫版本對應的內部數據庫版本(數字)SQL Server 2017869SQL Server 2016852SQL Server 2014782SQL Server 2012706SQL Server2012 CTP1684SQL Server 2008 R2665SQL Server 2008661SQL Server 2005 with vardecimal enabled612SQL Server 2005611SQL Server 2000539SQL Server 7.0515
注意:如果前 512 扇區或 2048 或 4096 扇區被病毒破壞,就需要客戶提供具體的數據庫版本了。
1.3 檢測 SQL 數據庫文件,判斷修復成功率
1、打開達思 SQL 數據庫修復軟件,點擊“檢查文件”,測試數據庫損壞程度。
?
圖二:檢測數據庫文件的損壞率
打開檢測文件對話框后,點擊“選擇文件”選取相應目錄后再點擊“開始檢測”。
?
圖三:檢測數據庫文件的損壞率
掃描結束后,重點看一下錯誤頁和空頁的數量和比例,如果空頁和壞頁比例小于 5% 以下,則數據庫修復成功率更高。
?
圖四:檢測數據庫文件的損壞率
請看圖,本案例的空頁為 4720,占比為 1.5%,錯誤頁(損壞的頁)為 142,占比幾乎為零,因此可以判斷,數據庫修復的成功率很高!
二、SQL 數據庫修復過程
1、關于參考庫(為什么需要參考庫?):
由于 SQL 數據庫的損壞的不確定性,很有可能系統表結構、存儲過程等重要參數受損的情況下,我們如果有同結構的好的老備份,達思軟件可以把好的表結構提取出來,再把數據庫填進去。
2、關于內置的表結構(達思軟件打開數據庫文件時對話框可選):
達思軟件內置了金蝶、用友、管家婆、浪潮、思迅等品牌的數十個版本的表結構,在沒有同結構的參考庫的情況下,可以選擇內置表結構作為參考庫,以提高數據庫修復的準確率和成功率。
3、達思軟件修復 SQL 數據庫的過程
在達思軟件界面中選擇“打開文件”,選擇需要修復的損壞的 sql 數據庫以及和壞庫同結構的好數據庫作為參照庫,開始修復損壞的 SQL 數據庫。
?
圖五:打開需要修復的數據庫文件
?
圖六:打開需要修復的數據庫文件
選擇好需要修復的損壞的 SQL 數據庫文件后,再選擇事先準備好的相同表結構的好庫做參照。
?
圖七:數據庫修復的必要選項
如果客戶可以提供老的備份作為參考,就優先選擇老的備份作為參考。
如果客戶無法提供老的備份作為參考,則可以選擇達思軟件內置的版本作為參考。
如果達思軟件內置也沒有,這可以在客戶的數據庫環境下新建同結構的空庫作為參考。
因此,參考庫的優先級為:同一個數據庫的好的老備份 同結構的的好庫 達思軟件內置的相同版本 相同環境下新建的表結構一樣的空庫
?
圖八:自動解析數據庫文件
選擇完成后,點擊“開始恢復”!
達思軟件將會自動修復,根據不同大小以及損壞程度的不同,一般在幾分鐘內就可以完成展開。
SQL 數據庫展開后,就可以在達思軟件界面中查看數據庫的修復結果和數據。如下圖:左側紅框中顯示的是所有表,右側藍框中是修復后的數據庫文件的解析結果報告。
?
圖九:數據庫文件解析結果報告
從左側欄中雙擊某個表,可以在右側看到修復后該表里的數據,這個時候可以檢查一下重要的表數據是否正確。
?
圖十:核對表數據是否正確
打開 SQL Server2008R2, 登陸 SQL SERVER,附加好的參照庫(提前復制出一份),然后,清空參考庫里面的表數據作為接收庫。
?
圖十一:在 sql server 里打開參考數據庫
?
圖十二:附加好的參考庫(清空表數據作為接收庫)
?
圖十三:附加好的參考庫(清空表數據作為接收庫)
?
圖十四:附加好的參考庫(清空表數據作為接收庫)
附加完成后,右鍵選擇該庫,選擇“新建查詢”輸入指令完成清除表數據
?
圖十五:新建查詢(清空表數據作為接收庫)
清空表數據:
清空表數據,保留視圖,存儲過程,函數,以及保留表約束、觸發器等等,可以給故障數據庫預留一個好的軀殼,把壞庫數據導入此軀殼。對用友、金蝶等數據庫恢復有時候能達到好的效果。
清除表數據有兩種方法:
一種用 delete from [表名],這種方法對于大數據庫,速度慢,會產生很大的日志信息,對于小庫,速度可以忽略;
另一種是 truncate table ?[表名],這種方法速度快,但清除不了具有外鍵的表數據。
在清除表數據時,可以采用兩種方法結合。
清除表數據時先禁用一切約束,清除完成以后再次啟用約束就行了。
1、采用 truncate table ?[表名] 清除表數據,排除具有外鍵屬性的表,清除語句獲取如下:
Use [要操作的庫名字]
———————————————————————–
select
? ?‘alter table ?[‘ +name+ ‘] nocheck constraint all; alter table ?[‘ +name + ‘] disable trigger all;
truncate table [‘+name+’];’
?+ ‘ alter table ?[‘ +name + ‘] enable trigger all; alter table ?[‘ +name + ‘] check constraint all;
?go’
?from sysobjects where id not in(select ? parent_object_id from sys.foreign_keys) and id not in(select ? referenced_object_id from sys.foreign_keys) and ?type=’U’
———————————————————————–
?上述 SQL 語句得到的結果,再次在 SQL 查詢分析器里運行。
2、用 delete from [表名] 清除表數據語句獲取如下
Use [要操作的庫名字]
———————————————————————–
SELECT ‘alter table ?[‘ +object_name (id) + ‘] nocheck constraint all; alter table ?[‘ +object_name (id) + ‘] disable trigger all;
?delete from [‘+object_name (id)+’];’ + ‘
?alter table ?[‘ +object_name (id) + ‘] enable trigger all; alter table ?[‘ +object_name (id) + ‘] check constraint all;
go’
TableName from sysobjects where ? type=’U’
———————————————————————–
3、有些 MS SQL Server 查詢分析器,對于 上述語句后面的 go,copy 出來后不自動換行,可以把運行結果保存到文本文件中,查詢分析器打開以后,會自動換行。如果不自動換行,sql 語句執行報錯。
4、可能遇到清除不了的某些表,查看它和哪些表關聯外鍵,先把兩個表的約束同時禁用,再用 delete from [表名],完了以后,兩個表同時恢復約束使用。
5、查看清除數據是否成功徹底,用下述語句查看記錄數量:
Use [要操作的庫名字]
———————————————————————–
SELECT object_name (i.id) TableName,
? ?rows as RowCnt
FROM sysindexes i
INNER JOIN sysObjects o
ON (o.id = i.id AND o.xType = ‘U ‘)
WHERE indid 2 and RowCnt 0
ORDER BY RowCnt desc
?
圖十六:清空參考庫的表數據
再從下面藍框中,單機“TableName”, 選擇所有表后,右鍵單擊復制
?
圖十七:清空參考庫的表數據作為接收庫
復制完后,在上面指令欄中粘貼所有復制內容
?
圖十八:清空參考庫的表數據作為接收庫
將光標點到最開始的位置,然后選擇執行
?
圖十九:清空參考庫的表數據作為接收庫
等待指令執行完畢后,再用最上面的查詢指令查詢一下結果,一般執行 2 - 3 遍后,所有表數據都會被清空(個別清除不了的情況需要逐條去清除數據)
?
圖二十:清空參考庫的表數據作為接收庫
?
圖二十一:清空參考庫的表數據作為接收庫
表數據清空后,用軟件把數據導入到目標庫里,在軟件界面選擇“導出數據”
?
圖二十二:導出數據庫
彈出連接設置界面,服務器名默認為:127.0.0.1(若該機器 SQL SERVER 版本有很多,后面需要加上“\SQL 版本號”,如 127.0.0.1\SQL2000 或 127.0.0.1\SQL2008R2 來指定輸出環境),
數據庫名則輸入清除完表數據的目標庫名稱。
?
圖二十三:數據庫連接設置
點擊確定,繼續彈出選擇界面,一般情況選擇全部數據類型即可,數據開始導出
?
圖二十四:導出數據庫
導出過程中,先生成所有表,目標庫中這些表已經存在
?
圖二十五:自動創建表,導出數據庫
創建完所有表后,開始自動導出數據。
?
圖二十六:導出數據庫
導出的時間根表的數量以及數據庫大小有關,為了提升導出的效率,推薦您使用高速的 SSD 固態硬盤以及大容量內存。
導出完成后,會生成導出結果報告
?
圖二十七:導出數據庫完成后生成結果報告
自此,數據庫修復導出完成
最后,我們來驗證一下修復的數據庫是否完整?經過驗證,這個客戶的一卡通綜合管理系統完美恢復成功!
?
圖二十八:在一卡通綜合管理平臺的應用系統里驗證修復后的數據庫是否成功
數據庫修復完成后,會自動生成 MDF 文件和 LDF 文件,把數據庫導入到應用中既可以完成驗證工作。
向 AI 問一下細節丸趣 TV 網 – 提供最優質的資源集合!