smali语法基础详解

el/2024/4/19 23:52:40

一、介绍

apk文件通过apktool反编译出来的都有一个smali文件夹,里面都是以.smali结尾的文件。
smali语言是Davlik的寄存器语言,语法上和汇编语言相似,Dalvik VM与JVM的最大的区别之一就是Dalvik VM是基于寄存器的。基于寄存器的意思是,在smali里的所有操作都必须经过寄存器来进行。

二、类型

Java中的基本数据类型与Dalvik字节码类型的对应关系

DalvikJava
Bbyte
Cchar
Ddouble
Ffloat
Iint
Sshort
Vvoid
Jlong
Zboolean

*注意J、Z两个不是对应类型的首字母;在dalvik字节码中,寄存器都是32位的,能够支持任何类型,Long和Double类型是64位的,需要2个寄存器;V 只能用于返回值类型;

三、描述类的信息

在打开smali文件的时候,它的头三行描述了当前类的一些信息
.class < 访问权限> [ 修饰关键字] < 类名>
.super < 父类名>
.source <源文件名>
.class指令表示当前的类名,类的访问权限是public,类名为LHelloWorld,类开头的L表示后面跟随的字符串是一个类。
.super指定了当前类所继承的父类,后面指的就是这个父类的类名,L表示后面跟的字符串是一个类.
例:

.class public Lcom/tt/android/xigua/detail/c/a$1;
.super Ljava/lang/Object;
.source "SourceFile"

四、静态字段

#static fields
.field < 访问权限> static [ 修饰关键字]< 字段名>:< 字段类型>
baksmali在生成smali文件时,会在静态字段声明的起始处添加注释”static fields”,注释是以#开头。
访问权限包括:private、protected、public修饰关键字为字段其他属性。
例:

# static fields
.field public static a:Lcom/meituan/robust/ChangeQuickRedirect;

五、实例字段

#instance fields
.field < 访问权限> [ 修饰关键字] < 字段名>:< 字段类型>
例:

# instance fields
.field final synthetic b:Lcom/tt/android/xigua/detail/c/a;

六、直接方法

直接方法指的是该类中定义的方法。
#direct methods
.method <访问权限> [ 修饰关键字] < 方法原型>、
<.registers>、<.locals> [.param][.prologue][.line]<代码体>
.end method
例:

.method public f()Ljava/lang/String;.locals 4.prologue.line 196608const/4 v0, 0x0…………………….line 196609
.end method

#direct methods 是注释,是baksmali添加的,访问权限和修饰关键字 跟字段是一样的。方法原型 描述了
方法的名称、参数与返回值。
.registers 指令指定了方法中寄存器的总数,这个数量是参数和本地变量总和。
.param 表明了方法的参数,每个.param指令表示一个参数,方法使用了几个参数就有几个.parameter指令。
.prologue 指定了代码的开始处,混淆过的代码可能去掉了该指令。
.line 指明了该处代码在源代码中的行号,同样,混淆后的代码可能去掉了行号。
.local 使用这个指定表明方法中非参寄存器

七、虚方法

虚方法指的是从父类中继承的方法或者实现的接口的方法,它的声明跟直接方法相同,
只是起始的初始为“virtual methods”。
#virtual methods
.method <访问权限> [ 修饰关键字] < 方法原型>
<.registers><.locals> [.param] [.prologue] [.line] <代码体>
.end method

八、接口

如果一个类实现了一个接口,那么会在smali文件中用.implements指令指出。
#interfaces
.implements < 接口名>
#interfaces是注释,
.implements 是接口关键字,后面的接口名是 DexClassDef 结构中 interfacesOff 字段指定的内容

# interfaces
.implements Lcom/tt/floatwindow/video/a/d;
console.log("公众号:虫术")
Blog:http://404nofoundx.top/

http://www.ngui.cc/el/3376896.html

相关文章

安卓逆向 | 某社交类APP shield

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、分析执行流程 initializeNative()---->cPtr = initialize(str)----->intercept(Interceptor.Chain chain, long j2) 二、Unidbg public class xhs extends AbstractJni {private final Andro…

安卓逆向 | 某社交类APP gsid

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、目标参数 gsid 二、抓包 表单里面必要的几个参数checktoken、mfp、appkey,其中appkey是固定值。 0x01、checktoken jadx搜索checktoken,跟进去发现个b方法,用r0tracer hook一下这个方法,根据抓…

安卓逆向 | 某新闻类APP sign

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、抓包 POST请求,url和header里面都携带一个sign,url中的sign猜测可能是根据From表单进行的加密,修改参数,显示签名错误,header里面可能是根据时间戳进行的加密。 二、Header中的sign 1、Java层分…

安卓逆向 | 某新闻类APP sn

*本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除 一、抓包 通过抓包,然后转换成python代码,通过删除字段的方式确定加密参数为 st:猜测为时间戳sn:猜测根据时间戳加密二、脱壳 查壳工具查看有壳,用Frida-DEXDump脱壳,不会的可以点击传送门,开箱即用…

密码学 MD5信息摘要算法

一、简介 MD5信息摘要算法&#xff08;英语&#xff1a;MD5 Message-Digest Algorithm&#xff09;&#xff0c;一种被广泛使用的密码散列函数&#xff0c;可以产生出一个128位&#xff08;16字节&#xff09;的散列值&#xff08;hash value&#xff09;&#xff0c;用于确保…

mitmproxy:ImportError: DLL load failed while importing _brotli: 找不到指定的模块。

问题: ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 ImportError: DLL load failed while importing _brotli: 找不到指定的模块。 解决方案: https://support.mi…

(点云补全任务)GAN逆映射:Unsupervised 3D Shape Completion through GAN Inversion

&#xff08;点云补全任务&#xff09;GAN逆映射&#xff1a;Unsupervised 3D Shape Completion through GAN Inversion简介论文abstract1. introduction2. related works3. method概述3.1 Enhancing Point Cloud Uniformity3.2 Degradation in the 3D Space3.3 Loss Function …

多视图分类)View-GCN:View-based Graph Convolutional Network for 3D Shape Analysis

&#xff08;多视图分类&#xff09;View-GCN&#xff1a;View-based Graph Convolutional Network for 3D Shape Analysis简介论文abstract1. Introduction2. Related Works2.1 Multi-view 3D shape recognition2.2 Graph convolutional networks3. Overview of Our Approach3…

(多视图分类)EMVN:Equivariant Multi-View Network

(多视图分类&#xff09;EMVN&#xff1a;Equivariant Multi-View Network简介论文abstractintroduction2. Related work2.1 3D shape analysis2.2 Equivariant representations3. Preliminaries4. Method4.1 View configurations4.2 Group convolutional networks4.3 Equivari…

点云生成-PointFlow: 3D Point Cloud Generation with Continuous Normalizing Flows

点云生成-PointFlow: 3D Point Cloud Generation with Continuous Normalizing Flows简介论文摘要1.introduction2.related works3. Overview4. Background4.1. Continuous normalizing flow4.2. Variational auto-encoder5. Model5.1. Flow-based point generation from shape…