千家信息网

一卡通综合管理平台中了后缀.[mr.hacker@tutan

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,2.33GB的sql数据库被后缀.[mr.hacker@tutanota.com]加密最近几天有一个一卡通综合管理平台的数据库被勒索病毒加密了,因为整个服务器只有sql数据库是重要的,而且客户拒绝向勒
千家信息网最后更新 2024年11月21日一卡通综合管理平台中了后缀.[mr.hacker@tutan

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 2017869
SQL Server 2016852
SQL Server 2014782
SQL Server 2012706
SQL Server2012 CTP1684
SQL Server 2008 R2665
SQL Server 2008661
SQL Server 2005 with vardecimal enabled612
SQL Server 2005611
SQL Server 2000539
SQL 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文件,把数据库导入到应用中既可以完成验证工作。



0