笔者根据对“侠盗”勒索病毒V5.3新变种全面剖析
https://paper.seebug.org/911/"这篇文章的自我理解,隐掉一些细节之后,以大白话的方式来阐述GandCrab勒索病毒的加密原理,以及数据为什么无法解密。
笔者的理解可能有错漏之处,欢迎各位大佬多多指正。
算法简介
1、RSA加密算法是一种非对称加密算法。所谓非对称,就是指该算法需要一对密钥(公私钥),使用其中一个加密(公钥),则需要用另一个才能解密(私钥)。
2、Salsa加密算法是一种对称加密算法,加密和解密双方使用相同的密钥,加密后数据长度不变。
加密原理结构图
关键字解释:关键字根据自己的理解做了稍许改变。
RsaHackerPrivateKey =
病毒作者预先生成的RSA私钥,只有病毒作者知道。
RsaHackerPublicKey =
病毒作者预先生成的RSA公钥,勒索病毒体内嵌的RSA公钥。
SalsaPrivateKey = 随机生成的Key,用于Salsa20加密算法的Key
RsaLocalPrivateKey = 本地随机生成RSA私钥
RsaLocalPublicKey = 本地随机生成RSA公钥
SalsaFileKey = 随机生成的Key,用于Salsa20加密算法的Key。(就是这个Key加密的文件)
SrcUserFile = 待加密的文件数据
Data3 = 加密后的文件数据 =
"随机生成的SalsaFileKey"
使用Salsa20算法加密"SrcUserFile"后形成的加密数据
RAS加密函数定义 = typedef RSA(Key,待加密数据
)
Salsa20加密函数定义 = typedef Salsa20(Key,
待加密数据
)
加密原理
1、根据"勒索病毒体内嵌的RSA公钥(RsaHackerPublicKey )"使用RSA算法来加密"随机生成的SalsaPrivateKey",得到Data1
2、根据"随机生成的SalsaPrivateKey"使用Salsa20算法来加密"本地生成的RSA私钥RsaLocalPrivateKey",得到Data2
3、根据"本地生成的RSA公钥RsaLocalPublicKey "使用RSA算法来加密"随机生成的SalsaFileKey",得到Data4
4、根据"随机生成的SalsaFileKey"使用Salsa20算法来加密原始文件,得到Data3
核心:"勒索病毒体内嵌的RSA公钥(RsaHackerPublicKey )"加密了"本地生成的RSA私钥RsaLocalPrivateKey"
数据无法解密原因
1、勒索进程结束后,"随机生成的SalsaPrivateKey"、"随机生成的SalsaFileKey"就已经被内存释放了。只有"作者手中的RSA私钥(RsaHackerPrivateKey)"才能解密出这两个Key。
解密公式
1、根据"病毒作者手中的私钥(RsaHackerPrivateKey)"&"Data1"使用RSA算法来解密出"随机生成的SalsaPrivateKey"
2、根据"随机生成的SalsaPrivateKey"&"Data2"
使用Salsa20算法来解密出"本地生成的RSA私钥RsaLocalPrivateKey"
3、根据"本地生成的RSA私钥RsaLocalPrivateKey"&"Data4"
使用RSA算法来解密出"随机生成的SalsaFileKey"
4、根据"随机生成的SalsaFileKey"使用Salsa20算法来解密出原始文件