Smail语言 switch case 还原Java逆向分析

Java 逆向成Smail中间语言,一般都比较容易解读。switch case 算是大家疑问比较多的一种结构。在case 值是连续的情况下,一般比较简单,今天就不说了。我们今天来说一下case值离散的情况下怎么分析。

    直接上Smail代码

const/4 v0, 0x0

    .local v0, "c":I
    const/4 v1, 0x0

    .local v1, "d":I
    const/4 v2, 0x0

    .line 28
    .local v2, "e":I
    iget v3, p0, Lcom/a/b/MainActivity;->b:I   //这个就是我们要判断的值

    packed-switch v3, :pswitch_data_0        //进入case 模块 ,根据v3值的不同,实现不同的跳转

    .line 41
    :pswitch_0                                              // case 0分支,注意这里的pswitch_0 并不是指 v3 ==0的时候跳转的分支。而只是代                                                                       码块的调用标记而已 。具体原因下面会说明。                                                               
    div-int v0, v1, v2

    .line 47
    :goto_1
    return-void

    .line 19
    .end local v0    # "c":I
    .end local v1    # "d":I
    .end local v2    # "e":I

    .line 30
    .restart local v0    # "c":I
    .restart local v1    # "d":I
    .local v2, "e":I
    :pswitch_1
    add-int v0, v1, v2

    .line 31
    goto :goto_1

    .line 34
    :pswitch_2                               //  case 2 ,这里pswitch_2 也是代码块调用标记
    sub-int v0, v1, v2

    .line 35
    goto :goto_1

    .line 37
    :pswitch_3
    mul-int v0, v1, v2

    .line 38
    goto :goto_1

    .line 28
    :pswitch_data_0
    .packed-switch 0x3    // 从这一行开始,才是对v3真正的值进行说明。 packed-switch 0x3表示  v3的初始值为3 
        :pswitch_1       //v3 == 3 的时候,跳转到代码块  pswitch_1
        :pswitch_0       //v3 == 4 的时候,跳转到代码块  pswitch_0
        :pswitch_2       //v3 == 5 的时候,跳转到代码块  pswitch_2
        :pswitch_0      // v3 == 6 的时候,跳转到代码块  pswitch_0
        :pswitch_3      // v3 == 7 的时候,跳转到代码块  pswitch_3
    .end packed-switch

所以翻译成java代码是

int c=0,d = 0,e=0;
        
        
        switch (b) {
        case 3:
            c = d+e;
            break;
        
        case 5:
            c = d-e;
            break;
        case 7:
            c = d*e;
            break;
            
        default:
            c = d/e;
            break;
        }

发布了63 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/MarketAndTechnology/article/details/81661874