androguard-----python语言中Android恶意软件分析工具

APK文件结构

apk文件实际是一个zip压缩包。可以用解压缩工具打开。以QQ安全中心APP为例,其中AndroidManifest.xml是压缩的,名字是固定的。
在这里插入图片描述

androguard用于APK的静态分析

python中有androguard包,可用于Android恶意软件分析。一般第三方库都会在Python官方的pypi网站注册,其安装可通过pip命令(pip install androguard)或者源码下载安装(python setup.py install)。androguard包github源码

  • apk文件信息获取代码示例:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import os
import time
import commands
import sys
import logging
from androguard.core.bytecodes.apk import APK #创建APK文件对象的类,用于访问APK文件中的所有元素
from androguard.core.bytecodes.dvm import DalvikVMFormat#DEX文件对象的类,解析APK文件中的classes.dex
from androguard.core.analysis.analysis import VMAnalysis#分析结果对象的类,分析DEX文件对象

def get_androguard_info():
    #APK、DalvikVMFormat、VMAnalysis类参数属性、方法
    androguard_info = dict()
    androguard_info['APK_info'] = dir(APK)
    androguard_info['DalvikVMFormat_info'] = dir(DalvikVMFormat)
    androguard_info['VMAnalysis_info'] = dir(VMAnalysis)
    return androguard_info

def get_apk_info(apkfile):
    apk_info = {}
    apk_object = APK(apkfile)
    #print apk_object.xml["AndroidManifest.xml"].toxml()
    apk_info['manifest_xml'] = apk_object.get_AndroidManifest() #获取manifest文件
    apk_info['dex_file'] = DalvikVMFormat(apk_object.get_dex()) #获取dex文件
    apk_info['app_name'] = apk_object.get_app_name() #获取APK应用
    apk_info['apkfile_name'] = apk_object.get_filename() #获取APK文件名
    apk_info['signature'] = apk_object.get_signature() #获取APK签名
    apk_info['android_version'] = apk_object.get_androidversion_code() #获取Android版本名
    apk_info['is_valid'] = apk_object.is_valid_APK() #判断APK是否有效
    apk_info['package'] = apk_object.get_package() #获取package名
    #get_activities() 获取APK所有activity名称列表
    #get_main_activity() 获取APK主activity名称
    #get_services() 获取APK所有service名称列表
    #get_receivers() 获取APK所有receiver名称列表
    #get_providers() 获取APK所有provider名称列表
    #get_files() 获取APK文件列表
    #show() APK基本信息
    #get_permissions(),get_requested_permissions(),get_declared_permissions(),get_certificate() 获取APK权限相关信息
    return apk_info

if __name__ == '__main__':
    logger = logging.getLogger()#创建logger对象,
    logger.setLevel(logging.DEBUG) # logger的总开关,只有大于Debug的日志才能被logger对象处理,DEBUG < INFO < WARNING < ERROR < CRITICAL
    format = logging.Formatter(fmt="%(asctime)s - %(levelname)s: %(message)s",datefmt='%Y-%m-%d %H:%M:%S')    # output format
    sh = logging.StreamHandler(stream=sys.stdout)    # output to standard output
    sh.setFormatter(format)
    logger.addHandler(sh)
    logger.info("This is androguard class methods and properties.")
    print get_androguard_info()
    if len(sys.argv) == 2:
        logger.info("This is APK info.")
        print get_apk_info(sys.argv[1])
    else:
        print 'usage: python apk_info.py <file_path>'
  • androguard模块介绍和使用
模块名称模块作用使用方式
androapkinfo.py查看apk文件的包、资源、权限、组件、方法等信息./androapkinfo.py -i ./test.apk
androxml.py解密apk包中的AndroidManifest.xml文件./androxml.py -i -i ./test.apk
androcsign.py添加apk文件的签名信息到一个数据库文件./androcsign.py -i signatures/test.sign -o signatures/dbandroguard
androsign.py检测apk的签名信息是否在数据库里./androsign.py –i ./test.apk -b signatures/dbandroguard -c signatures/dbconfig
androdd.py生成apk文件中,每个类的方法的调用流程图./androdd.py -i ./test.apk -o ./out -d -f PNG
androdiff.py比较两个apk文件的差异./androdiff.py -i ./test.apk ./test2.apk
androdump.py用于dump一个linux进程的信息./androdump.py -i pid
androgexf.py生成apk的gexf格式的图形文件,Gephi软件查看./androgexf.py -i ./test.apk -o ./test.gexf
androlyze.py交互式的Android静态分析程序./androlyze.py -s可进入shell终端
andromercury.py对Mercury的包装参考Mercury的使用介绍
androrisk.py评估apk的潜在风险,最后会得出一个分./androrisk.py -m -i ./test.apk
androsim.py计算两个apk文件的相似度./androsim.py -i ./test.apk ./test2.apk
androxgmml.py生成apk/jar/class/dex等文件的控制流程及功能调用图./androxgmml.py -i ./test.apk -o ./test.xgmml
apkviewer.py为apk文件中每个类生成一个独立的graphhml文件./apkviewer.py -i ./test.apk -o ./output
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值