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...
如何做零售企业满意度调查
零售业满意度调研是一项至关重要的市场研究工作,它能够帮助企业深入了解消费者对零售店的整体印象、商品质量、服务质量等方面的评价。这种评价可以帮助企业了解自身的优势和不足,提高企业的市场竞争力。民安智库(第三方市场调研公司…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
