Android_逆向开发_Smali基础语法和介绍!

在开始逆向开发之前,先给大家介绍几个概念

什么是smali语言? smali语言是是Dalvik的反汇编语言,是最终虚拟机识别的语言。也就是说无论App怎么混淆,怎么加密,smali语言都是不能改变的,我们可以改smali从而实现改源码的功能!

下面给大家介绍一下Smali的基本语法:

Smali                 JAVA  
V                      void
Z                      boolean
B                      byte
S                      short
C                      char
I                      int
J                      long
F                      float
D                      double

引用类型
L                      对象
[                      数组

语法:

.field  定义变量

.method  方法

.parameter  方法参数

.prologue  方法开始

.line 12  此方法位于第12行

invoke-super  调用父函数

const/high16  v0, 0x7fo3  把0x7fo3赋值给v0

invoke-direct  调用函数

return-void  函数返回void

.end method  函数结束

new-instance  创建实例

iput-object  对象赋值

iget-object  调用对象

invoke-static  调用静态函数

smali跳转语句

“if-eq vA, vB, :cond_**” 如果vA等于vB则跳转到:cond_**

“if-ne vA, vB, :cond_**” 如果vA不等于vB则跳转到:cond_**

“if-lt vA, vB, :cond_**” 如果vA小于vB则跳转到:cond_**

“if-ge vA, vB, :cond_**” 如果vA大于等于vB则跳转到:cond_**

“if-gt vA, vB, :cond_**” 如果vA大于vB则跳转到:cond_**

“if-le vA, vB, :cond_**” 如果vA小于等于vB则跳转到:cond_**

“if-eqz vA, :cond_**” 如果vA等于0则跳转到:cond_**

“if-nez vA, :cond_**” 如果vA不等于0则跳转到:cond_**

“if-ltz vA, :cond_**” 如果vA小于0则跳转到:cond_**

“if-gez vA, :cond_**” 如果vA大于等于0则跳转到:cond_**

“if-gtz vA, :cond_**” 如果vA大于0则跳转到:cond_**

“if-lez vA, :cond_**” 如果vA小于等于0则跳转到:cond_**

DEMO:

java代码
        private boolean show(){
                boolean tempFlag = ((3-2)==1)? true : false;
                if (tempFlag) {
                    return true;
                }else{
                    return false;
                }
            }

转换smali代码
.method private show()Z
    .locals 2

    .prologue           //方法开始
    .line 22
    const/4 v0, 0x1     // v0赋值为1

    .line 24
    .local v0, tempFlag:Z
    if-eqz v0, :cond_0            // 判断v0是否等于0, 不符合条件向下走, 符合条件执行cond_0分支

    .line 25
    const/4 v1, 0x1            // 符合条件分支

    .line 27
    :goto_0
    return v1

    :cond_0
    const/4 v1, 0x0            // cond_0分支

    goto :goto_0
.end method

你可能感兴趣的:(技术分析,Androd逆向开发,smali,smali基础)