nodejs教你加密舍友的windows桌面文件

作者:admin / 时间:1年前 (2018/11/11) / 分类:后端测试 / 阅读:519 / 评论:0

想必大家都听过勒索病毒永恒之蓝,今天给大家介绍的这个nodejs程序就是仿永恒之蓝去编写的。

我们先来看下效果:

加密后的效果

被加密后的文件图标统一被换成粉红色的小花,文件后缀名统一换成crypt,文件名称和大小基本不变。当然,可以加密就可以解密,后面我们会讲到如何解密文件。

下面我们先来看看如何用nodejs实现这样的加密效果:

递归地执行

首先读取桌面上的所有文件和文件夹,如果不是我们希望加密的文件类型但是是文件夹就递归执行加密函数,如果是我们希望加密的文件类型就直接执行加密函数。

加密函数

遍历到我们希望加密文件类型时,先读取文件,然后将读取到的buffer数据整体往前移5位放到新的buffer里,接着加密文件的后缀并放到被加密的文件的最末尾,然后获取文件后缀名的长度,再对长度右移一位以达到混淆的目的。之所以要获取并加密后缀名的长度,是因为解密的时候就知道取文件后缀名buffer的数据长度了,知道后缀名长度就能精准的取出文件的后缀名了。最后把这些数据写到被加密的文件里,写完数据后再将文件的后缀名统一改成crypt。代码的最下面有一个叫promise.all的函数,是为了等所有文件被加密完再执行后面的操作。至此,加密函数结束。

下面来说一下如何解密,知道了加密的原理,解密就简单多了。

解密函数

先去遍历当前目录下的文件后缀名是不是crypt,如果是就直接执行解密操作,如果不是就判断是不是文件夹,如果是文件夹就递归执行函数。

解密文件,先读取文件获取最后一个buffer的值,这个值就是原文件后缀名的长度,取到这个值后左移一位得到真正的文件名长度,然后从读到的buffer里截取到文件后缀名,将截取的后缀名buffer整体前移5位就能得到真正的文件后缀名了,剩下的buffer数据就是原文件的内容了,得到这个内容后整体后移5位就能得到加密前的数据,把加密前的数据写入对应的文件里,文件的数据就被恢复了,接着我们用解密后的后缀名把crypt替换掉,这时候文件就被完全还原了,下面这张是解密后的效果图:

文件被解密

双击打开文件,完全没有问题!

解密后的文件可以被打开

写了这么多,估计没几个人能看懂,诶,不说了,搬砖去了。


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。