Android逆向基础----Dalvik字节码

参考此微博,更多详细内容可以到这里查看

http://blog.csdn.net/dd864140130/article/details/52076515

Dalvik字节码

1、寄存器位32位,64位数据(double)用两个相邻的32寄存器表示。

2、两种类型:基本类型和引用类型(对象和数组)

全限定名是什么?

以String为例,其完整名称是Java.lang.String,那么其全限定名就是java/lang/String;,即java.lang.String的”.”用”/”代替,并在末尾添加分号”;”做结束符.

Dalvik字节码类型描述符

V     void               只能用于返回值类型

Z     boolean         逻辑值,返回真(true)假(false)

B     byte              字节型

S     short             短整型

C     char              字符型

I      int                 整数型

J      long(64位)长整型

F     float              浮点型

D     double          双精度浮点

L     对象类型,java类

java->package.name.ObjectName;

Davik->Lpackage/name/ObjectName

[      数组类型

java->int[]     int[][]      三维数组

Davik->[I;      [[I;   [[[I;

字段的描述

Davik中对字段的描述分为两种,对基本类型字段的描述和对引用类型的描述,但两者的描述格式一样:

对象类型描述符->字段名:类型描述符;

比如com.sbbic.Test类中存在String类型的name字段及int类型的age字段,那么其描述为:

Lcom/sbbic/Test;->name:Ljava/lang/String;

Lcom/sbbic/test;->age:I

Dalvik指令集

数据定义指令      const

const-赋值方法 寄存器名 附加内容


指令


描述


const/4 vA,#+B


将数值符号扩展为32后赋值给寄存器vA


const-wide/16 vAA,#+BBBB


将数值符号扩展为64位后赋值个寄存器对vAA


const-string vAA,[email protected]


通过字符串索引高走字符串赋值给寄存器vAA


const-class vAA,[email protected]


通过类型索引获取一个类的引用赋值给寄存器vAA

数据操作指令      move


指令


描述


move vA,vB


将vB寄存器的值赋值给vA寄存器,vA和vB寄存器都是4位


move/from16 vAA,VBBBB


将vBBBB寄存器(16位)的值赋值给vAA寄存器(7位),from16表示源寄存器vBBBB是16位的


move/16 vAAAA,vBBBB


将寄存器vBBBB的值赋值给vAAAA寄存器,16表示源寄存器vBBBB和目标寄存器vAAAA都是16位


move-object vA,vB


将vB寄存器中的对象引用赋值给vA寄存器,vA寄存器和vB寄存器都是4位


move-result vAA


将上一个invoke指令(方法调用)操作的单字(32位)非对象结果赋值给vAA寄存器


move-result-wide vAA


将上一个invoke指令操作的双字(64位)非对象结果赋值给vAA寄存器


mvoe-result-object vAA


将上一个invoke指令操作的对象结果赋值给vAA寄存器


move-exception vAA


保存上一个运行时发生的异常到vAA寄存器

3.跳转指令


if-eq


等于则跳转


==


if-ne


不等于则跳转


!=


if-lt


小于则跳转


<


if-ge


大于或等于则跳转


>=


if-gt


大于则跳转


>


if-le


小于或等于则跳转


<=


goto


无条件跳转


switch


分支跳转

返回0 实现跳转

时间: 2024-10-24 02:36:23

Android逆向基础----Dalvik字节码的相关文章

安卓逆向学习---初始APK、Dalvik字节码以及Smali

参考链接:https://www.52pojie.cn/thread-395689-1-1.html res目录下资源文件在编译时会自动生成索引文件(R.java ), asset目录下的资源文件无需生成索引. 一般来说:使用C++游戏引擎的资源文件放在asset下 java开发中除音频和视频资源(放在raw或asset下),均放在res下. Dalvik字节码是什么? Dalvik是Google专门为Android设计的一个虚拟机. Dalvik VM是基于寄存器的,而JVM是基于栈的,Dal

APK、Dalvik字节码和smali文件

     这部分涉及的内容比较多,我会尽量从最基础开始说起,但需要读者一定的android开发基础.但注意可能讲解详细得令人作呕,请根据个人理解程度斟酌. APK.Dalvik字节码和smali文件 APK文件 大家都应该知道APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,例如修改后缀后用RAR打开鳄鱼小顽皮APK能看到的是(Google Play下载的完整版版本): Where's My Water.zip\ asset\            

dalvik字节码问答

参考资料 https://source.android.com/devices/tech/dalvik/dalvik-bytecode.html https://source.android.com/devices/tech/dalvik/instruction-formats.html http://www.milk.com/kodebase/dalvik-docs-mirror/docs/dalvik-bytecode.html 什么是Dalvik字节码? dalvik 的虚拟机指令代码.d

Android逆向基础----APK文件结构

参考这个博客 http://www.cnblogs.com/wangtianxj/archive/2010/06/13/1757639.html APK文件结构: AndroidManifest.xml                 配置清单 META-INF                                  签名 assets                                        资源 classes.dex                      

4. 如何解释dalvik字节码

如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个dex文件, 设置显示指令 随便找一段代码 注意: 206E 28DE 0050是IDA的显示问题 在文件中的存储顺序是 6E 20 DE 28 50 00 在WinHex搜索一下就知道了 上面截图的指令在文件中的排列顺序如下: 14 05 09 00 09 01 6E 20 DE 28 50 00

Android动态加载字节码

概述 面对App业务逻辑的频繁变更,如果每一次改变都对App进行一次升级,会降低App的用户体验,那么App进行模块化升级(这里与增量升级是不同的)是很好的解决方案,让用户在完全无感觉的情况下改变App中的业务逻辑.要实现这种模块化升级,动态加载字节码(jar/dex)就是实现这个需求的理论基础. Android系统加载字节码 Android的虚拟机(Dalvik VM)无法识别普通jar包中的字节码,所以需要通过字节码转换工具将jar转换成dex,jar包中的所有字节码都会打进classes.

Dalvik字节码的类型,方法与字段表示方法

Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalvik使用这两种类型来表示Java语言的全部类型,除了对象与数组属于引用类型外,其他的Java类型都是基本类型.BakSmali严格遵守DEX文件格式中的类型描述符定义.类型描述符对照如下表 语法 含义 V void,只用于返回类型 Z boolean B byte S short C char I

android逆向基础:apk 反编译 重打包 重签名

apk 反编译大家都比较熟悉,这里只做一个笔记. 1 反编译 apk apktool d perfect.apk 这样就把资源文件解压缩了, classes.dex 也反编译成了 smali 文件 2 修改 smali 文件 得到 smali 文件,现在就可以对 smali 文件进行修改和添加自己的代码了. 当然可以进一步用  dex2jar 处理将  dex 转成 java class 文件, 再用  jd-jui 等反编译成 java 代码. 现在 apk 基本都做了混淆, 但仔细读还是基本

Android逆向-Android逆向基础10(so文件分析大合集)

0x00 前言 导航 博客导航戳这里练习资源戳这里 说明 在so文件的分析上,我们需要对一些ARM汇编的逻辑实现.在代码逻辑上,只对if,switch,还有循环进行一个demo分析和创建.可能会篇幅比较大. 内容 1.if逻辑NDK编程2.if逻辑ARM分析3.switch逻辑NDK编程4.switch逻辑ARM分析5.循环逻辑NDK编程6.循环逻辑ARM分析 0x01 if逻辑NDK编程 demo使用之前的demo,如果有兴趣,可以去看看博客导航戳这里 说明 demo主要实现一个输入,然后根据