【问题标题】:How I can identify methods declared in .smali file?如何识别 .smali 文件中声明的方法?
【发布时间】:2018-04-11 16:17:40
【问题描述】:

我想从所有 .smalli 文件中提取方法。
是否有任何格式可以在 .smalli 文件中声明方法(API 函数),以便我可以使用 python 脚本轻松提取它。 我正在寻找概念,以便我可以确定 1. 用户定义函数 2. API 函数 3. API 调用序列是如何定义和声明的。我只想使用 python 打印 API 函数和 API 调用序列。

【问题讨论】:

  • 你的意思是smali还是dex? Enjarify 解析 dex 文件,是用 Python 编写的。
  • 我的意思是 smali。我想从 .smali 文件中提取 API 函数,但我无法理解哪些是 API 函数。是否有任何特殊的方法来定义 API 函数,以便我可以从 .smalli 文件中识别它们。我也想提取API调用序列,那么有什么方法可以识别API调用序列并提取它。

标签: android python decompiler smali apktool


【解决方案1】:

该问题询问有关解析 smali 文件的问题,但这不太可能是您真正想要的。假设您的目标是分析 Android 应用程序,您需要解析 dex 文件。幸运的是,有一个用 Python 编写的工具,名为Enjarify,其中包含一个 dex 解析器。它不是为用作库而设计的,因此集成需要一些工作,但您应该能够很容易地弄清楚它。您可以先查看parsedex.py

假设您出于某种原因确实想要解析 smali 文件,事情会变得更加困难,因为 smali 是由 smali 工具定义的文件格式,它是用 Java 编写的。但是,您可以使用 Jython 从 Python 中调用它。

【讨论】:

  • 谢谢,我想从 .smalli 文件中提取函数和 API 调用序列,我想为我的研究工作创建特征向量。我使用 baksmali 工具将 calsses.dex 转换为 .smalli 文件。例如。 Landroid/app/Activity;->是方法(Activity方法是这样写的)。我不想要用户定义的方法,而只想要像 loadjar()、setcomponent() 等的 android API,然后如何识别系统 API 和调用序列。目前我正在从概念的角度来理解 .smalli 文件以及如何识别系统 API、调用序列。
【解决方案2】:

以下是用于识别 .Smali 函数调用的语法

  1. invoke-super vx, vy, : 调用对象 vx 中的父类方法,传入参数 vy。
  2. invoke-direct vx, vy :调用对象 vx 中的方法,参数为 vy,... 没有虚拟方法解析。
  3. invoke-virtual vx, vy : 调用对象 vx 中的虚方法,传入参数 vy。

以下链接提供了从 .smalli 文件开始的良好来源 https://apkudo.com/?p=775

【讨论】:

    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 2017-05-02
    • 2019-01-20
    相关资源
    最近更新 更多