安卓恶意应用识别(三)(批量反编译与属性值提取)

2023-09-17 11:03:21

前言

上篇说到对安卓APK反编译,本篇实现批量反编译和批量特征提取及计算,主要就是通过python代码与cmd进行批量化交互,我在写文章之前,尝试批量下载了安卓apk(大约10来个),发现现在这个应用软件不是一般的大啊,无奈电脑内存不太够,现仅将已下载10个apk作为示例展示。

1. 批量反编译

思路是这样:
第一步:调用cmd,读取指定路径下的文件,path+benign+k(k=1,2…n),进行反编译
第二步:结果就自动放到该文件夹目录下
出现的问题是os.system调用了cmd后立马又关闭,无法持续执行命令,看到文章windows系统如何使用python执行多条命令行命令
代码如下(我的cmd命令在pycharm中设定的就是malware_identification下):

def oper_cmd(apk):
    cmd_str = "cd ../restore & "+"apktool.bat d -f " + apk
    print(cmd_str)
    return subprocess.Popen(cmd_str, shell=True, stdout=None, stderr=None).wait()
for i in range(1,11):
    apk = "benign" + str(i) + ".apk"
    oper_cmd(apk)

执行如下图,开始批量反编译:
在这里插入图片描述
批量反编译成功!
在这里插入图片描述

2. 单文件特征提取

看到xml标签项和属性值,假设我们需要提取的特征就是属性值的最后一个字符串。
在这里插入图片描述
直接上提取代码,这里用到了xml.dom和正则表达式:

# 获取xml文件当中某个标签的属性值
import re
from xml.dom.minidom import parse

from character_handle.frequency_order import config_file

xmldom = parse(config_file) # 加载XML


for element in xmldom.getElementsByTagName("uses-permission"):
    a = element.getAttribute("android:name")
    b = re.findall(r'\w{1,}', a)[-1]
    print(b)

成功取出,同理,更改TagName也可以获取其他标签的属性值。
在这里插入图片描述
多做一步,计算特征属性值出现的频次:

# 获取xml文件当中某个标签的属性值
import re
from collections import Counter
from xml.dom.minidom import parse

from character_handle.frequency_order import sample_get
def counter(arr):
    return Counter(arr)
xmldom = parse(sample_get.get_file("benign1")) # 加载XML
# 多做一步,将每个特征存储为一个list,然后count
list_uses_permission = []
for element in xmldom.getElementsByTagName("uses-permission"):
    a = element.getAttribute("android:name")
    b = re.findall(r'\w{1,}', a)[-1]
    list_uses_permission.append(b)
c = counter(list_uses_permission)
print(c)

在这里插入图片描述

3. 批量文件特征提取

# 批量获取多个文件夹中xml当中某个标签的属性值
import re
from collections import Counter
from xml.dom.minidom import parse

from character_handle.frequency_order import sample_get
def counter(arr):
    return Counter(arr)
list_uses_permission = []
# 批量加载XML,并提取属性值
for i in range(1,11):
    xmldom = parse(sample_get.get_file("benign%d"%i))

    for element in xmldom.getElementsByTagName("uses-permission"):
        a = element.getAttribute("android:name")
        b = re.findall(r'\w{1,}', a)[-1]
        list_uses_permission.append(b)
c = counter(list_uses_permission)
print(c)

在这里插入图片描述
可以看到count函数已经帮助我们将频次顺序也归纳好了,这时候我们可以根据自己的需求去使用这些属性,end!
下一篇学习一下如何将这些属性值转化为特征值和特征向量进行处理。

更多推荐

【HCIE】07.MPLS VPN单域

MPLSVPN典型应基本组网IntranetVPN1和VPN1一对,VPN2和VPN2是一对ExtranetVPN1和VPN2都能与VPN1建立连接,VPN1与VPN2之间不能建立连接Hub&SpokeMCE组网多CE组网PE是运营商设备,CE是用户侧设备,如果CE较多,那么运营商需要建很多PE和链路,投入成本较大CE

美联储如期暂停加息,非连续性加息或成常态?

KlipC报道:9月21日凌晨,美联储如期暂停加息。KlipC的合伙人AndiD表示:“”美联储在结束货币政策会议后宣布。维持当前5.25%至5.50%的联邦基金利率目标区间不变,保持在22年来最高点,这也是美联储本轮加息周期第二次按下“暂停键”。上一次是今年6月的货币政策会议。D先生指出9月议息会议联储并未继续加息,

Leetcode | 303.区域和检索-数组不可变

303.区域和检索-数组不可变欢迎关注公众号“三戒纪元”题目给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left和right)之间的nums元素的和,其中left<=right实现NumArray类:NumArray(int[]nums)使用数组nums初始化对象intsumRa

C++【个人笔记1】

1.C++的初识1.1简单入门#include<iostream>usingnamespacestd;intmain(){cout<<"helloworld"<<endl;return0;}#include<iostream>;预编译指令,引入头文件iostream.usingnamespacestd;使用标准命名空间

聊聊自动化测试路上会遇到的挑战~

一、测试范围无论是功能测试,还是自动化或者性能测试,第一步要做的,是明确测试范围和需求指标。对于自动化测试来说,特别是UI自动化,并不是所有的功能点都适合做UI自动化。根据具体的业务情况和项目稳定程度,选择UI自动化+API自动化结合,选择合适的业务点来进行针对性的自动化测试方案设计,才是最佳方案。①、使用频次较高,异

Logstash8.3.3 parse 包含a(AM PM)时间报错_dateparsefailure

遇到个奇奇怪怪的错误,我log中的时间是2023/08/2412:01:39AM,我写的格式化时间和转成东八区时间,但是就是一直报错_dateparsefailure,我反复检查了format没有问题,[xxxx][timestamp]这个字段从grok读出来也是正确的,百思不得其解。如果是这种的format的话,在g

Arduino程序设计(十三)触摸按键实验(TTP223)

触摸按键实验前言一、TTP223触摸按键模块二、触摸按键控制LED二、触摸按键状态检测前言本文介绍触摸按键控制LED的原理及实验,主要内容有:1、介绍TTP223触摸按键模块;2、触摸按键控制LED;3、触摸按键状态检测。一、TTP223触摸按键模块1、模块介绍:该模块是一个基于触摸检测IC(TTP223B)的电容式点

小样本目标检测:ECEA: Extensible Co-Existing Attention for Few-Shot Object Detection

论文作者:ZhimengXin,TianxuWu,ShimingChen,YixiongZou,LingShao,XingeYou作者单位:HuazhongUniversityofScienceandTechnology;UCAS-TerminusAILab论文链接:http://arxiv.org/abs/2309.

快速搭建接口自动化测试框架

1接口测试接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。接口自动化相对于UI自动化来说,属于更底层的测试,这样带来的好处就是测试收益更大,且维护成本相对来说较低,是我们进行自动化测试的首选2框架选型目前接口自动化的框架比较多,比如jmeter,就可以集接口自动

企业数字化转型如何成功落地

企业数字化转型是当前趋势,是企业在面对日益变化的商业环境时必须采取的关键策略之一。然而,要实现数字化转型的成功落地并不容易,需要企业有明确的目标和正确的方法。数聚将探讨一些关键的步骤和策略,帮助企业实现数字化转型的顺利落地,并在竞争激烈的市场中取得优势。第一步是明确转型目标。企业在进行数字化转型时,必须清楚地知道自己的

【springMVC】高级部分

拦截器1拦截器(Interceptor)是一种动态拦截方法调用的机制#作用:1.在指定的方法调用前后执行预先设定后的的代码2.阻止原始方法的执行#核心原理:AOP思想#拦截器链:多个拦截器按照一定的顺序,对原始被调用功能进行增强2拦截器使用步骤1实现HandlerInterceptor接口/***三个方法的运行顺序为p

热文推荐