易锦教育吧 关注:57贴子:1,081
  • 12回复贴,共1

安卓逆向小白学习之Smali基本语法 [易锦教育]

只看楼主收藏回复



1楼2020-09-27 10:54回复
    一般我们安卓都是采用java来进行开发的,但安卓系统有自己的虚拟机,代码编译最终不是采用java的class而是smali,jar很多地方是没有办法解释出来的,我们反翻译用smali是可以理解程序的意思,所以我们必须要熟悉smali基本语法。


    2楼2020-09-27 10:55
    回复
      .field private isFlag:z  定义变量
      .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  调用静态函数


      3楼2020-09-27 10:57
      回复
        条件跳转分支
        "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_**


        4楼2020-09-27 10:59
        回复
          if函数的java代码
          private boolean ifSense(){
          boolean tempFlag = ((3-2)==1)? true : false;
          if(tempFlag) {
          return true;
          }else{
          return false;
          } }


          5楼2020-09-27 11:01
          回复
            if函数分析
            .method private ifSense()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###文字描述:如果符合if分支则程序往下走,最终return ; 而如果条件不符合则会走到 :cond_0分支 , 最终执行 goto :goto_0走回 :goto_0返回


            6楼2020-09-27 11:04
            回复
              for函数java代码
              private void forSense(){
              listStr = new ArrayList<String>(COUNT);
              for (int i = 0; i < COUNT; i++) {
              listStr.add("现在轮到我上场乐"); }
              }


              7楼2020-09-27 11:06
              回复
                for函数分析
                .line 40
                const/4 v0, 0x0
                .local v0, i:I
                :goto_0
                if-lt v0, v3, :cond_0 // if-lt判断数值v0小于v3 , 如不符合往下走, 符合执行分支 :cond_0
                .line 43
                return-void
                .line 41
                :cond_0 // 标签


                8楼2020-09-27 11:08
                回复
                  .line 40
                  const/4 v0, 0x0
                  .local v0, i:I
                  :goto_0
                  if-lt v0, v3, :cond_0 // if-lt判断数值v0小于v3 , 如不符合往下走, 符合执行分支 :cond_0
                  .line 43
                  return-void
                  .line 41
                  :cond_0 // 标签 iget-object v1, p0, Lcom/example/smalidemo/MainActivity;->listStr:Ljava/util/List; // 引用对象
                  const-string v2, "\u73b0\u5728\u8f6e\u5230\u6211\u4e0a\u573a\u4e50"
                  invoke-interface {v1, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z // List是接口, 所以执行接口方法add .line 40
                  add-int/lit8 v0, v0, 0x1    // 将第二个v0寄存器中的值,加上0x1的值放入第一个寄存器中, 实现自增长
                  goto :goto_0 // 回去:goto_0标签
                  ###文字描述:设定一个标签goto_0, 判断v0小于v3, 符合执行分支:cond_0 ,然后又跑回:goto_0做继续判断


                  9楼2020-09-27 11:11
                  回复
                    这个可以 ,我收藏了 谢谢楼主


                    10楼2020-09-27 14:50
                    回复
                      收藏了,也报班了,不过很多都看不懂


                      IP属地:贵州来自Android客户端11楼2020-09-27 16:22
                      回复
                        虽然看不懂,但是感觉很厉害的样子


                        12楼2020-09-27 16:35
                        回复
                          都是拖,骗子机构,请勿上当


                          来自手机贴吧13楼2021-03-14 18:02
                          回复