LegendSaber 发表于 2021-8-20 16:51

Malware Classification with Deep Convolutional Neural Networks

本帖最后由 LegendSaber 于 2022-1-28 16:31 编辑

一. 前言
深度学习作为近年来的一个热点话题,广泛应用与各个领域。在恶意代码识别领域也有不少学者进行相关的研究。论坛中好像还没有相关的讨论,也不知道大家是否有兴趣。这边选取一篇2018年发表的论文来简单描述一下深度学习在Windows平台上面恶意代码识别的应用,看看各位安全人士的反应,如果有兴趣,之后在继续讨论其他论文。对于CV和NLP方向的大佬也可以了解一下,转换思路,也不至于在那两个方向上面一直卷。。
关于深度学习的入门的话。这边就推荐李航的统计学习,西瓜书和花书。视频推荐吴恩达和李宏毅两位老师的视频,在小破站上面都可以观看,这篇文章就不详细说明模型了,那样篇幅太长。
论文原文链接是:https://ieeexplore.ieee.org/document/8328749(Malware Classification with Deep Convolutional Neural Networks)
二.数据集
数据集对于结果的影响可以说是举足轻重,在现有技术基础上数据集的好坏甚至比你算法的好坏都重要的多(就挺尴尬的←_←)。而数据集无非就是对一组可以表述相关问题的特征罢了
那么在恶意代码识别方面,我们最后落地的项目真正要分析的其实就是一个二进制PE文件。那么有哪些可以作为数据集输入呢?大致可以分为这四种:
1.硬编码。每个程序生成的二进制文件的硬编码都是独一无二的。
2.汇编助记符。既然硬编码都不一样,那么生成的助记符自然也是独一无二的。
3.API。每个程序要完成不一样的功能自然要调用相关的不同的API,我们也可以根据他调用的API来进行分类。(当然这个方法比较容易被干掉。。)
4.PE。每个程序的PE文件保存了程序的相关信息。我们可以根据PE文件的内容作为输入。
本文选取的是硬编码作为数据的输入。这边参考一篇2011年的论文,来看看如何处理硬编码来作为模型的输入。
论文原文链接:https://dl.acm.org/doi/10.1145/2016904.2016908 (Malware Images: Visualization and AutomaticClassification)
作者处理完以后的数据集称为Maling数据集,在该领域也得到的广泛的应用和认可。该数据集是对25个家族的恶意程序进行分类,类别如下图。数据集中一共有9458条数据,其中的百分之90(8000多张)用来做训练,百分之10(900多张)用来做测试。
      
我们知道一字节等于8比特。用十进制表示范围的话那就是0-255。既然如此我们就可以把一个二进制文件的每一个字节都当作一个像素点来生成图片,然后在使用CV方向提出的模型来解决。转换过程就如下图所示。
      
这里有一个问题就是,每一个二进制文件所包含的字节数是不同的,那我们怎么选择宽与高呢。作者在他的论文中给出了转换的大小对于的原则如下图。
      
这里还需要说明的是在生成的过程中,我们把PE的头部信息等都去掉了,只保留了各个节的内容,这也合理。因为头部信息主要是描述程序的信息,并无具体行为。可以看到不同的节生成的图像差别还是挺大的。
      
根据上面所说的方法我们生成的不同家族的二进制文件的图像如下,我们可以看到不同的家族生成的图像纹理存在比较大的差别,这就给我们的分类带来了便捷。
         
三.模型
作者的模型如下图,该模型是对VGG16的简单更改,删除了其中的Dropout层。作为一个多分类问题,自然而然选择的损失函数就是cross_entropy,优化器选择的是SGD。
            
本人对作者的论文内容进行了复现。选择的是Pytorch框架来进行复现。其中,Python版本为3.6.13,Pytorch版本为1.8.1。
相关参数根据要求在Configure.py保存着。大家只需要更改base_path即可进行运行。由于代码中已经给出了必要的注释这里就不贴出代码,大家可以自行下载参考。在我的机器上最后训练出的模型在测试集跑出的精度为97.96。


LegendSaber 发表于 2022-3-22 16:27

YizhouY 发表于 2022-3-21 19:42
《Malware Detection Using Frequency Domain-Based Image Visualization》https://github.com/Mayachitra- ...

程序转图片的方法其实就是一个简单的算法。我在https://bbs.pediy.com/thread-271558.htm这里有做过分享你可以看一下。

LegendSaber 发表于 2021-8-25 17:32

yclemontree 发表于 2021-8-25 17:26
谢谢大佬!学习一下

不客气。建议还是把论文下下来看看吧我写的还是简单的

LegendSaber 发表于 2021-8-25 17:08

yclemontree 发表于 2021-8-25 16:37
先膜一发大佬!直接二进制文件转成图像,用CV的方法也太...没道理了,不知道后面有什么深层的原理可以解释 ...

深层原理=。=。。你看把二进制文件转成图像以后不同家族图像纹理都不一样。这不就可以用CV来分类嘛。。。平时我主要是在IEEE Access和Computers & Security上面找论文 你看看你想要的能不能找到把

LegendSaber 发表于 2021-8-27 16:54

yclemontree 发表于 2021-8-26 22:49
大佬您好,我试着自己也复现了一下,有一点没太搞懂,数据集样本应该是单通道的灰度图像,为什么论文的神经 ...

论文作者没有按灰度图去读取,你也可以按照灰度图读取。我之前复现的时候发现按灰度图读取效果没现在的好

LegendSaber 发表于 2021-8-20 18:38

{:301_999:}是我写的问题还是大家没什么兴趣=。=这么久了都没声的:'(weeqw

沉默的菜鸟 发表于 2021-8-20 18:43

LegendSaber 发表于 2021-8-20 18:38
是我写的问题还是大家没什么兴趣=。=这么久了都没声的

我觉得可能是大伙对深度学习不太了解{:301_1004:}

LegendSaber 发表于 2021-8-20 18:45

沉默的菜鸟 发表于 2021-8-20 18:43
我觉得可能是大伙对深度学习不太了解

哎,所以我选了一篇比较好理解的来写啊。。感觉大家没什么兴趣吧。。没法弄 这也以后都不敢发相关的了

mpdf 发表于 2021-8-21 10:29

最近刚好有一个类似的 恶意样本 分类的数据挖掘比赛,参考一下。

LegendSaber 发表于 2021-8-21 10:42

mpdf 发表于 2021-8-21 10:29
最近刚好有一个类似的 恶意样本 分类的数据挖掘比赛,参考一下。

比赛叫啥。。。

mpdf 发表于 2021-8-21 10:50

LegendSaber 发表于 2021-8-21 10:42
比赛叫啥。。。

https://mp.weixin.qq.com/s/g1yl-gCAV5UN_iJm0acvzA
这个是比赛链接,对恶意软件分类,刚好给的数据格式和论文差不多

LegendSaber 发表于 2021-8-21 10:56

mpdf 发表于 2021-8-21 10:50
https://mp.weixin.qq.com/s/g1yl-gCAV5UN_iJm0acvzA
这个是比赛链接,对恶意软件分类,刚好给的数据格 ...

好的 多谢

hzwang1966 发表于 2021-8-25 13:05

AI 技术太强了!学习了。

jb937158168 发表于 2021-8-25 13:47

大佬可以提供一下数据集,我最近也在学习深度学习,想深入研究一下
页: [1] 2 3 4
查看完整版本: Malware Classification with Deep Convolutional Neural Networks