Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Native-Code-Malware-Detection

封面

GitHub Contributors GitHub language

项目介绍

Android 系统可以通过 JNI 接口调用 C/C++ 库函数,使 Android 程序运行更加高效,但是同时也会加大 Android 恶意应用检测的难度,大多数恶意分析技术通常在 Java 层对 Android 应用程序进行分析,Native Code 在 Android 恶意应用检测中的作用并没有被深入研究。

通过对 Android应用程序在 Java 层与 Native 层的行为进行监测,使用机器学习技术,设计了一套Android 恶意应用检测系统,该系统能够提取 Android 应用程序在运行过程中,Native 层和 Java 层调用产生的 API 序列,以及 Android 应用中申请的 Permission序列,通过 RNN 技术,实现对应用程序恶意性的识别。

本项目主要由三个模块组成:特征提取模块、向量化模块、分类器模块。

  • 特征提取模块:特征提取模块的主要功能是将 APK 中的特征提取出来,主要包括两个方式,一个是通过静态方式提取 APK 文件中的 Permission 信息,一个是通过动态方式,也就是在设备上运行,通过 Hook 技术获取运行过程中的系统调用,包括 Native 层和 Java 层的 API。

  • 向量化模块:向量化模块的主要功能是将特征提取模块所提取的特征转化成向量的形式,特征提取模块所得到的 API 序列和 Permission 信息都是字符串组成的序列,所以需要通过 Word2Vec 技术将这些字符串结构转化为向量这些,作为分类器模块的输入。

  • 分类器模块:分类器模块的主要功能就是通过机器学习技术,主要是 RNN 技术,对向量化的特征进行分析,实现对 APK 文件的恶意性检测。

整体流程

系统的整体流程如下图所示。

整体流程

模块搭建

整个工具有三个模块构成,将分三部分介绍模块配置。

系统的配置环境如下

环境 版本
Python 3.10
pytorch 2.1.1
CUDA 11.8
mysql 8.0.39-0

运行一下命令安装python依赖包

pip install -r requirements.txt 

特征提取模块

特征提取模块位于Feature-Extraction文件夹中。

主要有两个模块构成:AndroidAnalyse和PermissionAnalyse。

AndroidAnalyse

这是通过动态分析对提取调用API的程序,配置较为复杂。

环境配置

首先需要提前对测试手机进行root,并且安装好frida框架和atx模块

https://blog.csdn.net/weixin_73636162/article/details/134043402 https://crifan.github.io/reverse_debug_frida/website/install_upgrade/install_frida.html https://github.com/NetEaseGame/AutomatorX

本项目需要mysql,创建一个创建一个数据库(名字无所谓,只需要在后面的config中设置即可),并且创建一个名为APKMetadata的表,创建的sql语言如下图所示。

create table APKMetadata
(
    APKID            bigint auto_increment
        primary key,
    APPName          varchar(1024)                      not null,
    APKName          varchar(1024)                      not null,
    APKFilePath      varchar(1024)                      not null,
    APKStoreName     varchar(1024)                      not null,
    createTime       datetime default CURRENT_TIMESTAMP not null,
    lastModifi/home/lyu-xuan/Path/APKS/ccplay.apkedTime datetime default (now())           not null,
    needAnalyse      int      default 1                 not null,
    packageName      varchar(1024)                      null
)
    engine = InnoDB;

然后配置config,在AndroidAnalyse中有一个config.conf文件,对其中的设置根据实际情况进行修改。通过修改本文件对AndroidAnalyse模块进行设置。

[database]
host = localhost
port = 3306
user = <你的用户名>
password = <你的密码>
database = <你的数据库>

[device]
deviceID = <你的设备ID>

[filePath]
pcapFilePathPrefix = <已废弃>
stackFilePathPrefix = <已废弃>
APKFilePath = <APK存储路径(到文件夹)>
PythonPath = <Python路径(到python3)> 例:/home/xxx/Environment/Python/Python310/bin/python3

之后运行APKloader文件,将文件夹下的apk写入到数据库中。

至此环境配置完成。

程序运行

运行一下命令:

adb shell #进行adb连接
su # 切换root用户
cd /data/local/tmp #进入到frida和atx
./atx-agent -d # 后台运行atx
./frida # 后台运行frida

启动手机端的服务之后,直接运行main文件,即可进行自动点击操作,对java层和native层api调用序列进行提取。

python main.py

PermissionAnalyse

环境配置

PermissionAnalyse配置方法较为简单:

Train_Benign_APKs = "这是训练集良性软件文件夹路径"
Test_Benign_APKs = "这是测试集良性软件文件夹路径"
Train_Malware_APKs = "这是训练集恶意软件文件夹路径"
Test_Malware_APKs = "这是测试集恶意软件文件夹路径"

Train_Benign_Permissions = "这是训练集良性权限文件夹路径"
Test_Benign_Permissions = "这是测试集良性权限文件夹路径"
Train_Malware_Permissions = "这是训练集恶意权限文件夹路径"
Test_Malware_Permissions = "这是测试集恶意权限文件夹路径"
程序运行

配置好路径之后直接运行该python文件即可

python getPermission

向量化模块

这个模块的内容较少,更详细的代码介绍可以看注释

  1. 通过plot_distribution.py,可以生成文本的分布图,也就是通常情况下每个文件大概有多长,通过这个分布确定word2Vec模型的参数
  2. 运行dataloader.py,将所有的文本整合到一个文件中,并且将过短的文件进行填充<PAD>字符
  3. 运行word2vec.py可以生成训练好的word2Vec模型

分类器模块

主要包括RNN与voting两个组成

RNN部分需要修改的地方有

  • RNN_Function:17-19行,需要根据情况选择在哪个层次进行训练(java、native还是permission),调整好参数;20行,需要选择对应的word2Vec模型;50-53行,选择对应的数据集合;
  • RNN_Main:20行,根据不同层次选择对应的输入。
  • RNN_Train:69行,设置保存的模型的名字。

将数据配置好之后,运行RNN_Main.py,进行模型的训练

voting中需要再ProcessData.py和voting.py中配置相应的文件路径,这些在文件中都非常明显了,所以在此不赘述。

配置好后运行voting文件,可以得到准确率。

关于拓展

因为本项目是基于tracedroid,但是很多tracedroid中的功能没有用到,如果深入进行配置的话可以加入tracedroid抓获的网络信息,下面介绍tracedroid的其他信息。

数据库

tracedroid因为要对网络进行分析,所以设置了其他的数据表,这些数据表的插入方式如下:

CaptureLog表

create table CaptureLog
(
    logID         varchar(40)                        not null
        primary key,
    APKID         varchar(1024)                      not null,
    APKName       varchar(1024)                      not null,
    APPName       varchar(1024)                      not null,
    createTime    datetime default CURRENT_TIMESTAMP not null,
    pcapFilePath  varchar(1024)                      not null,
    stackFilePath varchar(1024)                      not null,
    needExtract   int                                not null,
    extractTime   datetime default (now())           not null
)
    engine = InnoDB;

HTTP表

create table HTTP
(
    id              bigint unsigned auto_increment
        primary key,
    packageName     varchar(1024) null,
    srcAddr         varchar(1024) null,
    srcPort         int           null,
    dstAddr         varchar(1024) null,
    dstPort         int           null,
    host            varchar(1024) null,
    URL             varchar(1024) null,
    requestTime     timestamp     null,
    requestHeaders  varchar(1024) null,
    requestBody     longtext      null,
    responseHeaders varchar(1024) null,
    responseBody    longtext      null,
    protocol        varchar(1024) null,
    method          varchar(1024) null,
    contentType     varchar(1024) null
)
    engine = InnoDB;

PreProcessLog表

create table PreProcessLog
(
    APKID   bigint auto_increment
        primary key,
    APKName varchar(1024) null,
    APPName varchar(1024) null
)
    engine = InnoDB;

Stack表

create table Stack
(
    packageName varchar(1024) null,
    requestTime varchar(1024) null,
    SSL_Session varchar(1024) null,
    function    varchar(1024) null,
    srcAddr     varchar(1024) null,
    srcPort     varchar(1024) null,
    dstAddr     varchar(1024) null,
    dstPort     varchar(1024) null,
    stack       longtext      null
)
    engine = InnoDB;

关于tracedroid的一个大坑,需要安装pcapkit的0.15版本才可以运行,进行信息的提取。

结尾

本介绍已经较为详细,如有问题请联系ryttermohn@gmail.com

About

通过对 Android应用程序在 Java 层与 Native 层的行为进行监测,使用机器学习技术,设计了一套Android 恶意应用检测系统,该系统能够提取 Android 应用程序在运行过程中,Native 层和 Java 层调用产生的 API 序列,以及 Android 应用中申请的 Permission序列,通过 RNN 技术,实现对应用程序恶意性的识别。

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages