zoukankan      html  css  js  c++  java
  • Android_smali_代码注入

    //日志注入

    const-string v8, "----->parameter1:"

    invoke-static {v8, p1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

       

    //栈跟踪信息记录了程序从启动到printStackTrace()被执行期间所有被调用过的方法。

    # virtual methods

    .method public stack()V

        .locals 2

        .prologue

    .line 20

        new-instance v0, Ljava/lang/Exception;

        const-string v1, "----->print trace"

        invoke-direct {v0, v1}, Ljava/lang/Exception;-><init>(Ljava/lang/String;)V

        invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V

        .line 21

        return-void

    .end method

    //转换string输出

    //publicstaticvoid main(String[] args) {

    // int number = 0;

    // Log.i("----->", String.valueOf(number));

    //}

    .method public static main([Ljava/lang/String;)V

        .locals 3

        .parameter "args"

        .prologue

        .line 11

        const/4 v0, 0x0

    .line 12

    .local v0, number:I

        const-string v1, "----->"

        invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

        move-result-object v2

        invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

        .line 13

        return-void

    .end method

    //byte数组转换字符串

    # virtual methods

    .method public byteToString([B)V

        .locals 3

        .parameter "paramArrayOfByte"

    .prologue

    :try_start_0

        new-instance v1, Ljava/lang/String;

        const-string v2, "UTF-8"

        invoke-direct {v1, p1, v2}, Ljava/lang/String;-><init>([BLjava/lang/String;)V

        .local v1, string:Ljava/lang/String;

        const-string v2, "----->"

    invoke-static {v2, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

        :try_end_0

        .catch Ljava/io/UnsupportedEncodingException; {:try_start_0 .. :try_end_0} :catch_0

        .end local v1           #string:Ljava/lang/String;

        :goto_0

        return-void

        :catch_0

        move-exception v0

        .local v0, e:Ljava/io/UnsupportedEncodingException;

        invoke-virtual {v0}, Ljava/io/UnsupportedEncodingException;->printStackTrace()V

    goto :goto_0

    .end method

    //另一种byte数组转换字符串

    new-instance v6, Ljava/lang/String;

    invoke-direct {v6, v0}, Ljava/lang/String;-><init>([B)V

    const-string v5, "----->d.smali_b([BIII)[B_return"

    invoke-static {v5, v6}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    //JSON转字符串

       //v0寄存器代表JSONObject

       const-string v1, "-->json"

       invoke-virtual {v0}, Lorg/json/JSONObject;->toString()Ljava/lang/String;

       move-result-object v2

       invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    则是因为很多指令不能够使用大于15的寄存器,故应该加上“move-object/from16 v1, px”语句进行转换。

    //调用对象的toString方法 输出

       invoke-virtual {p0}, Lcom/huawei/appmarket/datasource/pojo/b;->toString()Ljava/lang/String;

       move-result-object v3

       const-string v2, "@@@@@>1a>pojo"

       invoke-static {v2, v3}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    //Int转换string

    const-string v1, "----->"

        invoke-static {v0}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;

        move-result-object v2

        invoke-static {v1, v2}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    //for( : ) 遍历

    .method public static main([Ljava/lang/String;)V

        .locals 4

        .parameter "args"

        .prologue

        .line 18

        new-instance v0, Ljava/util/ArrayList;

        invoke-direct {v0}, Ljava/util/ArrayList;-><init>()V

        .line 19

        .local v0, list:Ljava/util/List;,"Ljava/util/List<Ljava/lang/String;>;"

        const-string v2, "a"

        invoke-interface {v0, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z

        .line 20

        const-string v2, "b"

        invoke-interface {v0, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z

        .line 21

        const-string v2, "c"

        invoke-interface {v0, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z

        .line 22

        const-string v2, "d"

        invoke-interface {v0, v2}, Ljava/util/List;->add(Ljava/lang/Object;)Z

        .line 24

        invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;   #获取集合迭代器

        move-result-object v2

        :goto_0  #迭代循环开始

        invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z #开始迭代

        move-result v3

        if-nez v3, :cond_0 #如果迭代器不为空就跳走

        .line 27

        return-void

        .line 24

        :cond_0

        invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object;  #循环获取每一项

        move-result-object v1 

        check-cast v1, Ljava/lang/String;

        .line 25

        .local v1, string:Ljava/lang/String;

        sget-object v3, Ljava/lang/System;->out:Ljava/io/PrintStream;

        invoke-virtual {v3, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

        goto :goto_0   #跳转到循环开始处

    .end method

    //for (int i = 0; i < 10; i++) {

    // System.out.println(i);

    //}

    .method public static main([Ljava/lang/String;)V

        .locals 2

        .parameter "args"

        .prologue

        .line 15

        const/4 v0, 0x0

        .local v0, i:I #初始化v0为0

        :goto_0  #循环开始

        const/16 v1, 0xa

        if-lt v0, v1, :cond_0 #判断v0小于v1,则跳转到cond_0标号处

        .line 18

        return-void

        .line 16

        :cond_0

        sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

        invoke-virtual {v1, v0}, Ljava/io/PrintStream;->println(I)V

        .line 15

        add-int/lit8 v0, v0, 0x1 #下一个索引

        goto :goto_0   #跳转到循环起始处

    .end method

    int number = 1;

          switch (number) {

          case 0:

             System.out.println(0);

             break;

          case 1:

             System.out.println(1);

             break;

          case 2:

             System.out.println(2);

             break;

          case 3:

             System.out.println(3);

             break;

          default:

             break;

    }

    .method public static main([Ljava/lang/String;)V

        .locals 3

        .parameter "args"

        .prologue

        .line 15

        const/4 v0, 0x1

        .line 16

        .local v0, number:I

        packed-switch v0, :pswitch_data_0 #packed-switch分支,pswitch_data_0指定case区域

    .line 32

        :goto_0  #所有case的出口

        return-void

        .line 18

        :pswitch_0

        sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

        const/4 v2, 0x0   #case 0

        invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(I)V

        goto :goto_0 #跳转到goto_0标号处

        .line 21

        :pswitch_1

        sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

        const/4 v2, 0x1   #case 1

        invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(I)V

        goto :goto_0 #跳转到goto_0标号处

        .line 24

        :pswitch_2

        sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

        const/4 v2, 0x2   #case 2

        invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(I)V

        goto :goto_0 #跳转到goto_0标号处

        .line 27

        :pswitch_3

        sget-object v1, Ljava/lang/System;->out:Ljava/io/PrintStream;

        const/4 v2, 0x3   #case 3

        invoke-virtual {v1, v2}, Ljava/io/PrintStream;->println(I)V

        goto :goto_0 #跳转到goto_0标号处

        .line 16

        nop

        :pswitch_data_0

        .packed-switch 0x0   #case区域,从0开始,依次递增

            :pswitch_0

            :pswitch_1

            :pswitch_2

            :pswitch_3

        .end packed-switch

    .end method

    //写文件

    publicvoid writeFileData(String fileName, String message) {

    try {

    FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE);

    byte[] bytes = message.getBytes();

    fout.write(bytes);

       fout.close();

    } catch (Exception e) {

       e.printStackTrace();

    }

    }

    ---------------------------------------------------------------------------------------

    //调用

        const-string v0, "001.txt"

        const-string v1, "test"

        invoke-virtual {p0, v0, v1}, Lcom/example/writefiles/MainActivity;->writeFileData(Ljava/lang/String;Ljava/lang/String;)V

    ---------------------------------------------------------------------------------------

    .method public writeFileData(Ljava/lang/String;Ljava/lang/String;)V

        .locals 4

        .parameter "fileName"

        .parameter "message"

        .prologue

        .line 27

        const/4 v3, 0x0

        :try_start_0

        invoke-virtual {p0, p1, v3}, Lcom/example/writefiles/MainActivity;->openFileOutput(Ljava/lang/String;I)Ljava/io/FileOutputStream;

        move-result-object v2

        .line 28

        .local v2, fout:Ljava/io/FileOutputStream;

        invoke-virtual {p2}, Ljava/lang/String;->getBytes()[B

        move-result-object v0

        .line 29

        .local v0, bytes:[B

        invoke-virtual {v2, v0}, Ljava/io/FileOutputStream;->write([B)V

        .line 30

        invoke-virtual {v2}, Ljava/io/FileOutputStream;->close()V

        :try_end_0

        .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0

        .line 34

        .end local v0           #bytes:[B

        .end local v2           #fout:Ljava/io/FileOutputStream;

        :goto_0

        return-void

        .line 31

        :catch_0

        move-exception v1

        .line 32

        .local v1, e:Ljava/lang/Exception;

        invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V

        goto :goto_0

    .end method

  • 相关阅读:
    多线程(6)线程属性
    多线程(五) Thread和Object中线程相关方法
    面试汇总
    多线程(4)线程生命周期
    多线程(3) 多线程之线程的停止和中断
    springboot(6)redis缓存
    软件安装(总)
    redis分布式锁
    第一天
    Thinkphp5高级进阶教程
  • 原文地址:https://www.cnblogs.com/xiaomaoyvtou/p/3490373.html
Copyright © 2011-2022 走看看