首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恶意软件分析的特征选择

恶意软件分析的特征选择
EN

Data Science用户
提问于 2019-10-25 17:40:17
回答 1查看 117关注 0票数 1

我正试图构建一个分类器,通过预测出处编译器来检测是否存在错误。为此,我有一个由json格式的汇编代码组成的数据集:

特别是,我希望选择作为功能说明,所以推送,移动,jmp,..etc,并创建一个特征向量,其中包含的次数,一个功能出现。所以,我想用这个词袋。要做到这一点,我的代码如下:

代码语言:javascript
复制
#libraries
import numpy as np
import pandas as pd
import json as j
import re
import nltk
from nltk.tokenize import word_tokenize

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import *
from sklearn.metrics import confusion_matrix, classification_report
from sklearn import svm

#for visualizing data
import matplotlib.pyplot as plt
import seaborn as sns; sns.set(font_scale=1.2)

%matplotlib inline

json_data = None;
with open('training_dataset.jsonl') as data_file:
    lines = data_file.readlines()
    joined_lines = "[" + ",".join(lines)+"]"

    json_data = j.loads(joined_lines)  

data = pd.DataFrame(json_data)
data.head()



vect = CountVectorizer()

data['instructions'] = data['instructions'].apply(lambda x: ' '.join(x))

vect.fit_transform(data['instructions'])

a =vect.vocabulary_
a

我从中得到了一本字典:

有越来越多的键,值对。在这一点上,我试图消除寄存器,所以我的想法是迭代字典,删除有数字的键,所以我写了以下内容:

代码语言:javascript
复制
def hasNumbers(inputString):
    return any(char.isdigit() for char in inputString)

for k in list(a.keys()):
    if hasNumbers(k):
        del a[k]

但实际上,这并不是一个好主意,因为我也有没有数字的注册,例如rdi。

在这一点上,我不知道如何移动,我不确定我是否走的正确的方式。有人能帮帮我吗?谢谢已经提前了。

编辑2现在我正在尝试使用json文件,不是用熊猫打开它,而是以字典的形式打开它,所以:

我的愿望是,如建议的那样,把每个键分开,这样就可以消除寄存器。所以,我的代码是:

代码语言:javascript
复制
for key in json_data:
    splitted = key.split[0]

但我收到以下错误消息:

代码语言:javascript
复制
AttributeError: 'dict' object has no attribute 'split'

我现在对如何操作感到非常困惑。

编辑3或我试图做以下工作:

代码语言:javascript
复制
for v in json_data.values():
    splitted = v.split[0]

但它提供了以下错误消息:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'values'

我认为一个问题是各种推送r12 ..。等等都列在清单上了,所以我不知道该怎么做。

实际上,编辑4我试图以这样的方式解决上面的问题:

代码语言:javascript
复制
for v in json_data[0].values():
    splitted = v.split[0]

但是,我再次收到了错误消息:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'split'

编辑5现在,我试着用熊猫打开的文件来做这个,所以:

代码语言:javascript
复制
data['features'] = [i.split[0] for i in data['instructions']]

但是,我仍然得到了以下错误:

代码语言:javascript
复制
AttributeError: 'list' object has no attribute 'split'

或者我也试过:

代码语言:javascript
复制
feat = [i.split[0] for i in json_data[0].values()]

但是得到与上面相同的错误。

EN

回答 1

Data Science用户

回答已采纳

发布于 2019-10-25 19:17:53

特别是,我希望选择作为功能说明,所以推送,移动,jmp,..etc,并创建一个特征向量,其中包含的次数,一个功能出现。

不必为示例程序完全读取每条指令,您可以读取每条指令的第一个单词来获取操作码,然后从这些操作码中创建一个特征向量。

假设,

代码语言:javascript
复制
sample_program[i] =  ['push r12', 'push rbp', 'xor edx edx', ...]

,即指令列表,然后将opcodes[i]定义为

代码语言:javascript
复制
opcodes[i] = [instruction.split[0] for instruction in sample_program[i]] 
#['push', 'push', 'xor']

现在,您可以从这些操作码的集合中创建特征向量。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/62231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档