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...
如何做零售企业满意度调查
零售业满意度调研是一项至关重要的市场研究工作,它能够帮助企业深入了解消费者对零售店的整体印象、商品质量、服务质量等方面的评价。这种评价可以帮助企业了解自身的优势和不足,提高企业的市场竞争力。民安智库(第三方市场调研公司…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
