恶意代码之勒索型恶意代码
勒索型恶意代码初步理解
- 勒索型恶意代码是一种以勒索为目的的恶意软件,黑客使用技术手段劫持用户设备或数据资产,并以此为条件向用户勒索钱财的一种恶意攻击手段。下面这个图是大致介绍一下勒索型恶意代码的一些基础知识。
- 勒索型恶意代码可以分为如下两类:
- 数据加密型勒索软件:是勒索软件最常见的形式,在这种形式下,勒索软件将受害者机器上的数据加密,并承诺受害者缴纳赎金后会协助其将数据恢复。
- 限制访问型勒索软件:这种形式不影响存储数据在设备上的数据,而是阻挠受害者访问设备,向受害者索要赎金,并显示在屏幕上。
- 勒索软件一般会伪装成权利部门的通知,报告受害人非法访问了网页内容,并说明他们必须支付罚款。

- 数据加密型的勒索软件加密方式一般有如下几种:
- 自定义加密方式:一般是病毒作者自编的加密算法,典型的例子就是
Apcalypse - 一层加密算法:使用一层加密算法一般都使用对称加密算法,也会有非对称加密算法
- 二层加密算法:使用对称和非对称结合,比如
RSA-AES加密算法 - 三层加密算法:基本是也是对称与非对称结合,比如
ECDH-ECDH-AES - 第三方加密模块:使用
WINRAR或者GNUPG等进行加密 - 注意:这些标准的加密算法被认为是无法破解的,而部分勒索病毒可以被破解的最大原因是标准加密算法使用不当
这里一般就涉及到密码分析学的知识了。
- 自定义加密方式:一般是病毒作者自编的加密算法,典型的例子就是
勒索型恶意代码之制作
-
对于恶意代码这些知识还是得会实战,基础概念了解再多到最后不会实战也没还是菜鸟,所以还是以实战为主。
-
首先我参考这篇博客使用
python制作一个勒索病毒:应急演练勒索样本参考 | Muhe’s Blog -
首先大致介绍一下我们所要制作简易勒索病毒的一些重要信息:
- 制作勒索型恶意代码的语言
python语言,制作勒索型恶意代码的类型数据加密型勒索软件,制作勒索型恶意代码的加密算法RSA加密算法 - 制作勒索型恶意代码的流程如下:
- 生成用于加密的
RSA公私钥文件 - 对指定文件格式进行加密,并定义函数实现加密过程,测试加密函数是否有问题
- 加密文件名默认为勒索病毒所在文件夹
- 生成勒索信
- 替换桌面壁纸
- 调用
cmd弹窗 - 打包python文件为exe文件
- 制作勒索型恶意代码界面流程
- 生成用于加密的
- 制作勒索型恶意代码的语言
python实现简易勒索病毒
生成公私钥
- 首先使用
rsa库生成1024位的rsa公私钥文件,先在本地生成两个文件,之后将生成的公钥和加密程序一起打包发送给受害者,这样就可以使用rsa加密的公钥对受害者的文件进行加密操作,或者是可以对随机生成的对称加密的密钥进行加密后发送回来。
1 | import rsa |


加密文件一加密单个文件
- 定义加密文件的函数,对单个文件进行加密操作,并将原始文件删除,生成的加密文件名为
.enc的后缀,例如1.txt读取文件数据后会被删除,并对文件数据进行加密,加密后会生成1.txt.enc文件。
1 | def rsa_encrypt(filename:str): |
加密文件二全盘文件加密
- 在
加密文件一中已经实现了单个文件加密,但是勒索病毒一般都是全盘文件加密,所以在这个部分我们要实现加密某个文件夹下的所有文件。 - 这个部分就需要我们遍历指定文件夹下的所有文件,遍历的时候还需要对该文件进行加密操作。
1 | # 遍历某个文件夹下的所有文件,并调用rsa_encrypt进行加密 |
- 最后定义一个
main函数,对指定文件夹进行加密
1 | if __name__ == '__main__': |
- 完整代码如下,切记请勿使用到违法的地方,对该代码使用不当从而产生的后果自行承担。
1 | import rsa |
脚本优化一自动指定加密目录
- 由于每个人计算机上的文件目录都是不一样的,所以就需要自动获取文件目录,这里的话就自动获取该勒索病毒程序所在的文件目录为例子。也就是加密会加密勒索病毒所在的文件目录下的文件以及文件夹。
1 | if __name__ == '__main__': |
脚本优化二调用Windows弹窗
- 调用
Windows弹窗,对被勒索的用户进行一些警告和提示,以便更贴近真实的勒索病毒。这里使用的是python自带的GUI库tkinter模块来调用Windows弹窗。 - 先尝试编写一下简单的弹窗

- 接下来将这个简单的弹窗修改一下警告即可
1 | # 生成警告弹窗 |
- 运行之后的效果如下:

脚本优化三替换桌面壁纸
- 同样是为了使勒索病毒更加真实,接下来我们要增加一个替换桌面壁纸的步骤,使得在运行该勒索病毒之后桌面壁纸会被改程序替换为一些勒索信息,或者是类似于黑客元素的图片信息。我们将使用
win32gui和win32con这两个库来实现。 - 代码如下:
1 | import win32gui |
脚本优化四生成勒索信
- 接下来就是生成一个勒索信
1 | import os |
- 由于勒索信和我们这个背景文件是该程序需要使用的资源,所以在加密的时候我们不能加密这两个文件,这个时候就需要在全盘加密这边设置一个白名单了。
1 | # 遍历某个文件夹下的所有文件,并调用rsa_encrypt进行加密 |
python勒索病毒打包
打包过程
- 优化后我们就需要将该程序打包成
exe文件,以便程序能在被勒索者的电脑上双击即可执行。这时就需要使用pyinstaller进行打包操作,这里pyinstaller直接使用pip安装就行。 - 但是这里还需要注意一点,在加密的时候还需要将我们的这个可执行文件加入加密的白名单,要不然就会出现我们的勒索程序也会被加密了。
- 使用
os库来获取该可执行文件的路径,如下图所示:


- 在打包之前还需要注意一点就是,打包后的
exe文件要正确引用这些资源文件,在python代码中,通常会使用相对路径来访问这些文件。
1 | # 生成资源文件目录访问路径 |
- 将如下两处进行修改


- 打包前还要注意
encrypt调用传递的参数应该encrypt(os.getcwd())这样方便我们测试,就不需要创建./test文件夹测试了。 - 设置好访问路径之后,随便找一个
ico图标,作为该exe的图标文件,打包命令如下:-add-data加载资源文件-i加载图标文件-F加载脚本文件w执行文件时不显示控制台
1 | pyinstaller --add-data './keys/pubkey.pem;res' --add-data './background.png;res' -i ".\logo.ico" -Fw ".\勒索恶意代码.py" |
- 打包好后就会在当前
py文件下生成一个dist文件夹,可执行程序在该文件夹下,接下来我们创建一个文件夹并且创建几个文件进行测试。

- 点击运行会发现文件被加密了

- 壁纸被替换成了如下:

- 勒索信也生成了,并且自动弹出:

完整加密代码
- 注意运行的时候不要将该程序放在有重要文件的程序中运行,造成重要文件丢失后果自负。
1 | import rsa |
python实现简易勒索病毒解密
- 相对于加密而言,解密勒索代码就比较容易实现,将该程序分为如下几个步骤:
- 首先读取
RSA私钥文件,并遍历.enc后缀的文件。 - 其次在遍历
.enc后缀文件时读取base64编码,将其解码。 - 将解码后的数据分组进行
RSA解密操作,解密后写入到原文件名中,并删除加密文件。 - 最后弹窗解密成功。
- 首先读取
- 实现代码如下,对着博客敲了一遍:
1 | import base64 |
- 进行打包操作:
1 | pyinstaller --add-data './des/privkey.pem;des' -Fw .\decrypt.py |
- 执行后成功解密:

勒索型恶意代码之逆向
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!

