使用B2M 算法批量将可执行文件转为灰度图像

参考论文

基于二进制文件的 C 语言编译器特征提取及识别

本实验使用 B2M 算法将可执行文件转为灰度图像,可执行文件转为灰度图的流程如图 4-3 所示。将 可执行文件每 8 位读取为一个无符号的的整型常量,一个可执行文件得到一个一维向量, 之后按照固定的宽和高将一维向量转成一个二维向量。该二维向量中每个元素的取值范围都在 0-255 ,正好对应灰度图像的一个像素点,将该二维数组可视化为一张灰度图像, 其中 0 表示黑色, 255 表示白色。

这个使用B2M 算法将可执行文件转为灰度图像的步骤主要视为了进行之后提取 GLCM 特征和 LBP 特征。

其中,生成图像的宽度会因不同文件的大小有最优宽度

 示例:

我的exe文件大小事135kb所以宽度就设置成384了。

import numpy as np
import matplotlib.pyplot as plt# 读取二进制文件
def read_binary_file(filename):with open(filename, 'rb') as f:data = f.read()return data# 将数据转换为无符号整型数组
def binary_to_uint8_array(data):return np.frombuffer(data, dtype=np.uint8)# 将一维数组转换为二维矩阵
def array_to_2d_matrix(array, width):# 计算高度height = int(np.ceil(len(array) / width))# 如果数组长度不是宽度的整数倍,填充数组padded_length = height * widthpadded_array = np.pad(array, (0, padded_length - len(array)), 'constant', constant_values=0)# 转换为二维矩阵matrix = padded_array.reshape((height, width))return matrix# 保存灰度图像
def save_gray_image(matrix, save_path):plt.imshow(matrix, cmap='gray', vmin=0, vmax=255)plt.title("Gray Image")plt.axis('off')  # 隐藏坐标轴plt.savefig(save_path, bbox_inches='tight', pad_inches=0)plt.close()print(f"Image saved at {save_path}")# 主函数
def binary_to_image(filename, save_path, width):data = read_binary_file(filename)uint8_array = binary_to_uint8_array(data)matrix = array_to_2d_matrix(uint8_array, width)save_gray_image(matrix, save_path)# 调用主函数并传入二进制文件名、保存路径和宽度
binary_to_image('math1111.exe', 'test2.png', width=384)

生成的图像:

5.21

本来的程序是处理单张图片,现在需要处理比较多,所以把程序拓展到了处理整个文件夹中的exe文件,并把处理后的图片以原exe文件+ 特殊备注(看个人需求)放到同一文件夹。同时根据原来exe文件的大小设置图片的宽度。

 

import os
import numpy as np
import matplotlib.pyplot as plt# 读取二进制文件
def read_binary_file(filename):with open(filename, 'rb') as f:data = f.read()return data# 将数据转换为无符号整型数组
def binary_to_uint8_array(data):return np.frombuffer(data, dtype=np.uint8)# 将一维数组转换为二维矩阵
def array_to_2d_matrix(array, width):# 计算高度height = int(np.ceil(len(array) / width))# 如果数组长度不是宽度的整数倍,填充数组padded_length = height * widthpadded_array = np.pad(array, (0, padded_length - len(array)), 'constant', constant_values=0)# 转换为二维矩阵matrix = padded_array.reshape((height, width))return matrix# 保存灰度图像
def save_gray_image(matrix, save_path):plt.imshow(matrix, cmap='gray', vmin=0, vmax=255)plt.title("Gray Image")plt.axis('off')  # 隐藏坐标轴plt.savefig(save_path, bbox_inches='tight', pad_inches=0)plt.close()print(f"Image saved at {save_path}")# 处理单个文件并保存图像
def binary_to_image(filename, save_path, width):data = read_binary_file(filename)uint8_array = binary_to_uint8_array(data)matrix = array_to_2d_matrix(uint8_array, width)save_gray_image(matrix, save_path)# 根据文件大小确定图像宽度
def determine_width(file_size):if file_size < 10 * 1024:return 32elif file_size < 30 * 1024:return 64elif file_size < 60 * 1024:return 128elif file_size < 100 * 1024:return 256elif file_size < 200 * 1024:return 384elif file_size < 500 * 1024:return 512elif file_size < 1000 * 1024:return 768else:return 1024# 处理文件夹中的所有文件
def process_folder(folder_path, save_dir):if not os.path.exists(save_dir):os.makedirs(save_dir)for filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)if os.path.isfile(file_path):  # 只处理文件,忽略子目录file_size = os.path.getsize(file_path)width = determine_width(file_size)base_name = os.path.splitext(os.path.basename(file_path))[0]new_name = f"{base_name}_10.3.0.png"save_path = os.path.join(save_dir, new_name)binary_to_image(file_path, save_path, width)# 文件夹路径
folder_path = r'C:\Users\19427\Desktop\5.1.0'
save_directory = r'C:\Users\19427\Desktop\5.1.0\output_images'# 调用函数处理文件夹
process_folder(folder_path, save_directory)

 

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

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

相关文章

深度学习之基于Tensorflow+Keras+CNN模型实时对手写数字进行分类

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着深度学习和计算机视觉技术的快速发展&#xff0c;手写数字识别已成为一个重要的应用场景。…

装备制造项目管理软件:奥博思PowerProject项目管理系统

数字化正逐步改变着制造方式和企业组织模式。某制造企业领导层透露&#xff0c;在采用数字化项目管理模式后&#xff0c;企业的发展韧性更加强劲&#xff0c;构筑起了竞争新优势&#xff0c;企业产品研制周期缩短25%&#xff0c;生产效率提升18%。 随着全球经济的发展&#xf…

SpringBootWeb 篇-深入了解 Mybatis 删除、新增、更新、查询的基础操作与 SQL 预编译解决 SQL 注入问题

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Mybatis 的基础操作 2.0 基础操作 - 环境准备 3.0 基础操作 - 删除操作 3.1 SQL 预编译 3.2 SQL 预编译的优势 3.3 参数占位符 4.0 基础操作 - 新增 4.1 主键返回…

深度学习之基于Pytorch框架多人多摄像头摔倒跌倒坠落检测

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着智能监控技术的广泛应用&#xff0c;对于公共场合的安全监控需求日益增加。摔倒跌倒坠落是常见的…

基于深度学习的Tensorflow卷积神经网络(CNN)车牌识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 车牌识别&#xff08;License Plate Recognition, LPR&#xff09;是智能交通系统&#xff08;ITS&a…

解锁产品迭代新速度:A/B测试在AI大模型时代的应用

本文作者为火山引擎A/B测试平台DataTester的资深研发工程师刘明瑶。作为火山引擎数智平台VeDI旗下的核心产品&#xff0c;DataTester源于字节跳动长期的技术和业务沉淀&#xff0c;目前已经服务了数百家企业&#xff0c;助力企业在业务增长、用户转化、产品迭代、策略优化以及运…

深度学习之Tensorflow卷积神经网络手势识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 手势识别是计算机视觉和人工智能领域的重要应用之一&#xff0c;具有广泛的应用前景&#xff…

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具

抖音视频怎么去水印保存部分源码|短视频爬虫提取收集下载工具 抖音视频去水印保存部分源码&#xff1a; 通过使用Python中的requests、re和os等库&#xff0c;可以编写如下代码来实现抖音视频去水印保存的功能。 短视频爬虫提取手机下载工具的使用方法&#xff1a; 该工具主…

【Linux学习】进程地址空间与写时拷贝

文章目录 Linux进程内存布局图&#xff1a;内存布局的验证 进程地址空间写时拷贝 Linux进程内存布局图&#xff1a; 地址空间的范围&#xff0c;在32位机器上是2^32比特位,也就是[0,4G]。 内存布局的验证 代码验证内存布局&#xff1a; 验证代码&#xff1a; #include<s…

基于FPGA的VGA协议实现----条纹-文字-图片

基于FPGA的VGA协议实现----条纹-文字-图片 引言&#xff1a; ​ 随着数字电子技术的飞速发展&#xff0c;现场可编程门阵列&#xff08;FPGA&#xff09;因其高度的灵活性和并行处理能力&#xff0c;在数字系统设计中扮演着越来越重要的角色。FPGA能够实现复杂的数字逻辑&#…

字节面试:百亿级数据存储,怎么设计?只是分库分表吗?

尼恩&#xff1a;百亿级数据存储架构起源 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;经常性的指导小伙伴们改造简历。 经过尼恩的改造之后&#xff0c;很多小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试机会&#xff0c…

基于Tensorflow卷积神经网络垃圾智能分类系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 随着城市化进程的加速&#xff0c;垃圾问题日益严重&#xff0c;垃圾分类成为解决这一问题的关…

(全面)Nginx格式化插件,Nginx生产工具,Nginx常用命令

目录 &#x1f3ab; 前言 &#x1f389; 开篇福利 &#x1f381; 开篇福利 x2 Double happiness # 介绍 # 地址 # 下载 &#x1f4bb; 命令及解析 # 整个文件系统中搜索名为nginx.conf的文件 # 编辑nginx.conf文件 # 重新加载配置文件 # 快速查找nginx.conf文件并使…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题&#xff0c;在网上找了很多资料&#xff0c;都是太泛泛了&#xff0c;使用后&#xff0c;还不能生效&#xff0c;缺少详细的说明&#xff0c;或者关键代码缺失&#xff0c;我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的&#xff0c;手动将aar…

Linux应用入门(二)

1. 输入系统应用编程 1.1 输入系统介绍 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等。用户经过这些输入设备与Linux系统进行数据交换。这些设备种类繁多&#xff0c;如何去统一它们的接口&#xff0c;Linux为了统一管理这些输入设备实现了一套能兼容所有输入设备的…

【真人Q版手办风】线稿手绘+ AI绘图 Stable Diffusion 完整制作过程分享

大家好&#xff0c;我是设计师阿威。 今天给大家分享一篇【真人Q版卡通手办】风格的制作过程&#xff0c;话不多说&#xff0c;进入正题。 成品预览 手绘线稿 首先&#xff0c;我使用的是老款手绘软件【SAI】&#xff0c;用[钢笔工具]进行了人物的线稿Q版描绘。&#x1f447…

最大负载1kg!高度模块化设计!大象机器人智能遥控操作机械臂组合myArm MC

引入 近年来&#xff0c;市面上涌现了许多类似于斯坦福大学的 Alopha 机器人项目&#xff0c;这些项目主要通过模仿人类的运动轨迹来进行学习&#xff0c;实现了仿人类的人工智能。Alopha 机器人通过先进的算法和传感技术&#xff0c;能够精确复制人类的动作&#xff0c;并从中…

二、使用Django创建一个基础应用

职位管理系统 - 建模 职位名称类别工作地点职位职责职位要求发布人发布日期修改日期 安装django pip install django5.0查看django版本 python -m django --version创建项目 django-admin startproject recruitment启动服务 python manage.py runserver 0.0.0.0:8000创建…

数据库|基于T-SQL创建数据库

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL。 本节学习基于T-SQL创建数据库。以下为学习笔记。 01 打开新建查询 首先连接上数据库&#xff0c;点击【新建查询】打开新建查询窗口&#xff0c; …

Vue3:封装Table 表格组件

组件官网 elementPlus : 点击跳转 封装组件 创建新的组件文件: Table.vue <!-- PropTableS &#xff1a; 父组件传递过来的数据 (对象)PropTableS.tables : 父组件传递的对象中 存放表格每行显示的数据PropTableS.keyS &#xff1a; 父组件传递过来的对象&#xff0c;里…