(恶意软件分类)微软恶意软件分类数据集预处理

微软恶意软件分类数据集:

Microsoft Malware Classification Challenge (BIG 2015)


数据集中,每个样本包含.asm.bytes文件,.bytes 文件即为恶意软件的 .text 部分的二进制代码片段,此处只将 .bytes文件转化为灰度图像进行分析。


该数据集中的恶意软件家族分类为:

  1. Ramnit
  2. Lollipop
  3. Kelihos_ver3
  4. Vundo
  5. Simda
  6. Tracur
  7. Kelihos_ver1
  8. Obfuscator.ACY
  9. Gatak

def bytes_to_img(path):
    if os.path.isdir(path):
        files = [file for file in os.listdir(path) if file.endswith('.bytes')]
        os.makedirs(os.path.join(path, 'imgs'), exist_ok=True)
    else:
        files = [os.path.basename(path)]
        path = os.path.dirname(path)

    # 创建分类文件夹
    family = ['Ramnit', 'Lollipop', 'Kelihos_ver3', 'Vundo', 'Simda', 'Tracur', 'Kelihos_ver1', 'Obfuscator.ACY',
              'Gatak']
    for i in family:
        os.makedirs(os.path.join(path, 'imgs', i), exist_ok=True)

    labels_path = os.path.join(path, 'trainLabels.csv')
    assert os.path.exists(labels_path), "标签不存在!"
    labels = pd.read_csv(labels_path)

    for file in files:
        file_name, _ = file.split('.')
        with open(os.path.join(path, file), mode='rb') as bytes:
            img = list()
            for bytes_line in bytes.readlines():
                a = [byte for byte in bytes_line.decode('ascii').strip('\r\n').encode('ascii')]
                img += a
            # 读取标签
            label = labels.loc[labels['Id']==file_name]['Class']

            img += [0 for _ in range(0 if len(img) % 1024 == 0 else 1024 - len(img) % 1024)]
            # 设置灰度图的宽度为1024
            assert not len(img) % 1024, "img未对齐至1024!"
            img_path = os.path.join(path, 'imgs', family[label.values[0]-1], file_name) + '.png'
            Image.fromarray(np.uint8(img).reshape(-1, 1024)).save(img_path)
            print(f'save {img_path}')

运行状态如图所示:
在这里插入图片描述

之所以将不同恶意软件家族转化为灰度图后分别用不同的文件夹存储,一方面是方便标记类别,其次是可使用 torchvision.datasets.ImageFolder 直接进行处理。


.bytes文件转化为灰度图后如图所示:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值