android 反编译 .smali,Android_反编译_smali语法

文件基本格式

普通类、抽象类、接口、内部类,在反编译出来的smali代码中都是以单独的smali文件存放。每个smali 文件头3行描述基本信息

.class [修饰关键字]

.super

.source

打开 MainActivity.smali 文件

.class public Lcom/example/demo/MainActivity;

.super Landroid/app/Activity;

.source "MainActivity.java"

第一行“.class” 指定当前的类名 ,类名表示类似于 jni 技术的类

第二行“.super” 指定父类

第三行“.source” 指定当前类的源文件名,混淆后可能没有值

如果类实现过接口

# interfaces

.implements Landroid/view/View$OnClickListener;

属性

静态属性 # static fields

.field static [修饰关键字] :

"#"开头为注释,“.field” 后面的访问权限为public、private、protected之一,修饰关键字为 final... ,字段名与字段类型使用冒号“:”分隔,类似swift的变量声明语法

var str:String = "hello"

具体示例

# static fields

.field private static final TAG:Ljava/lang/String; = "Activity"

实例属性 # instance fields

.field static [修饰关键字] :

与静态属性相比少了static 关键字

方法

# direct methods

.method [修饰关键字]

[.parameter]

[.prologue]

[.line]

.end method

“.locals” 表示局部变量的个数

“.parameter” 方法的参数,肯存在多条

“.prologue” 代码的开始处,混淆的代码可能去掉改条

“.line” 知道在源代码中的行号

虚方法在起始的注释为“virtual methods”

静态方法 .method public static getString()Ljava/lang/String;

.locals 1

.prologue

.line 58

const-string v0, ""

return-object v0

.end method

内部类

文件名 ”[外部类名]$[内部类名].smali“

匿名内部类 ”[外部类名]$[数字].smali“

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值