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

APK文件结构

apk文件实际是一个zip压缩包。可以用解压缩工具打开。以QQ安全中心APP为例,其中AndroidManifest.xml是压缩的,名字是固定的。
androguard-----python语言中Android恶意软件分析工具_第1张图片

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 '
  • 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

你可能感兴趣的:(python)