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

前言

上篇说到对安卓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!
下一篇学习一下如何将这些属性值转化为特征值和特征向量进行处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恶意企鹅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值