zoukankan      html  css  js  c++  java
  • Android逆向基础知识Smali

    什么是Smali:

    我们用工具反编译一些APP的时候,会看到一个smali文件夹,里面其实就是每个Java类所对应的smali文件。Android虚拟机Dalvik并不是执行java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是smali代码,可以说,smali语言是Dalvik的反汇编语言

    JAVA和Smali数据类型对比:

       JAVA                    Smali
    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

    参考:

    http://blog.csdn.net/lostinai/article/details/48975661

    http://blog.csdn.net/sjim_/article/details/50443860

  • 相关阅读:
    screen命令
    完全背包问题
    01背包问题
    数组排序使得数组负数在正数左边且按照原来的顺序
    Git 后悔药系列
    Nacos作为注册中心和配置中心
    JDK15都出了,你确定不来了解下JDK8吗?
    WPF创建一个凹凸效果的边框
    vue---splitpane分割
    列表实现拖拽
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9109331.html
Copyright © 2011-2022 走看看