被勒索病毒加密的文件如何破解?

想要硬刚勒索病毒,脱密加密的文件,是很难的。之前,我已经介绍了数字签名,勒索病毒使用了公钥加密另一个常用应用“数字信封”技术。

想要恢复勒索病毒加密的文件,可以破解黑客的公钥,或者破解黑客加密文件的临时对称密钥。而这2种算法,黑客都选用了目前可靠的算法,不可能被破解。

为什么不能被破解?这2种算法保障着全球信息系统的安全性,如果能通过破解加密算法恢复文件,现代的信息防护技术也就都失效了。因此,如果必须恢复文件,目前的办法就是支付赎金给黑客,然后加固系统。

数字信封

不严谨的描述一下:

1.随机选取对称密钥

2.用对称加密明文得到密文

3.用公钥加密对称密钥,得到加密的对称密钥。

4.将密文和加密后的对称密钥保存在一个文件中。

最后的数字信封中全部是密文,先要解密数字信封,必须要有公钥对应的私钥,先从数字信封中解密对称密钥,在解密密文。

上面只是最简单的数字信封原理,我们可以进一步了PKCS#7解数字信封的格式,参考文献3。

数 字 信 封 格 式 (不带签名)

版本号

0

接收者信息

版本号

证书序列号

对密钥的加密算法标识

加密的报文密钥

加密内容信息

数据类型

数据加密算法标识

加密的内容

数 字 信 封 格 式 (带签名)

版本号

0

接收者信息

版本号

证书序列号

对密钥的加密算法标识

加密的报文密钥

信息摘要算法

算法标识

加密内容信息

数据类型

数据加密算法标识

加密的内容(使用报文密钥加密)

证书

签名者证书和签发者证书(可选)

签名者信息

版本号(1)

签名者证书序列号

签名时间

签名算法

加密的签名值(使用报文密钥加密)

其它属性

勒索病毒

先看一下分析资料,

加密过程

1, 病毒运行时会随机生成RSA Session公私钥对,私钥命名为:计算机-#-加密时间.key。

此文件会被随机生成的AES-256 key对称加密,保存在计算机-#-加密时间.key.~xdata~ 文件的头部。

2, 病毒作者用事先准备好的RSA公钥,把随机生成的AES-256 key加密后,保存在 *.key.~xdata~文件的尾部。

3, 普通文件,用随机生成的AES-256 key进行加密后存在文件头部。(大于100M的文件,只加密前15M,小于等于100M,大于等于10M的,加密前10M,小于10M的文件,加密filesize & 0xFFFFFFF0的 全文)

4, 用RSA Session public key加密随机生成的AES-256 key,并保存在加密文件的尾部。

解密过程

5, 病毒作者手中的RSA private key可以用来解密*.key.~xdata~ 的文件尾,获取到文件加密的AES-256 key。

6, 用上一步解密出来的AES-256 key 解密*.key.~xdata~,可以获取完整的RSA Session private key。

7, 用RSA Session private key解密用户电脑上所有的*.~xdata~ 文件尾部,获取每个文件的AES-256 key。

8, 用上一步获取到的AES-256 key解密每个 被加密文件。

解密的重点在于黑客手上的RSA private key!黑客在解密时,是不能提供自己的私钥的,*.key.~xdata~文件中就是一个加密对称密钥,黑客只需要解密这个文件还原AESkey,这里和数字信封原理是一样的。

黑客还用了一些技巧,每个文件都采用不同的对称密钥,和临时RSA Session private key ,这里是数字信封的原理用了2遍,做了一次嵌套。

个人感觉RSA Session private key,没有给加密系统增加安全性。如果我来做,用主AES key加密每个文件的AES key。这个观点大家是否支持?

参考文献:

1.XData勒索病毒加密方式剖析及解密工具 https://www.freebuf.com/sectool/136540.html

2. WannaCry勒索病毒,是这么一回事 https://www.guokr.com/article/442167

3. PKCS1签名&PKCS7签名&PKCS7信封格式 http://blog.sina.com.cn/s/blog_6a17ac950102w1ka.html

### 关于勒索病毒加密解密算法实现代码分析 #### 混合加密机制概述 勒索软件常采用混合加密方案,即结合对称加密和非对称加密的优点。具体来说,在实际操作过程中,这类恶意程序会先利用高效的对称加密算法(如AES)快速处理大量数据文件;之后再借助安全性更高的非对称加密体制(比如RSA),专门用来保护前一步骤产生的临时秘钥[^1]。 #### AES 对称加密示例 下面给出一段基于Python语言编写的简单AES加密函数: ```python from Crypto.Cipher import AES import base64 def pad(text): while len(text) % 16 != 0: text += b' ' return text key = 'thisisaverysecret' cipher = AES.new(key, AES.MODE_ECB) plaintext = "example data" padded_plaintext = pad(plaintext.encode()) encrypted_text = cipher.encrypt(padded_plaintext) print(base64.b64encode(encrypted_text)) ``` 此段代码展示了如何使用PyCrypto库中的`AES`类来进行基本的字符串加密工作。需要注意的是,这里仅作为教学用途展示,并未考虑任何安全措施或异常情况处理[^2]。 #### RSA 非对称加密示例 对于RSA部分,则可以参考如下简单的公私钥生成以及消息签名验证过程: ```python from Crypto.PublicKey import RSA from Crypto.Signature.pkcs1_v1_5 import PKCS1_v1_5 as Signature_pkcs1_v1_5 from Crypto.Hash import SHA256 import base64 random_generator = Random.new().read rsa = RSA.generate(1024, random_generator) private_pem = rsa.exportKey() with open('private.pem', 'wb') as f: f.write(private_pem) public_pem = rsa.publickey().exportKey() with open('public.pem', 'wb') as f: f.write(public_pem) message = 'hello world'.encode('utf-8') hash_obj = SHA256.new(message) signer = Signature_pkcs1_v1_5(rsa) signature = signer.sign(hash_obj) base64_sign = base64.b64encode(signature).decode() verifier = Signature_pkcs1_v1_5(RSA.import_key(open('public.pem').read())) if verifier.verify(SHA256.new(message), signature): print("The signature is authentic.") else: print("The signature is not authentic.") ``` 上述例子说明了怎样创建一对可用于身份认证目的的RSA密钥对,并完成了一次完整的电子签名流程。同样地,这只是一个基础框架,真实环境中还需要加入更多防护手段以增强系统的健壮性和可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王森 出发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值