安卓逆向学习---初始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是基于栈的,Dalvik有专属的文件执行格式dex(Dalvik executable),jvm使用的是java字节码。
Dalvik VM你jvm速度更快,占用空间更少。
- 什么是Smali?
Smali,baksmali分贝时指安卓系统里的java虚拟机(Dalvik)所使用的一种。dex格式文件的汇编器,反汇编器。
语法为一行宽松的Jasmin/dedeser语法,且实现了.dex格式的所用功能(注解,调试信息,线路信息等)。
对apk文件进行反汇编后,便会生成此类文件。其中在Dalvik字节码中,寄存器都是32位的,能够支持任何类型,64位类型(Long/Double)用2个寄存器表示。
- Dalvik字节码有两种类型:原始类型,引用类型。
原始类型:
B --- byte
C --- char
D --- double
F --- float
I --- int
J --- long
S --- short
V --- void
Z --- boolean
[XXX --- array //数组表示方式:基本类型前加上“[”,eg:int型数组表示为:[I
LXXX/yyy --- object //对象表示以L开头,格式为LpackageName/objectName;(分号必须有)
//eg:String在Smali中为:LJava/lang.String; ,其中java/lang对应java.lang包,String就是定义在该包中的一个对象。
//内部类表示为:LpackName/objectName$subObjectName;。即在内部类前面加“$”符号。
方法定义:Func-Name(para-Type1para-Type2para-Type3...)Return-Type //参数之间没有空格
eg:hello()v //void hello()
hello(III)Z //boolean hello(int,int,int)
hello(Z[I[ILjava/lang/String;J)Ljava/lang/String //String hello(boolean,int[],int[],String,long)
- Smali基本语法
.field private isFlag:z 定义变量
.method 方法
.parameter 方法参数
.prologue 方法开始
.line 123 此方法位于第123行
invoke-super 调用父函数
const/high16 vO, 0x7fo3 把0x7fo3赋值给v0
invoke-direct 调用函数
return-void 函数返回void
.end method 函数结束
new-instance 创建实例
iput-object 对象赋值
iget-object 调用对象
invoke-static 调用静态函数
- 条件跳转分支:
"if-eq vA, vB, :con_**" 如果vA等于vB则跳转到:cond_ **
"if-ne vA, vB, :cond_**" 如果vA不等于vB则跳转到:cond_ **
"if-It 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-Itz 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 **
安卓逆向学习---初始APK、Dalvik字节码以及Smali的更多相关文章
- APK反编译之一:基础知识—APK、Dalvik字节码和smali文件
refs: APK反编译之一:基础知识http://blog.csdn.net/lpohvbe/article/details/7981386 APK反编译之二:工具介绍http://blog.csd ...
- 003dayPython学习初始模块和字节码
一.注释: 1.单行注释 # 被注释的内容 2.多行注释 """ 被注释的内容 """ 二.模块 我们在编程的时候,往往是一个主.py文件, ...
- Android逆向基础----Dalvik字节码
参考此微博,更多详细内容可以到这里查看 http://blog.csdn.net/dd864140130/article/details/52076515 Dalvik字节码 1.寄存器位32位,64 ...
- 【腾讯内部干货分享】分析Dalvik字节码进行减包优化
http://wetest.qq.com/lab/view/?id=96?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.192184.TAS ...
- 实例具体解释:反编译Android APK,改动字节码后再回编译成APK
本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能 ...
- 安卓逆向基础(001)-APK安装流程
1.在/data/app下以报名为文件夹名新建文件夹 APK包存放在这里 以及lib文件 存放so 2./data/dalvik-cache 存放dex dex是dalvik虚拟机可执行文件 3./d ...
- 4. 如何解释dalvik字节码
如何解释dalvik字节码 文档: 在Android系统源码目录dalvik\docs有相关指令文档 dalvik-bytecode.html 实战: 来直接实战模拟来理解枯燥的理论 用IDA打开一个 ...
- Dalvik字节码的类型,方法与字段表示方法
Dalvik字节码有着自己的类型,方法与字段表示方法,这些方法与Dalvik虚拟机指令集一起组成了一条条的Dalvik汇编代码. 1.类型 Dalvik字节码只有两种类型,基本类型与引用类型.Dalv ...
- JVM学习笔记——类加载和字节码技术篇
JVM学习笔记--类加载和字节码技术篇 在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的类加载和字节码技术部分 我们会分为以下几部分进行介绍: 类文件结构 字节码指令 编译期处理 类 ...
随机推荐
- 利用sshtunnel实现跳板机的效果[嵌套ssh实现]
with SSHTunnelForwarder ( ssh_address_or_host = (conf.server_ip,conf.server_port), ssh_username=conf ...
- mysql中的 随机字符串的生成
方法1. SELECT SUBSTRING(MD5(RAND()),FLOOR(RAND()*26)+1,6) AS rand_str; 上诉示例产生的是:6位长度的随机字符串. 函数解释: rand ...
- eclipse下创建maven项目并部署到tomcat服务器(转)
maven项目部署到服务器有很多方法,可以利用jetty-maven-plugin或者tomcat-maven-plugin,这属于maven的知识点. 通常开发中,需要将项目放在服务器上借助开发工具 ...
- 36-2018 蓝桥杯Java B组试题及答案
1:第几天2000年的1月1日,是那一年的第1天.那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 用excel算,答案125. 2.标题:方格计数 ...
- Oracle to_char函数的使用方法
Oracle to_char函数的功能是将数值型或者日期型转化为字符型,下面就为您详细介绍Oracle to_char函数的使用,希望对您能有所帮助. Postgres 格式化函数提供一套有效的工具用 ...
- Python 字符串 (isdigit, isalnum,isnumeric)转
Python isdigit() 方法检测字符串是否只由数字组成. 语法 isdigit()方法语法: str.isdigit() 参数 无. 返回值 如果字符串只包含数字则返回 True 否则返回 ...
- PAT 1032 挖掘机技术哪家强(20)(有测试样例)
1032 挖掘机技术哪家强(20)(20 分) 为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过10 ...
- PAT 1024 科学计数法 (20)(精简版代码+思路+推荐测试样例)
1024 科学计数法 (20)(20 分) 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+-][0-9]+, ...
- andorid 表格布局
tablelayout.xml表格布局 <?xml version="1.0" encoding="utf-8"?> <TableLayout ...
- iOS.-.cxx_destruct
-.cxx_destruct 方法: 该方法是由编译器生成的方法. 1. “ARC actually creates a -.cxx_destruct method to handle freeing ...