阿里云安全恶意程序检测(速通二)

news2024/11/25 20:24:00

阿里云安全恶意程序检测

  • 高阶数据探索
    • 变量分析
      • 连续数值变量与连续数值变量
      • 单个类别变量与连续数值变量
      • 两个类别变量与连续数值变量
      • 两个变量线性关系探索
      • 查看多个双变量关系的技巧
    • 高阶数据探索
      • 多变量交叉探索

高阶数据探索

变量分析

连续数值变量与连续数值变量

分析连续数值变量和连续数值变量之间的关系,是为了探索变量之间的全局线性、局部
线性的关系等,常用方法: plt.scatter, sns.joinplot (kind= A), A = kde。
在这里插入图片描述

单个类别变量与连续数值变量

分析单个类别变量和连续数值变量之间的关系,主要是用于观察不同类别下的连续变量
(常见于回归问题)的分布,如图4-4-2所示。
常用方法: sns.stripplot, sns.swarmplot, sns.boxplot, sns.violinplot。
在这里插入图片描述

两个类别变量与连续数值变量

分析两个类别变量和连续数值变量之间的关系,是上述单个类别变量与连续数值变量组
合分析的扩展,用于更深层次的分析,如图4-4-3。常用方法: sns.countplot, sns.barplot, sns. factorplot, sns.pointplot。
在这里插入图片描述
在这里插入图片描述

两个变量线性关系探索

两个变量线性关系的探索,主要用于分析变量的全局线性、局部线性、其他非线性的关
系,如图4-4-4所示。
常用方法: sns.regplot, sns.mplot, sns.residplot.
在这里插入图片描述

查看多个双变量关系的技巧

上面介绍的方法都适用于单独检测,如果我们想直接绘制所有的情况,则在一 一检查时可以考虑查看多个双变量关系的方法,如图4-4-5所示。
常用方法: sns.pairplot, sns. PairGrid.
在这里插入图片描述

高阶数据探索

多变量交叉探索

1、通过统计特征file_id_cnt,分析file_id变量和api变量之间的关系

train_analysis = train[['file_id','label']].drop_duplicates(subset = ['file_id','label'],keep = 'last')
dic_=train['file_id'].value_counts().to_dict()
train_analysis['file_id_cnt'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_cnt'].value_counts()
sns.displot(train_analysis['file_id_cnt'])

在这里插入图片描述
我们发现,API 调用次数的基本上都集中在10 000次以下

2、为了便于分析file_id_cnt变量和label变量之间的关系,首先将数据按file_id_cnt变量也就是API的调用次数取值划分为16个区间

def file_id_cnt_cut(x):
    if x < 15000:
        return x // 1e3
    else:
        return 15
    
train_analysis['file_id_cnt_cut'] = train_analysis['file_id_cnt'].map(file_id_cnt_cut).values
#随机选取4个区间进行查看
plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 0]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 1]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 14]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述

plt.figure(figsize = [16,20])
plt.subplot(321)
train_analysis[train_analysis['file_id_cnt_cut'] == 15]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('file_id_cnt_cut = 0')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以看到:当API调用次数越多时,该API是第五类病毒( 感染型病毒)的可能性就越大。

用分簇散点图查看label下file_id_cnt的分布,由于绘制分簇散点图比较耗时,因此采用1000个样本点(2000个所用时间比1000用时多很多)

plt.figure(figsize = [16,10])
sns.swarmplot(x = train_analysis.iloc[:2000]['label'],
             y = train_analysis.iloc[:2000]['file_id_cnt'])

在这里插入图片描述
从图中得到以下结论:从频次上看,第5类病毒调用API的次数最多;从调用峰值上看,第2类和7类病毒有时能调用150000次的API。

3、首先通过文件调用API的类别数file_id_api_nunique,分析变量file_id和API的关系

dic_=train.groupby('file_id')['api'].nunique().to_dict()
train_analysis['file_id_api_nunique'] = train_analysis['file_id'].map(dic_).values
sns.distplot(train_analysis['file_id_api_nunique'])

在这里插入图片描述

train_analysis['file_id_api_nunique'].describe()

文件调用API的类别数绝大部分都在100以内,最少的是1个,最多的是170个。

然后分析file_ id_ api _nunique 和标签label 变量的关系。

train_analysis.loc[train_analysis.file_id_api_nunique >= 100]['label'].value_counts().sort_index().plot(kind='bar')
plt.title('File with api nunique >= 100')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以发现,第5类病毒调用不同API的次数是最多的。在上面的分析中,我们也发现第5类病毒调用API的次数最多,调用不同API的次数多也是可以理解的。

plt.figure(figsize = [16,10])
sns.boxplot(x=train_analysis['label'],y = train_analysis['file_id_api_nunique'])

在这里插入图片描述
从图中得到以下结论:第3类病毒调用不同API的次数相对较多,第2类病毒调用不同API的次数最少;第4,6, 7类病毒的离群点较少,第1类病毒的离群点最多,第3类病毒的离群点主要在下方:第0类和第5类的离群点则集中在上方。

4、首先,通过file_ jid_ index_ nunique 和file_ jid_ index_ max 两个统计特征,分析变量file _id和index之间的关系。有个奇怪的现象,我们发现调用API顺序编号的两个边缘(0 和5001)的样本数是最多的,因此可以单独看一下这两个点的label分布。

#单独看一下API序号为0和5001两个点的label分布
dic_=train.groupby('file_id')['index'].nunique().to_dict()
train_analysis['file_id_index_nunique'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_index_nunique'].describe()
dic_=train.groupby('file_id')['index'].max().to_dict()
train_analysis['file_id_index_max'] = train_analysis['file_id'].map(dic_).values
sns.distplot(train_analysis['file_id_index_max'])

在这里插入图片描述
从图中可以看出,文件调用index有两个极端:一个是在1附近,另一个是在5000附近。

分析file_id_index_nunique和file_id_index_max与label变量的关系


plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_index_nunique == 1]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with index nunique = 1')
plt.xlabel('label')
plt.ylabel('label_number')

plt.subplot(122)
train_analysis.loc[train_analysis.file_id_index_nunique == 5001]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with index nunique = 5001')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中可以发现,在文件顺序编号只有一个时,文件的标签只会是0 (正常)、2 (挖矿程序)或5 (感染型病毒),而不会是其他病毒,而且最大概率可能是5;对于顺序次数大于5000个的文件,其和上面调用API次数很大时类似。

还可以通过绘制小提琴图、分类散点图分析,代码和结果如下:

plt.figure(figsize = [16,10])
sns.violinplot(x = train_analysis['label'],
              y = train_analysis['file_id_api_nunique'])

在这里插入图片描述

plt.figure(figsize = [16,10])
sns.stripplot(x = train_analysis['label'],
              y = train_analysis['file_id_index_max'])

在这里插入图片描述
从图中得到的结论:第3类病毒调用不同index次数的平均值最大;第2类病毒调用不同index次数的平均值最小:第5,6, 7类病毒调用不同index次数的平均值相似。

5、首先通过file_ id_ tid_ nunique和file id_ tid max两个统计特征,分析变量file_ id和tid
之间的关系。

dic_= train.groupby('file_id')['tid'].nunique().to_dict()
train_analysis['file_id_tid_nunique'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_tid_nunique'].describe()
sns.distplot(train_analysis['file_id_tid_nunique'])

在这里插入图片描述

dic_= train.groupby('file_id')['tid'].max().to_dict()
train_analysis['file_id_tid_max'] = train_analysis['file_id'].map(dic_).values
train_analysis['file_id_tid_max'].describe()
sns.distplot(train_analysis['file_id_tid_max'])

在这里插入图片描述

#分析file_id_tid_nunique和file_id_tid_max与label变量的关系
plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_tid_nunique < 5]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid nunique < 5')
plt.xlabel('label')
plt.ylabel('label_number')

plt.subplot(122)
train_analysis.loc[train_analysis.file_id_tid_nunique >= 20]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid nunique >= 20')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
其中,0:正常文件; 1:勒索病毒; 2:挖矿程序; 3: DDoS木马; 4:蠕虫病毒; 5:感
染型病毒; 6:后门程序; 7:木马程序。

还可以通过箱线图和小提琴图进一一步 分析。

plt.figure(figsize = [12,8])
sns.boxplot(x = train_analysis['label'],
              y = train_analysis['file_id_tid_nunique'])

在这里插入图片描述

plt.figure(figsize = [12,8])
sns.violinplot(x = train_analysis['label'],
              y = train_analysis['file_id_tid_nunique'])

在这里插入图片描述
分析file_id和tid的max特征,我们将tid最大值大于3000的数据和整体作比较,发现差异不是很大

plt.figure(figsize=[16,8])
plt.subplot(121)
train_analysis.loc[train_analysis.file_id_tid_max >= 3000]['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('File with tid max >= 3000')
plt.xlabel('label')
plt.ylabel('label_number')

plt.subplot(122)
train_analysis['label'].value_counts().sort_index().plot(kind = 'bar')
plt.title('All Data')
plt.xlabel('label')
plt.ylabel('label_number')

在这里插入图片描述
从图中得出的结论:所有文件调用的线程都相对较少;第7类病毒调用的线程数的范围最大;第0类,3类和4类调用的不同线程数类似。

7、分析API变量与label变量的关系,代码及运行结果如下:

train['api_label'] = train['api'] + '_' + train['label'].astype(str)
dic_ = train['api_label'].value_counts().to_dict()

df_api_label = pd.DataFrame.from_dict(dic_,orient = 'index').reset_index()
df_api_label.columns = ['api_label','api_label_count']

df_api_label['label'] = df_api_label['api_label'].apply(
    lambda x:int(x.split('_')[-1]))

labels = df_api_label['label'].unique()
for label in range(8):
    print('*' * 50,label,'*' * 50)
    print(df_api_label.loc[df_api_label.label == label].sort_values(
    'api_label_count').iloc[-5:][['api_label','api_label_count']])
    print('*' * 103)

从结果可以得到以下结论: LdrGetProcedureAddress, 所有病毒和正常文件都是调用比较多的;第5类病毒: Thread32Next调用得较多;第6类和7类病毒: NtDelayExecution 调用得较多;第2类和7类病毒: Process32NextW 调用得较多。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL第三次上机作业

1.查询与王利就读同一专业学生的借书证号和姓名 SELECT Lno,Rname FROM Reader WHERE Dept(SELECT DeptFROM ReaderWHERE Rname王利)2.查询比希望出版社出版的所有图书价格都高的图书信息 SELECT * FROM Book WHERE Price>(SELECT MAX(Price)FROM BookWHERE Press希望出版…

【C++入门 四】学习C++内联函数 | auto关键字 | 基于范围的for循环(C++11) | 指针空值nullptr(C++11)

C 入门 四 1.内联函数1.1前言&#xff08;引出内联函数&#xff09;①写一个Add函数的宏定义②宏的缺点③C对宏的态度 1.2内联函数①概念②内联函数特性 2.auto关键字(C11)① 类型别名思考② auto简介③ auto的使用细则④ auto不能推导的场景 3. 基于范围的for循环(C11)① 范围…

【计算机网络笔记】TCP的拥塞控制机制

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

3.27每日一题(常系数线性非齐次方程的特解)

常系数非齐次线性方程的特解如何假设&#xff08;两种&#xff09;形式&#xff1a; 1、题目中 e 的 x 次幂以及 1&#xff0c;都是第一种&#xff1a;1可以看成为e的0次幂 注&#xff1a;题目给的多项式是特殊的形式&#xff0c;我们要设为一般的形式的多项式 2、题目中sin…

git使用全解析 | git的原理 配置 基础使用 分支 合并

文章目录 1 git初步了解1.1 git的安装1.2 git原理模型1.3 git基础配置1.4 git基础用法1 将文件加入暂存区2 查看当前的git仓库状态3 删除文件4 commit 将暂存区文件加入本地git版本仓库5 查看提交历史 更改 2 分支2.1 创建分支2.2 查看分支2.3 切换分支2.4 内容比较 3 合并 本文…

【单片机基础小知识-如何通过指针来读写寄存器】

寄存器的本质就是内存&#xff0c;RAM&#xff0c;而指针是可以对内存进行操作的&#xff0c;因此可以通过指针来读写寄存器。 如何读取以下一片地址&#xff1a; 步骤1、首地址 结构体&#xff0c;它所占用的内存空间大小与它内部成员有关。 构造一个28字节的类型 type…

nginx知识点-1

#因为是最小化安装&#xff0c;先安装vim编辑器&#xff0c;net-tools查看端口&#xff0c;psmisc可以使用killall命令bash-completion tab补全命令(需要重启生效)[rootlocalhost ~]# yum -y install net-tools psmisc vim bash-completion [rootlocalhost ~]# tar zxvf nginx-…

报错Could not resolve placeholder ‘driver‘ in value “${driver}“

这是我的报错&#xff1a; 原因是我的applicationContext.xml文件加载properties文件径错误&#xff1a; 应该把路径改成这样就可以了&#xff1a;

强化学习中值的迭代

一、价值的迭代 策略迭代的一个缺点是&#xff0c;其每次迭代都涉及策略评估&#xff0c;这本身可能是一个漫长的迭代计算&#xff0c;需要多次遍历状态集。如果策略评估是迭代进行的&#xff0c;那么只有当趋近于vπ时才会收敛。我们是否必须等待完全收敛&#xff0c;还是可以…

mac电脑系统清理软件CleanMyMac X2024破解版下载

基本上&#xff0c;不管是win版还是Mac版的电脑&#xff0c;其装机必备就是一款电脑系统清理软件&#xff0c;就比如Mac&#xff0c;目前在市面上&#xff0c;电脑系统清理软件是非常多的。 对于不熟悉系统的用户来说&#xff0c;使用一些小众工具&#xff0c;往往很多用户都不…

如何快速部署Apache服务器并使用内网穿透实现远程连接

Apache服务安装配置与结合内网穿透实现公网访问 文章目录 Apache服务安装配置与结合内网穿透实现公网访问前言1.Apache服务安装配置1.1 进入官网下载安装包1.2 Apache服务配置 2.安装cpolar内网穿透2.1 注册cpolar账号2.2 下载cpolar客户端 3. 获取远程桌面公网地址3.1 登录cpo…

nacos配置中心docker部署、配置及 goLang 集成使用

为什么需要配置中心 平时我们写一个demo的时候&#xff0c;或者说一个单体的应用&#xff0c;都会有一个配置文件&#xff0c;不管是 json文件或者yaml文件&#xff0c;里面包含了redis,mysql,es等信息&#xff0c;如果我们修改了配置文件&#xff0c;往往我们需要重启&#x…

【面试题01】找出数组中的最长前缀

题目1&#xff1a;如图&#xff0c;finally中的输出语句会执行吗&#xff1f;&#xff08;另外自己去考虑虚拟机退出、catch中抛异常、try中抛异常、守护线程等相关问题&#xff09; 题目2&#xff1a;Byte"hello"报错吗&#xff1f;Byte7报错吗&#xff1f; 不会报…

服务器的操作系统,你选择哪些?

OpenCloudOS CentOS CentOS Stream Ubuntu Debian Windows Server

【c++】——类和对象(中)——默认成员函数(上)

【学习目标】 1. 类的6个默认成员函数 2. 构造函数 3. 析构函数 4. 拷贝构造函数 目录 一.类的6个默认成员函数 二. 构造函数 2.1 概念 2.2.特性 三.析构函数 3.1.概念 3.2 特性 四.拷贝构造函数 4.1.概念 4.2.特性 一.类的6个默认成员函数 如果一个类中什么成员…

解决 SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443)

看我的回答&#xff1a; https://github.com/huggingface/transformers/issues/17611#issuecomment-1794486960 能问这个问题的都是网络不太好的&#xff0c;你懂的&#xff0c;所以答案全是解决网络的。 得益于这个回答&#xff1a;#17611 (comment) 看了一下代码&#xf…

Apache Doris (五十三): Doris Join类型 - Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. shuffle Join的原理

学信息系统项目管理师第4版系统36_结语

1. 尘埃落定 10月28日首考&#xff0c;到11月5日结束&#xff0c;尘埃落定&#xff0c;尘归尘、土归土了。 软考机考第一次吃螃蟹&#xff0c;几家欢喜几家愁&#xff0c;高项的选择题和案例题反馈简单&#xff0c;原书原文的考法&#xff0c;不过属于犄角旮旯那种。 中级则普…

GPT-4V:AI在教育领域的应用

OpenAI于9月25日发布了最新的GPT-4V模型&#xff0c;为ChatGPT引入了语音和图像功能&#xff0c;为用户提供更多元化的使用方式。这次更新将为用户带来更便捷、直观的交互体验&#xff0c;用户可以直接拍照上传并针对照片内容提出问题。OpenAI的最终目标是构建安全、有益的人工…

WindowsServer2019-搭建FTP服务器

这里写自定义目录标题 一、基础配置IP地址安装FTP服务检查连通性Windows10连接FTP服务 二、了解和使用FTP具体模块及其配置1、FTP IP地址和域限制2、FTP SSL设置3、FTP当前会话4、FTP防火墙5、FTP目录浏览6、FTP请求筛选7、FTP日志8、FTP身份验证9、FTP授权规则10、FTP消息11、…