zoukankan      html  css  js  c++  java
  • 【移动安全基础篇】——12、Dalvik虚拟机

    1. Dalvik VM(DVM)和 和 Java VM(JVM) 的区别:

    1) JVM 是运行 Java 字节码,DVM 是运行 Dalvik 字节码
    2) Dalvik 可执行文件(.dex)的体积更小
    3) 虚拟机架构不同:JVM 是基于栈,DVM 是基于寄存器

    Java 代码:

    反编译 int foo(int a, int b)函数的 Java 字节码:

    反编译 int foo(int a, int b)函数的 Dalvik 字节码:

    2. Dalvik  汇编语言介绍
    v  命名法与 p  命名法:

    类型描述符:

    寄存器:

    1) DVM 寄存器都是 32bit 的,与名称无关
    2) J,D 类型,需要相邻 2 个寄存器
    3) 对象类型:Ljava/lang/String; = java.lang.String
    4) 数组:[I = int [],[[I = int [][]

    方法:

    1) 格式:Lpackage/name/ObjectName;->MethodName(III)Z
    2) 例子:method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String
    等价于:String method(int, int[][], int, String, Object[])
    字段:
    格式:Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;

    3.  程序编译与反编译

    主要的反编译器:

    1)jeb;
    2)AndroidKiller

    Dalvik  指令集:

    1) 空操作指令:nop
    2) 数据操作指令:move

    move vA, vB:将 vB 寄存器的值赋给 vA 寄存器,源寄存器与目的寄存器都是 4 位
    move-object/from 16 vAA, vBBBB:为对象赋值,源寄存器为 8 位,目的寄存器为 16

    4.  汇编语言实现

    对应的 Java 代码:

    编译 smali  文件:

    java –jar smali.jar –o classes.dex HelloWorld.smali

    执行程序:
    上传到手机:adb push classes.dex /data/local/
    执行程序:adb shell dalvikvm –cp /data/local/classes.dex HelloWorld

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    Python3输入输出
    Python3文件
    Python3OS文件/方法
    makefile通用版本(一)
    C语言正则表达式
    正则表达式
    sed、awk工具
    shell编程
    Sqlite3-安装使用
    Powershell-获取命令和帮助
  • 原文地址:https://www.cnblogs.com/devi1/p/13486454.html
Copyright © 2011-2022 走看看