码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 二进制文件可视化(二)


    前不久看到了几个二进制文件可视化的项目,做了一些了解,通过可视化可以看出加壳或者加密文件,在纹理结构上和正常文件还是有较大区别。

    而且可视化对文件格式不敏感,任何文件都可以查看其可视化结果。

    二进制文件可视化

    可视化数据源可分为以下两类:

    • 二进制文件可视化

    • 二进制熵可视化

    对绘图的方式有几种方法:

    • 传统的一维序列转二维。如固定图像宽度,对序列进行reshape
    • 使用希尔伯特曲线

    这两种方法其实都是空间填充曲线的子类,有兴趣可以了解。

    image-20220602143155664

    对绘图的色彩也可分为以下

    • 灰度图,直接生成就是灰度图

    • 彩色图,不同区域设定不同颜色,如portex【1】中的分了以下五种色类

      # 分别对应不同的颜色
      0xff, 0x00, 可见ASCII码, 不可及ascii码,非ascii码	
      
    • 彩色图,直接使用多通道,即每三个连续的字节作为一个通道的值,源自【2】

    ​ image-20220602140809101

    灰度图以及熵

    分别将原始二进制文件可视化,熵可视化,这里使用了最简单的可视化方法。

    def bin2image(content, resize=True):
        """
        binary to gray image
        """
        width = imagesize(len(content))
        fh = np.frombuffer(content, dtype=np.uint8)
        rn = len(fh)/width
        fh = np.reshape(fh[:int(rn)*width],(int(rn),width))
    
        im = Image.fromarray(fh)
        if resize:
            im = im.resize((244,244))
        return im
    
    def H(data):
        ''' Calculate the entropy of a given data block '''
        c = np.bincount(data, minlength=256) 
        p = c.astype(np.float32) / len(data)
        wh = np.where(c)[0]
        H = np.sum(-p[wh] * np.log2(
            p[wh]))
        return H
    
    def block_entropy(data, window=1024, step=256):
        Hbins = []
        if data.shape[0] < window:
            Hbin = H(data)
            Hbins.append(Hbin)
        else:
            shape = data.shape[:-1] + (data.shape[-1] - window + 1, window)
            strides = data.strides + (data.strides[-1],)
            blocks = np.lib.stride_tricks.as_strided(data, shape=shape, strides=strides)[::step, :]
    
            for block in blocks:
                Hbin = H(block)
                Hbins.append(Hbin)
        return Hbins
    
    def bin2entropy(content, block_size=1024, step=256, resize=True):
        """
        following resources: https://github.com/gcmartinelli/entroPy/blob/master/entropy.py
        but fatser 6x time
        """
        data = np.frombuffer(content, dtype=np.uint8)
        entropy_list = block_entropy(data, block_size, step)
        width = imagesize(len(entropy_list))*2
        rn = len(entropy_list)/width
        matrix = np.reshape(entropy_list[:int(rn)*width],(int(rn),width)) 
        im = Image.fromarray(matrix * 255/8)
        if resize:
            im = im.resize((244,244))
        return im
    

    结果如下图所示。可视化之后就可以作进一步分析了,比如对比加壳和正常文件;使用可视化图进行恶意识别。

    另外,此处的二进制熵可视化主要参考【3】,但是进行了改进,比【3】中原始的方法计算熵图快了6倍以上。

    image-20220602141606201

    image-20220602141614706

    源码见 github: https://github.com/Aida-yy/binai/blob/main/binai/feature_extraction/image.py

    【1】https://github.com/struppigel/PortEx

    【2】Binary File’s Visualization and Entropy Features Analysis Combined with Multiple Deep Learning Networks for Malware Classification

    【3】https://github.com/gcmartinelli/entroPy

  • 相关阅读:
    python+vue理发店管理系统
    aspose转pdf乱码问题
    单细胞流程 安装conda 下载基因组数据 然后走cellranger 流程得到10x数据
    港股将迎“最牛十元店“,名创优品能借IPO突围?
    JAVA最全面试题汇总基础篇(一)
    LVS负载均衡群集+NAT部署
    Node.js基础---Express
    模组知识(1)-CRA-光学知识
    Azkaban安装部署
    Python批量对DJ歌曲进行下载,配合电子木鱼更佳
  • 原文地址:https://www.cnblogs.com/gongyanzh/p/16337684.html
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号