您的位置: 首页 > 生活常识 >

apk是什么文件怎么用(解析 apk 基本信息和方法调用)

100次浏览     发布时间:2024-12-16 09:20:59    

在 Android 开发中, 我们很少使用 Android 逆向去分析 apk 文件的, 但是作为一个测试人员,我们要对这个 apk 文件进行一系列的分析,审核,测试。这篇文章讲解如何解析一个 apk 文件,主要从下面几方面介绍:

● 解析前准备环境介绍

● 解析出 apk 的一些基本信息

● 解析出方法调用图

01

解析前环境介绍

使用语言:python

使用的python库:androguard

本章使用的apk文件:自己编写一个apk,apk文件最好不要混淆

我们先对 APK 文件进行一些简单的介绍

我们解压一个 apk 文件,解压后的目录如上图所示

● META-INF目录

信息描述,签名等用途。

● res 目录

工程的资源文件,以主工程为主,其他文件(jar包)会合并到该目录下;但values文件将不会出现在此目录下,因为已经将其编译到resource.arsc文件中;raw文件会保持原有内容不会被编译。

● resources.arsc

编译后的二进制资源文件, 在网上查了说,很多做汉化补丁就是修改这个资源包进行汉化的。

● classes.dex

虚拟机执行的文件

● AndroidManifest.xml

清仓文件

def unzip_file(zip_src, dst_dir):
    print(dst_dir)
    r = zipfile.is_zipfile(zip_src)
    if r:
        fz = zipfile.ZipFile(zip_src, 'r')
        for file in fz.namelist():
        fz.extract(file, dst_dir)
        searchDirFile(dst_dir)
    else:
        print('This is not zip')

02

解析APK的一些基本信息

from androguard.misc import AnalyzeAPK
apk, dex, dx = AnalyzeAPK(filePath)

这三个对象对应的类别是:下面会分别介绍

androguard.core.bytecodes.apk.APK

androguard.core.bytecodes.dvm.DalvikVMFormat

androguard.core.analysis.analysis.Analysis

这个 apk 文件对象,其实就是读取 AndroidManifest.xml 文件, 了解过Android 的程序员应该知道,这个文件中就是清仓文件, 我们申请一些权限,注册 Activity, Service, Broadcast,ContentProvader 都在清仓文件中申请。

特别注意

我们一般在编写代码的时候,有一些注册文件可能只注册了,但是没有实际的实现,我们在编译项目的时候,这些文件注册虽然会报错,但是不影响编译,运行的时候也不会报错,所以apk只是单纯的读取AndroidManifest.xml 文件,并不会验证读取文件的有效性。解决方法我们下面在具体介绍。

permissions = apk.get_permissions() # APK 获取权限信息
activities = apk.get_activities()   # APK 全部的 activity
service = apk.get_services()        # APK 全部的 service
receiver = apk.get_receivers()      # APK 全部的 广播
provider = apk.get_providers()      # APK 全部的 providers
packagename = apk.get_package()     # 获取当前 APK 的名字
appname = apk.get_app_name()        # 获取当前 appName

03

解析出方法调用图

有兴趣可以参考

https://www.jianshu.com/p/c753184ac90c 

我们可以使用 dex 对象, 获取文件中所有类的,所有方法,所有的成员变量和字符串。注意, 这边获取的 dex 对象是一个 list

900×65 36.7 KB

看起来很完美了,也可以解决我们上面提到的问题。但是和我们最终目标还有有点远,就是获取的方法调用图。我们最后一个 dx 即将登场。

classAnalysis = dx.classes['Lcom/example/songzekun/myapplication/MainActivity;']
    for meth in classAnalysis.get_methods():
        for _, call, _ in meth.get_xref_from():
            print("from -> {} -- {}".format(call.class_name, call.name))
        for _, call, _ in meth.get_xref_to():
            print("to -> {} -- {}".format(call.class_name, call.name))

1080×638 203 KB

from 是方法的调用来源, to 是当前方法中执行了那些方法, 我们可以根据这样的关系, 来构建整个应用的类,方法之间的调用图。

当然你还需要对一些 api 的方法进行一些过滤。下面代码是我对一些基本信息的过滤,过滤结束后,就是我们真正实现的方法。

# 我们排除一下
def screenClass(packagename, activities, service, receiver, provider):
    packagename = packagename.replace('.', '/')
    classAnalysis = dx.get_internal_classes()
    className = []
    activityName = []
    serviceName = []
    receiverName = []
    providerName = []
    for item in classAnalysis:
        if packagename in item.name:
           className.append(item.name)
    for item in activities:
        item = changeClass(item)
        if item in className:
            activityName.append(item)
    for server in service:
        item = changeClass(item)
        if server in className:
            serviceName.append(server)
    for rece in receiver:
        item = changeClass(item)
        if rece in className:
            receiverName.append(rece)
    for pro in provider:
        item = changeClass(item)
        if pro in className:
            providerName.append(pro)
    return className, activityName, serviceName, receiverName, providerName

04

总结

到这里,我也介绍完毕,总体说来,就是apk的静态扫描技术,我个人就以这些技术做一些应用场景,欢迎大家留言讨论。

APK 代码结构展示

精准测试用例推荐

APK上架自动检测

根据 APK 文件直接提取代码特征,应用特征,对当前的APK 做分类(比如一些木马病毒的的APK), 对APK进行风险评估, 也可以作APK错误扫描,崩溃预测,敏感权限申请等等。

相关文章
  • 激光美白嫩肤效果怎么样?明显吗   2023-10-18 18:09:09

      护肤已经成为和吃饭喝茶一样必做的事情,尤其是对于女性。很多人皮肤天生比较暗黑,也因年龄因素导致肌肤暗黄粗糙,要想保持年轻容颜选择激光美白。那么,激光美白嫩肤的效果怎么样?  激

  • 电脑系统坏了怎么修复?4招解决   2023-10-18 18:03:36

    电脑系统使用的时间久后容易出现各种故障问题,比如说常见的电脑蓝屏,黑屏,电脑无法开机等情况。当遇到这些情况的时候,很多人都不知道该怎么解决。那么电脑系统坏了怎么修复呢?下面就给大家

  • 前脚掌疼是怎么回事(为什么会脚底板痛?或与这7因素有关,八个方法可有效缓解)   2023-10-18 18:02:53

    脚板底痛是生活中十分常见的一种症状,虽然不是什么严重的疾病,但是会让人十分的不舒服。所以下面就让我们看一下脚底板痛的原因,以及缓解脚底板痛的一些方法吧!  脚底板疼痛的原因:1、如

  • 油性皮肤如何美白最快?很多人都没搞懂,难怪用大牌也是浪费   2023-10-18 17:58:54

    美白护肤方法多、产品丰富,但是为什么有人用了就是白不了呢?因为大家在尝试各种美白方法时,忘了非常重要的一步:分清肤质做美白。不同肤质的人变黑的原因各不相同,也不单单是用美白精华就能

  • 如何自制美白面膜介绍7款美白面膜的自制做法   2023-10-18 17:57:27

    所谓一白遮百丑,夏天是最容易晒黑的一个季节。皮肤稍不留意就会被晒黑,如何快速美白呢?今天给大家带来的就是自制美白面膜让你快速美白。蕃茄加蜂蜜将蕃茄搅拌成蕃茄汁后,加入适量蜂蜜调匀成

  • 电脑选购——电脑哪种品牌比较好   2023-10-18 17:56:52

    手提电脑哪个牌好?这个没有一个绝对的答案,与其说哪个电脑牌子最好,还不如说哪个牌子的哪款电脑更适合自己。下面来看看世界笔记本电脑排名,或许你就知道手提电脑哪个牌好了。1.联想Thi