【Android逆向】Smali文件的结构

本帖最后由 孤独残影 于 2019-7-9 17:06 编辑

      以下内容是我针对【Android逆向】Smali文件结构所整理的一些内容,希望对需要的人有帮助!
      新手教程  大牛勿扰
          有什么需要改进的地方,希望大家能一起讨论,有什么问题和建议也可以私聊我!希望得到大家的更多支持!首先我们要了解smali文件,我们需要先了解当前类的名称;
      它由三个部分组成,第一部分是类的相关信息;第二部分是类的描述;第三是方法信息;完整的类名包括包名和类名(完整的包名=包名+类名);
            


       第二组成部分:其中classsupersource表示的是类,publicprivate表示的是访问权限,后面的btnloginedit pwd等表示字段名称(field就是字段的意思),button表示按钮,edittext表示编辑框;
            


       关于oncreate,其#direct methods 表示的是一个直接方法,constructor代表一个构造类,invoke表示直接调用,init代表初始化,return-void代表返回值为空;
            


            .Prologue表示方法正式开始;
            


           .line 22代表的是行号信息,没啥作用,可以方便定位,行号之间就是一个代码群;注意一下invoke-super表示的就是调用父类的方法
           


           # interfaces用来描述接口;
           


           总结:
      无论是普通类、抽象类、接口类或者内部类、在反编译出的代码中,它们都以单独的smali文件来存放。
      每个smali文件都由若干条语句组成,所以的语句都遵循着一套语法规范。
      1. 描述类的信息.class <访问权限> [修饰关键词] <类名>
                                      .super <父类名>
                                      .source <源文件名>
      2. 静态字段
                   # static fields
                      .fields<访问权限>static[修饰关键词]<字段名>:<字段类型>
      3. 实例字段
                   # instance fields.fields<访问权限>[修饰关键词]<字段名>:<字段类型>
      4. 直接方法
                   # direct methods
                      .method<访问权限>[修饰关键字]<方法原型>
                      <.locals>                       “.locals” 指定了使用的局部变量的个数
                      [.parameter]  “.parameter”          指定了方法的参数
                      [.prologue]   “.prologue”             指定了代码的开始处
                      [.line]                “.line”                  指定了该处指令在源代码中的行号
                      <代码体>
                      .end method
      5. 虚方法的声明与直接方法相同,只是起始处的注释为”virtual method”
      6. 接口
                 # interfaces
                 .implements<接口名>”.implements”是接口关键字,后面的接口名是DexClassDef结构中interfacesOFF字段指定的内容。
      7. 注解
                 #annotations
                   .annotations[注解属性]<注解类名>
                                            [注解字段 =
                   .end annotations注解的作用范围可以是类、方法或者字段。如果注解的作用范围是类;
                   “.annotations”指令会直接定义在smali文件中,如果是方法或者字段;
                   “.annotations”指令则会包含在方法或字段定义中。

               视频链接:https://pan.baidu.com/s/1XnCvI2aKZaKnJRdrk-Ypig
                                 提取码: xh7j

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员的头像-小北的自留地

    昵称

  • 取消
    昵称