4、安全开发-Python-蓝队项目流量攻击分析文件动态监控图片隐写技术
用途:个人学习笔记,有所借鉴,欢迎指正!
总结:
(1)使用python脚本Scapy库实现指定网卡的流量抓包分析
(2)使用python脚本Watchdog实现指定目录文件行为监控
(3)兴趣拓展python脚本实现:将文本信息隐写入图片,图片效果不变
一、Python-蓝队项目-Scapy库完成网卡流量抓包分析
脚本简单功能:对指定网卡(可指定端口)的流量进行抓包,可拓展上传平台分析。
1、漏洞攻击-先监控流量发现攻击 预警(流量监控)
from scapy.all import *
def handelPacket(packet):print(packet.show())#可进一步对数据包分析,监控恶意流量if __name__ == '__main__':# sniff(prn=handelPacket,count=0) iface='以太网适配器 以太网 5',# 显示网卡信息show_interfaces()sniff(filter='tcp port 5000',iface='Software Loopback Interface 1',prn=handelPacket, count=0, store=0)#iface参数:填网卡名称或者网卡编号
2、详细解释参考:blog.51cto.com/frytea/4224260
二、Python-蓝队项目-Watchdog文件行为监控
脚本功能:监控指定的网站目录 ,如有新增、删除、修改、移动文件等就能捕获分析
1、文件分析-发现新出文件 将文件上传至平台分析(文件监控)
import sys,time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandlerclass FileEventHandler(FileSystemEventHandler):# def on_moved(self, event):# print(f"file moved from {event.src_path} to {event.dest_path}.")def on_created(self, event):print(f"file created:{event.src_path}.")#手动分析新增文件,或上传平台分析......预警def on_deleted(self, event):print(f"file deleted:{event.src_path}.")# def on_modified(self, event):# print(f"file modified:{event.src_path}.")if __name__ == "__main__":src_path = '.' #指定监控的目录, .是指当前脚本所在目录event_handler = FileEventHandler()observer = Observer()observer.schedule(event_handler, path=src_path, recursive=True)print("Monitoring started")observer.start()try:while True:time.sleep(1)except KeyboardInterrupt:observer.stop()observer.join()
三、Python-兴趣拓展-图片隐写技术
脚本功能:可以将指定文本隐藏在图片当中并不影响图片效果,也可以解码查看图片中的隐藏信息。
#!/usr/bin/env python3
#coding=utf-8"""Encode png image via command-line.Usage:imageEncoding (-e|encode) <originImage> [<text>] [<encodedImage>]imageEncoding (-d|decode) <encodedImage>Options:-h,--help 显示帮助菜单-e 加密-d 解密Example:imageEncoding -e coffee.png hello textOrFileToEncode encodedImage.pngimageEncoding -d encodedImage.png
"""
from PIL import Image
from docopt import docopt"""
取得一个 PIL 图像并且更改所有值为偶数(使最低有效位为 0)
"""
def RGBAmakeImageEven(image):pixels = list(image.getdata()) # 得到一个这样的列表: [(r,g,b,t),(r,g,b,t)...]evenPixels = [(r>>1<<1,g>>1<<1,b>>1<<1,t>>1<<1) for [r,g,b,t] in pixels] # 更改所有值为偶数(魔法般的移位)evenImage = Image.new(image.mode, image.size) # 创建一个相同大小的图片副本evenImage.putdata(evenPixels) # 把上面的像素放入到图片副本return evenImagedef RGBmakeImageEven(image):pixels = list(image.getdata()) # 得到一个这样的列表: [(r,g,b,t),(r,g,b,t)...]evenPixels = [(r>>1<<1,g>>1<<1,b>>1<<1) for [r,g,b] in pixels] # 更改所有值为偶数(魔法般的移位)evenImage = Image.new(image.mode, image.size) # 创建一个相同大小的图片副本evenImage.putdata(evenPixels) # 把上面的像素放入到图片副本return evenImage"""
内置函数 bin() 的替代,返回固定长度的二进制字符串
"""
def constLenBin(int):binary = "0"*(8-(len(bin(int))-2))+bin(int).replace('0b','') # 去掉 bin() 返回的二进制字符串中的 '0b',并在左边补足 '0' 直到字符串长度为 8return binary"""
将字符串编码到图片中
"""
def RGBAencodeDataInImage(image, data):evenImage = RGBAmakeImageEven(image) # 获得最低有效位为 0 的图片副本binary = ''.join(map(constLenBin,bytearray(data, 'utf-8'))) # 将需要被隐藏的字符串转换成二进制字符串if len(binary) > len(image.getdata()) * 4: # 如果不可能编码全部数据, 抛出异常raise Exception("Error: Can't encode more than " + len(evenImage.getdata()) * 4 + " bits in this image. ")encodedPixels = [(r+int(binary[index*4+0]),g+int(binary[index*4+1]),b+int(binary[index*4+2]),t+int(binary[index*4+3])) if index*4 < len(binary) else (r,g,b,t) for index,(r,g,b,t) in enumerate(list(evenImage.getdata()))] # 将 binary 中的二进制字符串信息编码进像素里encodedImage = Image.new(evenImage.mode, evenImage.size) # 创建新图片以存放编码后的像素encodedImage.putdata(encodedPixels) # 添加编码后的数据return encodedImagedef RGBencodeDataInImage(image, data):evenImage = RGBmakeImageEven(image) # 获得最低有效位为 0 的图片副本binary = ''.join(map(constLenBin,bytearray(data, 'utf-8'))) # 将需要被隐藏的字符串转换成二进制字符串if len(binary)%3 != 0: # 将转换的比特流数据末位补零,使其长度为3的倍数,防止其在下面重新编码的过程中发生越界rema = len(binary)%3binary = binary+('0'*(3-rema))
# print(len(binary))if len(binary) > len(image.getdata()) * 3: # 如果不可能编码全部数据, 抛出异常raise Exception("Error: Can't encode more than " + len(evenImage.getdata()) * 3 + " bits in this image. ")encodedPixels = [(r+int(binary[index*3+0]),g+int(binary[index*3+1]),b+int(binary[index*3+2])) if index*3 < len(binary) else (r,g,b) for index, (r,g,b) in enumerate(list(evenImage.getdata()))] # 将 binary 中的二进制字符串信息编码进像素里encodedImage = Image.new(evenImage.mode, evenImage.size) # 创建新图片以存放编码后的像素encodedImage.putdata(encodedPixels) # 添加编码后的数据return encodedImage"""
从二进制字符串转为 UTF-8 字符串
"""
def binaryToString(binary):index = 0string = []rec = lambda x, i: x[2:8] + (rec(x[8:], i-1) if i > 1 else '') if x else ''# rec = lambda x, i: x and (x[2:8] + (i > 1 and rec(x[8:], i-1) or '')) or ''fun = lambda x, i: x[i+1:8] + rec(x[8:], i-1)while index + 1 < len(binary):chartype = binary[index:].index('0') # 存放字符所占字节数,一个字节的字符会存为 0length = chartype*8 if chartype else 8string.append(chr(int(fun(binary[index:index+length],chartype),2)))index += lengthreturn ''.join(string)"""
解码隐藏数据
"""
def RGBAdecodeImage(image):pixels = list(image.getdata()) # 获得像素列表binary = ''.join([str(int(r>>1<<1!=r))+str(int(g>>1<<1!=g))+str(int(b>>1<<1!=b))+str(int(t>>1<<1!=t)) for (r,g,b,t) in pixels]) # 提取图片中所有最低有效位中的数据# 找到数据截止处的索引locationDoubleNull = binary.find('0000000000000000')endIndex = locationDoubleNull+(8-(locationDoubleNull % 8)) if locationDoubleNull%8 != 0 else locationDoubleNulldata = binaryToString(binary[0:endIndex])return datadef RGBdecodeImage(image):pixels = list(image.getdata()) # 获得像素列表binary = ''.join([str(int(r>>1<<1!=r))+str(int(g>>1<<1!=g))+str(int(b>>1<<1!=b)) for (r,g,b) in pixels]) # 提取图片中所有最低有效位中的数据# 找到数据截止处的索引locationDoubleNull = binary.find('0000000000000000')endIndex = locationDoubleNull+(8-(locationDoubleNull % 8)) if locationDoubleNull%8 != 0 else locationDoubleNulldata = binaryToString(binary[0:endIndex])return datadef isTextFile(path):if path.endswith(".txt"):return Trueelif path.endswith(".m"):return Trueelif path.endswith(".h"):return Trueelif path.endswith(".c"):return Trueelif path.endswith(".py"):return Trueelse:return Falseif __name__ == '__main__':"""command-line interface"""arguments = docopt(__doc__)
# print(arguments)if arguments['-e'] or arguments['encode']:if arguments['<text>'] is None:arguments['<text>'] = "待加密的文本"if arguments['<encodedImage>'] is None:arguments['<encodedImage>'] = "encodedImage.png"if isTextFile(arguments['<text>']):with open(arguments['<text>'], 'rt') as f:arguments['<text>'] = f.read()print("载体图片:")print(arguments['<originImage>']+"\n")print("待加密密文:")print(arguments['<text>']+"\n")print("加密后图片:")print(arguments['<encodedImage>']+"\n")print("加密中……\n")im = Image.open(arguments['<originImage>'])if im.mode == 'RGBA':RGBAencodeDataInImage(im, arguments['<text>']).save(arguments['<encodedImage>'])# elif im.mode == 'RGB':# RGBencodeDataInImage(im, arguments['<text>']).save(arguments['<encodedImage>'])else:print("暂不支持此图片格式……")print("加密完成,密文为:\n"+arguments['<text>']+"\n")elif arguments['-d'] or arguments['decode']:print("解密中……\n")im = Image.open(arguments['<encodedImage>'])if im.mode == 'RGBA':print("解秘完成,密文为:\n"+RGBAdecodeImage(im)+"\n")# elif im.mode == 'RGB':# print("解秘完成,密文为:\n"+RGBdecodeImage(im)+"\n")else:print("非法的图片格式……")
相关文章:
4、安全开发-Python-蓝队项目流量攻击分析文件动态监控图片隐写技术
用途:个人学习笔记,有所借鉴,欢迎指正! 总结: (1)使用python脚本Scapy库实现指定网卡的流量抓包分析 (2)使用python脚本Watchdog实现指定目录文件行为监控 (…...

MySQL 日志管理
4.6)日志管理 MySQL 支持丰富的日志类型,如下: 事务日志:transaction log 事务日志的写入类型为 "追加",因此其操作为 "顺序IO"; 通常也被称为:预写式日志 write ahead…...

Python CSV文件读取和写入
本文主要为Python 实现CSV文件读取和写入操作。 CSV文件写入和读取 因为没有现成的csv文件,所以csv的顺序为先写入后读取。 写入 创建csv文件并把数据写入,有两种实现方式:直接插入所有行和插入单行。 示例如下: import csv i…...

如何使用C#调用LabVIEW算法
新建一个工程 这是必须的; 创建项目 项目 点击完成; 将项目另存为;方便后续的使用; 创建 一个测试VI 功能很简单,用的一个加法;将加数A,B设置为输入,和C设置为输出,…...

调用百度文心AI作画API实现中文-图像跨模态生成
作者介绍 乔冠华,女,西安工程大学电子信息学院,2020级硕士研究生,张宏伟人工智能课题组。 研究方向:机器视觉与人工智能。 电子邮件:1078914066qq.com 一.文心AI作画API介绍 1. 文心AI作画 文…...

JAVA SpringBoot中使用redis的事务
目录 一、Java语言介绍 二、SpringBoot框架介绍 三、Redis缓存介绍 四、什么是redis的事务 一、Java语言介绍 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司于1995年推出。它的设计目标是要求“一次编写,到处运行”(Write Once, Run Anywhere, WOR…...

docker部署自己的网站wordpress
目录 安装 1.创建目录 2.创建并启动mysql 3.创建并启动wordpress 使用 1.设置语言 2.设置基础信息 3.首页 安装 1.创建目录 mkdir -p /opt/wordpress/{db,data} 2.创建并启动mysql docker run -d --name my_mysql --restart always -e MYSQL_ROOT_PASSWORD123456 -e …...

基于ISO13400 (DoIP) 实现车辆刷写
近年来,在整车研发中基于以太网实现车辆高带宽通讯无疑是人们热议的话题。无论是车内基于车载以太网来减少线束成本,实现ADAS、信息娱乐系统等技术,还是基于新的电子电气架构以及远程诊断需求来实现以太网诊断(DoIP)&a…...

Chrome 沙箱逃逸 -- Plaid CTF 2020 mojo
文章目录 前置知识参考文章环境搭建题目环境调试环境 题目分析附件分析漏洞分析OOBUAF 漏洞利用总结 前置知识 Mojo & Services 简介 chromium mojo 快速入门 Mojo docs Intro to Mojo & Services 译文:利用Mojo IPC的UAF漏洞实现Chrome浏览器沙箱逃逸原文…...

汇编笔记 01
小蒟蒻的汇编自学笔记,如有错误,望不吝赐教 文章目录 笔记编辑器,启动!debug功能CS & IPmovaddsub汇编语言寄存器的英文全称中英对照表muldivandor 笔记 编辑器,启动! 进入 debug 模式 debug功能 …...
C语言:矩阵中的最小元素
题目描述 给定一个5X5的整数矩阵,找出其中最小的元素,输出所在的行号、列号和元素值,其中行号和列号都从0开始。 例如,有矩阵: 5 86 53 50 18 25 67 79 44 68 79 63 24 84 100 42 30 59 47 37 28 10 32 23 81 其中最小…...
【原创】MQTT开发笔记(四)- 压力测试
一、前言 Jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简 单。因为 jmeter 是 java 开发的,所以运行的时候必须先要安装 …...

vue 引入 百度地图API 和 路书
公司项目中,偶尔都会涉及到地图的使用,这里以百度地图为例,我们梳理一下引用流程及注意点 账号和获取密钥 百度地图示例 百度地图 类参考 1、账号和获取密钥 // api.map.baidu.com/api?typewebgl&v3.0&ak您的密钥<script type…...
【QT+QGIS跨平台编译】之二十六:【SpatialIndex+Qt跨平台编译】(一套代码、一套框架,跨平台编译)
文章目录 一、SpatialIndex介绍二、文件下载三、文件分析四、pro文件五、编译实践一、SpatialIndex介绍 SpatialIndex是一个用于高效处理空间数据的C++库,基于R树索引结构实现。它提供了一系列的空间操作和查询算法,能够快速地对大规模空间数据进行检索和分析。 SpatialInd…...

SQL在云计算中的新角色:重新定义数据分析
文章目录 1. 云计算与数据分析的融合2. SQL在云计算中的新角色3. 分布式SQL查询引擎4. SQL-on-Hadoop解决方案5. SQL与其他数据分析工具的集成6. 实时数据分析与SQL7. SQL在云数据仓库中的角色8. 安全性与隐私保护9. SQL的未来展望《SQL数据分析实战(第2版ÿ…...

云安全的基本概念(基本目标与指导方针)
目录 一、云安全概念概述 1.1 概述 二、云安全的基本目标 2.1 安全策略开发模型 2.1.1 信息安全三元组 2.1.1.1 保密性(Confidentiality) 2.1.1.2 完整性(Integrity) 2.1.1.3 可用性(Availability) 2.1.2 信息安全三元组的局限性 2.2 其他信息安全属性 2.2.1 真实性 …...

猫头虎分享已解决Bug || docker: Error response from daemon: network not found
博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …...

《幻兽帕鲁》攻略:0基础入门及游戏基础操作 幻兽帕鲁基础设施 幻兽帕鲁基础攻击力 Mac苹果电脑玩幻兽帕鲁 幻兽帕鲁加班加点
今天就跟大家聊聊《幻兽帕鲁》攻略:0基础入门及游戏基础操作。 如果想在苹果电脑玩《幻兽帕鲁》记得安装CrossOver哦。 以下纯干货: CrossOver正版安装包(免费试用):https://souurl.cn/Y1gDao 一、基础操作 二、界面…...

JDK版本如何在IDEA中切换
JDK版本在IDEA中切换 一、项目结构设置 1.Platform——Settings 项目结构---SDKS 2.Project——SDK 3.Modules——SDK——Sources 4.Modules——SDK——Dependencies 二、设置--编译--字节码版本 Settings——Build,——Java Compiler...
如何做零售企业满意度调查
零售业满意度调研是一项至关重要的市场研究工作,它能够帮助企业深入了解消费者对零售店的整体印象、商品质量、服务质量等方面的评价。这种评价可以帮助企业了解自身的优势和不足,提高企业的市场竞争力。民安智库(第三方市场调研公司…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...

李沐--动手学深度学习--GRU
1.GRU从零开始实现 #9.1.2GRU从零开始实现 import torch from torch import nn from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集 batch_size,num_steps 32,35 train_iter,vocab d2l.load_data_time_machine(batch_size,num_steps) #初始化模型参数 def …...

【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...