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("非法的图片格式……")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/671655.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode:26.删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 目录 题目&#xff1a; 思路&#xff1a; 代码注释&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路&#xff1a; 没啥特殊的&#xff0c;老老实实双指针遍历数组&#xff0c;&#xff0…

获取旁站 / C 段:第三方网站(附链接)

一、介绍 1.1 旁段 在网络安全的上下文中&#xff0c;"旁段"&#xff08;Pivot&#xff09;是指攻击者通过入侵一个网络中的一台计算机&#xff0c;然后利用该计算机作为跳板&#xff08;或者称之为“旁道”&#xff09;来访问其他计算机或网络资源的行为。 攻击者…

如何启动若依框架

Mysql安装 一、下载 链接&#xff1a;https://pan.baidu.com/s/1s8-Y1ooaRtwP9KnmP3rxlQ?pwd1234 提取码&#xff1a;1234 二、安装(解压) 下载完成后我们得到的是一个压缩包&#xff0c;将其解压&#xff0c;我们就可以得到MySQL 5.7.24的软件本体了(就是一个文件夹)&…

虚幻5源码版打包服务端

适用情况&#xff0c;windows系统&#xff0c;已经安装vs2022之类的&#xff0c;和UE5适配的版本 源码版使用 1.下载源码版&#xff0c;推荐下载 压缩包 tar.gz那个&#xff0c;zip和git clone我老是下载不下载来&#xff0c;只是这个压缩包要解压1个多小时… 2.点击 源码的…

【RT-DETR有效改进】利用SENetV1重构化网络结构 (ILSVRC冠军得主)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的改进机制是SENet(Squeeze-and-Excitation Networks)其是一种通过调整卷积网络中的通道关系来提升性能的网络结构。SENet并不是一个独立的网络模型,而是一个可以和现有的任何一个模型相结合…

自动暂停和恢复网页中的视频播放

序言 在日常开发中&#xff0c;有时候一级栏目可能是个H5页面&#xff0c;当切换到其他栏目的时候需要自动暂停H5中的视频&#xff0c;切换回来以后需要自动恢复播放。实现的思路是通过JS来操作&#xff0c;难点是感知fragment的可见状态。还有js代码的编写。 比如下面这个页…

SpringBoot2-Jwt

1.官网 jwt.io/libraries 2.选jose4j pom <dependency><groupId>org.bitbucket.b_c</groupId><artifactId>jose4j</artifactId><version>0.9.4</version> </dependency> 3.创建jwt工具 public class JwtUtil {private stat…

力扣:78. 子集

回溯解法思路&#xff1a; 1.跟前面的组合题目有相同的点&#xff0c;主要区别在于&#xff1a;组合题目是遍历到符合条件的组合时加入li1集合中&#xff0c;子集题目是每递归一次就要把结果加入到li1集合中&#xff0c;并遍历但nums数组的最后。其他点和组合问题一样。 clas…

PyTorch的10个基本张量操作

PyTorch是一个基于python的科学计算包。它的灵活性允许轻松集成新的数据类型和算法&#xff0c;并且框架也是高效和可扩展的&#xff0c;下面我们将介绍一些Pytorch的基本张量操作。 Tensors 张量Tensors是一个向量&#xff0c;矩阵或任何n维数组。这是深度学习的基本数据结构…

记录关于 LLVM C/C++ 适用 libc++ 的一些注意事项

可以看看这个&#xff1a; https://releases.llvm.org/12.0.1/projects/libcxx/docs/UsingLibcxx.html 1、std::function<void()> 在 libc 之中不是线程安全的&#xff0c;在GCC/VC上面可以多线程上操作&#xff0c;在LLVM提供的LIBC标准库之中不行&#xff0c;要牢记&a…

DevExpress WinForms中文教程 - 如何创建可访问的WinForms应用?(二)

为用户创建易访问的Windows Forms应用程序不仅是最佳实践的体现&#xff0c;还是对包容性和以用户为中心的设计承诺。在应用程序开发生命周期的早期考虑与可访问性相关的需求可以节省长期运行的时间(因为它将决定设计决策和代码实现)。 一个可访问的WinForms应用程序提供了各种…

UC++常用语句示例

Actor操作 移动 FVector CurrentLocation GetActorLocation(); // 在X轴上增加移动 CurrentLocation.X MoveSpeed * DeltaTime; // 应用新的位置 SetActorLocation(CurrentLocation); AddActorLocalOffset(FVector(MoveSpeed * DeltaTime, 0.0f, 0.0f)); // 获取当前相对位…

mysql清空表数据后如何让自增ID仍从1开始

有2种方法&#xff1a; 1、清空表时使用truncate命令&#xff0c;而不用delete命令 truncate test; 使用truncate命令的好处&#xff1a; 1&#xff09;、速度快 2&#xff09;、可以对自增ID进行重排&#xff0c;使自增ID仍从1开始计算 2、清空表数据后&#xff0c;使用alter…

Android 11 访问 Android/data/或者getExternalCacheDir() root方式

前言&#xff1a; 需求要求安装三方应用ExternalCacheDir()下载下来的apk文件。 getExternalCacheDir() : /storage/emulated/0/Android/data/com../cache/ 获取访问权限 如果手机安卓版本为Android10的时候,可以在AndroidManifest.xml中添加下列代码 android:requestLegacyExt…

20240202在Ubuntu20.04.6下使用whisper.cpp的显卡模式

20240202在Ubuntu20.04.6下使用whisper.cpp的显卡模式 2024/2/2 19:43 【结论&#xff1a;在Ubuntu20.04.6下&#xff0c;确认large模式识别7分钟中文视频&#xff0c;需要356447.78 ms&#xff0c;也就是356.5秒&#xff0c;需要大概5分钟&#xff01;效率太差&#xff01;】 …

CleanMyMac2024如何识别并清理垃圾文件?

CleanMyMac识别并清理垃圾文件的过程主要依赖于其强大的扫描功能和智能算法。以下是具体的步骤&#xff1a; 扫描垃圾文件&#xff1a;首先&#xff0c;用户需要打开CleanMyMac软件&#xff0c;并点击“智能扫描”功能。然后&#xff0c;软件将开始自动扫描Mac系统上的各种垃圾…

微信小程序(基本操作)

概念&#xff1a; 小程序&#xff1a;就是小程序&#xff0c;mini program。现在市面上有微信小程序&#xff0c;百度智能小程序等等。 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种不需要下载安装即可使用的应用&#xff0c;它实现了…

课时16:本地变量_普通变量

2.2.2 普通变量 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 变量分类 所谓的本地变量就是&#xff1a;在当前系统的某个环境下才能生效的变量&#xff0c;作用范围小。本地变量按照变量值的生成方式包含两种&#xff1a;普通…

5-4、S加减单片机程序【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍实现步进电机S曲线运动的代码 一、目标功能 实现步进电机转动总角度720&#xff0c;其中加减速各90 加速段&#xff1a;加速类型&#xff1a;S曲线  加速角度&#xff1a;角度为90  起步速度…

CSS太极动态图

CSS太极动态图 1. 案例效果 我们今天学习用HTML和CSS实现动态的太极&#xff0c;看一下效果。 2. 分析思路 太极图是由两个旋转的圆组成&#xff0c;一个是黑圆&#xff0c;一个是白圆。实现现原理是使用CSS的动画和渐变背景属性。 首先&#xff0c;为所有元素设置默认值为0…